@rosen-bridge/abstract-extractor 0.1.0-2afdd7
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/README.md +24 -0
- package/dist/AbstractExtractor.d.ts +25 -0
- package/dist/AbstractExtractor.d.ts.map +1 -0
- package/dist/AbstractExtractor.js +3 -0
- package/dist/constants.d.ts +4 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +4 -0
- package/dist/ergo/AbstractErgoExtractor.d.ts +39 -0
- package/dist/ergo/AbstractErgoExtractor.d.ts.map +1 -0
- package/dist/ergo/AbstractErgoExtractor.js +57 -0
- package/dist/ergo/AbstractErgoExtractorAction.d.ts +27 -0
- package/dist/ergo/AbstractErgoExtractorAction.d.ts.map +1 -0
- package/dist/ergo/AbstractErgoExtractorAction.js +3 -0
- package/dist/ergo/index.d.ts +8 -0
- package/dist/ergo/index.d.ts.map +1 -0
- package/dist/ergo/index.js +8 -0
- package/dist/ergo/initializable/AbstractInitializable.d.ts +48 -0
- package/dist/ergo/initializable/AbstractInitializable.d.ts.map +1 -0
- package/dist/ergo/initializable/AbstractInitializable.js +84 -0
- package/dist/ergo/initializable/AbstractInitializableAction.d.ts +9 -0
- package/dist/ergo/initializable/AbstractInitializableAction.d.ts.map +1 -0
- package/dist/ergo/initializable/AbstractInitializableAction.js +4 -0
- package/dist/ergo/initializable/InitializableByAddress.d.ts +26 -0
- package/dist/ergo/initializable/InitializableByAddress.d.ts.map +1 -0
- package/dist/ergo/initializable/InitializableByAddress.js +38 -0
- package/dist/ergo/initializable/InitializableByToken.d.ts +26 -0
- package/dist/ergo/initializable/InitializableByToken.d.ts.map +1 -0
- package/dist/ergo/initializable/InitializableByToken.js +38 -0
- package/dist/ergo/initializable/index.d.ts +5 -0
- package/dist/ergo/initializable/index.d.ts.map +1 -0
- package/dist/ergo/initializable/index.js +5 -0
- package/dist/ergo/interfaces.d.ts +56 -0
- package/dist/ergo/interfaces.d.ts.map +1 -0
- package/dist/ergo/interfaces.js +6 -0
- package/dist/ergo/network/AbstractNetwork.d.ts +32 -0
- package/dist/ergo/network/AbstractNetwork.d.ts.map +1 -0
- package/dist/ergo/network/AbstractNetwork.js +3 -0
- package/dist/ergo/network/ExplorerNetwork.d.ts +35 -0
- package/dist/ergo/network/ExplorerNetwork.d.ts.map +1 -0
- package/dist/ergo/network/ExplorerNetwork.js +53 -0
- package/dist/ergo/network/NodeNetwork.d.ts +42 -0
- package/dist/ergo/network/NodeNetwork.d.ts.map +1 -0
- package/dist/ergo/network/NodeNetwork.js +71 -0
- package/dist/ergo/utils.d.ts +8 -0
- package/dist/ergo/utils.d.ts.map +1 -0
- package/dist/ergo/utils.js +16 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/interfaces.d.ts +12 -0
- package/dist/interfaces.d.ts.map +1 -0
- package/dist/interfaces.js +2 -0
- package/lib/AbstractExtractor.ts +31 -0
- package/lib/constants.ts +3 -0
- package/lib/ergo/AbstractErgoExtractor.ts +107 -0
- package/lib/ergo/AbstractErgoExtractorAction.ts +39 -0
- package/lib/ergo/index.ts +7 -0
- package/lib/ergo/initializable/AbstractInitializable.ts +148 -0
- package/lib/ergo/initializable/AbstractInitializableAction.ts +11 -0
- package/lib/ergo/initializable/InitializableByAddress.ts +53 -0
- package/lib/ergo/initializable/InitializableByToken.ts +53 -0
- package/lib/ergo/initializable/index.ts +4 -0
- package/lib/ergo/interfaces.ts +64 -0
- package/lib/ergo/network/AbstractNetwork.ts +35 -0
- package/lib/ergo/network/ExplorerNetwork.ts +68 -0
- package/lib/ergo/network/NodeNetwork.ts +93 -0
- package/lib/ergo/utils.ts +15 -0
- package/lib/index.ts +3 -0
- package/lib/interfaces.ts +12 -0
- package/package.json +42 -0
- package/tests/AbstractExtractor.mock.ts +26 -0
- package/tests/AbstractExtractor.spec.ts +106 -0
- package/tests/initializable/AbstractInitializable.mock.ts +31 -0
- package/tests/initializable/AbstractInitializable.spec.ts +258 -0
- package/tests/initializable/testData.ts +59 -0
- package/tests/testData.ts +111 -0
- package/tsconfig.build.json +7 -0
- package/tsconfig.build.tsbuildinfo +1 -0
- package/tsconfig.json +7 -0
- package/vitest.config.ts +17 -0
package/.eslintignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
dist
|
package/README.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# extractor
|
|
2
|
+
|
|
3
|
+
## Table of contents
|
|
4
|
+
|
|
5
|
+
- [Introduction](#introduction)
|
|
6
|
+
- [Installation](#installation)
|
|
7
|
+
|
|
8
|
+
## Introduction
|
|
9
|
+
|
|
10
|
+
Rosen Bridge extractor interfaces to work with scanner
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
npm:
|
|
15
|
+
|
|
16
|
+
```sh
|
|
17
|
+
npm i @rosen-bridge/abstract-extractor
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
yarn:
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
|
+
yarn add @rosen-bridge/abstract-extractor
|
|
24
|
+
```
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { BlockInfo, Block } from './interfaces';
|
|
2
|
+
export declare abstract class AbstractExtractor<TransactionType> {
|
|
3
|
+
/**
|
|
4
|
+
* process a list of transactions in a block and store required information
|
|
5
|
+
* @param txs list of transactions in the block
|
|
6
|
+
* @param block
|
|
7
|
+
* @return true if the process is completed successfully and false otherwise
|
|
8
|
+
*/
|
|
9
|
+
abstract processTransactions: (txs: Array<TransactionType>, block: Block) => Promise<boolean>;
|
|
10
|
+
/**
|
|
11
|
+
* return extractor id. This id must be unique over all extractors.
|
|
12
|
+
*/
|
|
13
|
+
abstract getId: () => string;
|
|
14
|
+
/**
|
|
15
|
+
* fork one block and remove all stored information for this block
|
|
16
|
+
* @param hash block hash
|
|
17
|
+
*/
|
|
18
|
+
abstract forkBlock: (hash: string) => Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* initialize extractor database with data created below the initial height
|
|
21
|
+
* @param initialBlock
|
|
22
|
+
*/
|
|
23
|
+
abstract initializeBoxes: (initialBlock: BlockInfo) => Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=AbstractExtractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AbstractExtractor.d.ts","sourceRoot":"","sources":["../lib/AbstractExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAEhD,8BAAsB,iBAAiB,CAAC,eAAe;IACrD;;;;;OAKG;IACH,QAAQ,CAAC,mBAAmB,EAAE,CAC5B,GAAG,EAAE,KAAK,CAAC,eAAe,CAAC,EAC3B,KAAK,EAAE,KAAK,KACT,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,MAAM,CAAC;IAE7B;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpD;;;OAGG;IACH,QAAQ,CAAC,eAAe,EAAE,CAAC,YAAY,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtE"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export class AbstractExtractor {
|
|
2
|
+
}
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RFeHRyYWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvQWJzdHJhY3RFeHRyYWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFnQixpQkFBaUI7Q0E0QnRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmxvY2tJbmZvLCBCbG9jayB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdEV4dHJhY3RvcjxUcmFuc2FjdGlvblR5cGU+IHtcbiAgLyoqXG4gICAqIHByb2Nlc3MgYSBsaXN0IG9mIHRyYW5zYWN0aW9ucyBpbiBhIGJsb2NrIGFuZCBzdG9yZSByZXF1aXJlZCBpbmZvcm1hdGlvblxuICAgKiBAcGFyYW0gdHhzIGxpc3Qgb2YgdHJhbnNhY3Rpb25zIGluIHRoZSBibG9ja1xuICAgKiBAcGFyYW0gYmxvY2tcbiAgICogQHJldHVybiB0cnVlIGlmIHRoZSBwcm9jZXNzIGlzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgYW5kIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgYWJzdHJhY3QgcHJvY2Vzc1RyYW5zYWN0aW9uczogKFxuICAgIHR4czogQXJyYXk8VHJhbnNhY3Rpb25UeXBlPixcbiAgICBibG9jazogQmxvY2tcbiAgKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuXG4gIC8qKlxuICAgKiByZXR1cm4gZXh0cmFjdG9yIGlkLiBUaGlzIGlkIG11c3QgYmUgdW5pcXVlIG92ZXIgYWxsIGV4dHJhY3RvcnMuXG4gICAqL1xuICBhYnN0cmFjdCBnZXRJZDogKCkgPT4gc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBmb3JrIG9uZSBibG9jayBhbmQgcmVtb3ZlIGFsbCBzdG9yZWQgaW5mb3JtYXRpb24gZm9yIHRoaXMgYmxvY2tcbiAgICogQHBhcmFtIGhhc2ggYmxvY2sgaGFzaFxuICAgKi9cbiAgYWJzdHJhY3QgZm9ya0Jsb2NrOiAoaGFzaDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBpbml0aWFsaXplIGV4dHJhY3RvciBkYXRhYmFzZSB3aXRoIGRhdGEgY3JlYXRlZCBiZWxvdyB0aGUgaW5pdGlhbCBoZWlnaHRcbiAgICogQHBhcmFtIGluaXRpYWxCbG9ja1xuICAgKi9cbiAgYWJzdHJhY3QgaW5pdGlhbGl6ZUJveGVzOiAoaW5pdGlhbEJsb2NrOiBCbG9ja0luZm8pID0+IFByb21pc2U8dm9pZD47XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../lib/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,MAAM,CAAC;AAC7B,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,aAAa,MAAM,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export const API_LIMIT = 100;
|
|
2
|
+
export const RETRIAL_COUNT = 10;
|
|
3
|
+
export const DB_CHUNK_SIZE = 100;
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQzdCLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDaEMsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBBUElfTElNSVQgPSAxMDA7XG5leHBvcnQgY29uc3QgUkVUUklBTF9DT1VOVCA9IDEwO1xuZXhwb3J0IGNvbnN0IERCX0NIVU5LX1NJWkUgPSAxMDA7XG4iXX0=
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { DataSource } from 'typeorm';
|
|
2
|
+
import { AbstractLogger, DummyLogger } from '@rosen-bridge/abstract-logger';
|
|
3
|
+
import { AbstractExtractor } from '../AbstractExtractor';
|
|
4
|
+
import { AbstractErgoExtractorAction } from './AbstractErgoExtractorAction';
|
|
5
|
+
import { Block } from '../interfaces';
|
|
6
|
+
import { Transaction, OutputBox, ErgoExtractedData } from './interfaces';
|
|
7
|
+
export declare abstract class AbstractErgoExtractor<ExtractedData extends ErgoExtractedData> extends AbstractExtractor<Transaction> {
|
|
8
|
+
protected readonly dataSource: DataSource;
|
|
9
|
+
protected abstract actions: AbstractErgoExtractorAction<ExtractedData>;
|
|
10
|
+
protected logger: AbstractLogger;
|
|
11
|
+
constructor(logger?: DummyLogger);
|
|
12
|
+
/**
|
|
13
|
+
* extract box data to proper format (not including spending information)
|
|
14
|
+
* @param box
|
|
15
|
+
* @param blockId box inclusion block hash
|
|
16
|
+
* @param height box inclusion block height
|
|
17
|
+
* @return extracted data in proper format
|
|
18
|
+
*/
|
|
19
|
+
abstract extractBoxData: (box: OutputBox, blockId: string, height: number) => Omit<ExtractedData, 'spendBlock' | 'spendHeight'> | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* check proper data format in the box
|
|
22
|
+
* @param box
|
|
23
|
+
* @return true if the box has the required data and false otherwise
|
|
24
|
+
*/
|
|
25
|
+
abstract hasData: (box: OutputBox) => boolean;
|
|
26
|
+
/**
|
|
27
|
+
* process a list of transactions in a block and store required information
|
|
28
|
+
* @param txs list of transactions in the block
|
|
29
|
+
* @param block
|
|
30
|
+
* @return true if the process is completed successfully and false otherwise
|
|
31
|
+
*/
|
|
32
|
+
processTransactions: (txs: Transaction[], block: Block) => Promise<boolean>;
|
|
33
|
+
/**
|
|
34
|
+
* fork one block and remove all stored information for this block
|
|
35
|
+
* @param hash block hash
|
|
36
|
+
*/
|
|
37
|
+
forkBlock: (hash: string) => Promise<void>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=AbstractErgoExtractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AbstractErgoExtractor.d.ts","sourceRoot":"","sources":["../../lib/ergo/AbstractErgoExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAG5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EACL,WAAW,EACX,SAAS,EACT,iBAAiB,EAElB,MAAM,cAAc,CAAC;AAEtB,8BAAsB,qBAAqB,CACzC,aAAa,SAAS,iBAAiB,CACvC,SAAQ,iBAAiB,CAAC,WAAW,CAAC;IACtC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAC1C,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,2BAA2B,CAAC,aAAa,CAAC,CAAC;IACvE,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC;gBAErB,MAAM,cAAoB;IAKtC;;;;;;OAMG;IACH,QAAQ,CAAC,cAAc,EAAE,CACvB,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,KACX,IAAI,CAAC,aAAa,EAAE,YAAY,GAAG,aAAa,CAAC,GAAG,SAAS,CAAC;IAEnE;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,OAAO,CAAC;IAE9C;;;;;OAKG;IACH,mBAAmB,QACZ,WAAW,EAAE,SACX,KAAK,KACX,QAAQ,OAAO,CAAC,CA0CjB;IAEF;;;OAGG;IACH,SAAS,SAAgB,MAAM,KAAG,QAAQ,IAAI,CAAC,CAE7C;CACH"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { DummyLogger } from '@rosen-bridge/abstract-logger';
|
|
2
|
+
import JsonBigInt from '@rosen-bridge/json-bigint';
|
|
3
|
+
import { AbstractExtractor } from '../AbstractExtractor';
|
|
4
|
+
export class AbstractErgoExtractor extends AbstractExtractor {
|
|
5
|
+
dataSource;
|
|
6
|
+
logger;
|
|
7
|
+
constructor(logger = new DummyLogger()) {
|
|
8
|
+
super();
|
|
9
|
+
this.logger = logger;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* process a list of transactions in a block and store required information
|
|
13
|
+
* @param txs list of transactions in the block
|
|
14
|
+
* @param block
|
|
15
|
+
* @return true if the process is completed successfully and false otherwise
|
|
16
|
+
*/
|
|
17
|
+
processTransactions = async (txs, block) => {
|
|
18
|
+
try {
|
|
19
|
+
const boxes = [];
|
|
20
|
+
const spentInfos = [];
|
|
21
|
+
for (const tx of txs) {
|
|
22
|
+
for (const output of tx.outputs) {
|
|
23
|
+
if (!this.hasData(output)) {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
this.logger.debug(`Trying to extract data from box ${output.boxId}`);
|
|
27
|
+
const extractedData = this.extractBoxData(output, block.hash, block.height);
|
|
28
|
+
if (extractedData) {
|
|
29
|
+
this.logger.debug(`Extracted data ${JsonBigInt.stringify(extractedData)} from box ${output.boxId}`);
|
|
30
|
+
boxes.push(extractedData);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
let boxIndex = 1;
|
|
34
|
+
for (const input of tx.inputs) {
|
|
35
|
+
spentInfos.push({ txId: tx.id, boxId: input.boxId, index: boxIndex });
|
|
36
|
+
boxIndex += 1;
|
|
37
|
+
}
|
|
38
|
+
if (boxes.length > 0)
|
|
39
|
+
await this.actions.insertBoxes(boxes, this.getId());
|
|
40
|
+
await this.actions.spendBoxes(spentInfos, block, this.getId());
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
this.logger.error(`Error in storing data in ${this.getId()} of the block ${block}: ${e}`);
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
return true;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* fork one block and remove all stored information for this block
|
|
51
|
+
* @param hash block hash
|
|
52
|
+
*/
|
|
53
|
+
forkBlock = async (hash) => {
|
|
54
|
+
await this.actions.deleteBlockBoxes(hash, this.getId());
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RFcmdvRXh0cmFjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2VyZ28vQWJzdHJhY3RFcmdvRXh0cmFjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBa0IsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUUsT0FBTyxVQUFVLE1BQU0sMkJBQTJCLENBQUM7QUFFbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFVekQsTUFBTSxPQUFnQixxQkFFcEIsU0FBUSxpQkFBOEI7SUFDbkIsVUFBVSxDQUFhO0lBRWhDLE1BQU0sQ0FBaUI7SUFFakMsWUFBWSxNQUFNLEdBQUcsSUFBSSxXQUFXLEVBQUU7UUFDcEMsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBc0JEOzs7OztPQUtHO0lBQ0gsbUJBQW1CLEdBQUcsS0FBSyxFQUN6QixHQUFrQixFQUNsQixLQUFZLEVBQ00sRUFBRTtRQUNwQixJQUFJLENBQUM7WUFDSCxNQUFNLEtBQUssR0FBeUIsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sVUFBVSxHQUFxQixFQUFFLENBQUM7WUFDeEMsS0FBSyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDckIsS0FBSyxNQUFNLE1BQU0sSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQzFCLFNBQVM7b0JBQ1gsQ0FBQztvQkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7b0JBQ3JFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQ3ZDLE1BQU0sRUFDTixLQUFLLENBQUMsSUFBSSxFQUNWLEtBQUssQ0FBQyxNQUFNLENBQ2IsQ0FBQztvQkFDRixJQUFJLGFBQWEsRUFBRSxDQUFDO3dCQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZixrQkFBa0IsVUFBVSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsYUFDbkQsTUFBTSxDQUFDLEtBQ1QsRUFBRSxDQUNILENBQUM7d0JBQ0YsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUE4QixDQUFDLENBQUM7b0JBQzdDLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7Z0JBQ2pCLEtBQUssTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUM5QixVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7b0JBQ3RFLFFBQVEsSUFBSSxDQUFDLENBQUM7Z0JBQ2hCLENBQUM7Z0JBRUQsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7b0JBQ2xCLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RCxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDakUsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2YsNEJBQTRCLElBQUksQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FDdkUsQ0FBQztZQUNGLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0lBRUY7OztPQUdHO0lBQ0gsU0FBUyxHQUFHLEtBQUssRUFBRSxJQUFZLEVBQWlCLEVBQUU7UUFDaEQsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMxRCxDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tICd0eXBlb3JtJztcbmltcG9ydCB7IEFic3RyYWN0TG9nZ2VyLCBEdW1teUxvZ2dlciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtbG9nZ2VyJztcbmltcG9ydCBKc29uQmlnSW50IGZyb20gJ0Byb3Nlbi1icmlkZ2UvanNvbi1iaWdpbnQnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdEV4dHJhY3RvciB9IGZyb20gJy4uL0Fic3RyYWN0RXh0cmFjdG9yJztcbmltcG9ydCB7IEFic3RyYWN0RXJnb0V4dHJhY3RvckFjdGlvbiB9IGZyb20gJy4vQWJzdHJhY3RFcmdvRXh0cmFjdG9yQWN0aW9uJztcbmltcG9ydCB7IEJsb2NrIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuICBUcmFuc2FjdGlvbixcbiAgT3V0cHV0Qm94LFxuICBFcmdvRXh0cmFjdGVkRGF0YSxcbiAgU3BlbmRJbmZvLFxufSBmcm9tICcuL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RFcmdvRXh0cmFjdG9yPFxuICBFeHRyYWN0ZWREYXRhIGV4dGVuZHMgRXJnb0V4dHJhY3RlZERhdGFcbj4gZXh0ZW5kcyBBYnN0cmFjdEV4dHJhY3RvcjxUcmFuc2FjdGlvbj4ge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGF0YVNvdXJjZTogRGF0YVNvdXJjZTtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGFjdGlvbnM6IEFic3RyYWN0RXJnb0V4dHJhY3RvckFjdGlvbjxFeHRyYWN0ZWREYXRhPjtcbiAgcHJvdGVjdGVkIGxvZ2dlcjogQWJzdHJhY3RMb2dnZXI7XG5cbiAgY29uc3RydWN0b3IobG9nZ2VyID0gbmV3IER1bW15TG9nZ2VyKCkpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICB9XG5cbiAgLyoqXG4gICAqIGV4dHJhY3QgYm94IGRhdGEgdG8gcHJvcGVyIGZvcm1hdCAobm90IGluY2x1ZGluZyBzcGVuZGluZyBpbmZvcm1hdGlvbilcbiAgICogQHBhcmFtIGJveFxuICAgKiBAcGFyYW0gYmxvY2tJZCBib3ggaW5jbHVzaW9uIGJsb2NrIGhhc2hcbiAgICogQHBhcmFtIGhlaWdodCBib3ggaW5jbHVzaW9uIGJsb2NrIGhlaWdodFxuICAgKiBAcmV0dXJuIGV4dHJhY3RlZCBkYXRhIGluIHByb3BlciBmb3JtYXRcbiAgICovXG4gIGFic3RyYWN0IGV4dHJhY3RCb3hEYXRhOiAoXG4gICAgYm94OiBPdXRwdXRCb3gsXG4gICAgYmxvY2tJZDogc3RyaW5nLFxuICAgIGhlaWdodDogbnVtYmVyXG4gICkgPT4gT21pdDxFeHRyYWN0ZWREYXRhLCAnc3BlbmRCbG9jaycgfCAnc3BlbmRIZWlnaHQnPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogY2hlY2sgcHJvcGVyIGRhdGEgZm9ybWF0IGluIHRoZSBib3hcbiAgICogQHBhcmFtIGJveFxuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIGJveCBoYXMgdGhlIHJlcXVpcmVkIGRhdGEgYW5kIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgYWJzdHJhY3QgaGFzRGF0YTogKGJveDogT3V0cHV0Qm94KSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBwcm9jZXNzIGEgbGlzdCBvZiB0cmFuc2FjdGlvbnMgaW4gYSBibG9jayBhbmQgc3RvcmUgcmVxdWlyZWQgaW5mb3JtYXRpb25cbiAgICogQHBhcmFtIHR4cyBsaXN0IG9mIHRyYW5zYWN0aW9ucyBpbiB0aGUgYmxvY2tcbiAgICogQHBhcmFtIGJsb2NrXG4gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcHJvY2VzcyBpcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IGFuZCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHByb2Nlc3NUcmFuc2FjdGlvbnMgPSBhc3luYyAoXG4gICAgdHhzOiBUcmFuc2FjdGlvbltdLFxuICAgIGJsb2NrOiBCbG9ja1xuICApOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYm94ZXM6IEFycmF5PEV4dHJhY3RlZERhdGE+ID0gW107XG4gICAgICBjb25zdCBzcGVudEluZm9zOiBBcnJheTxTcGVuZEluZm8+ID0gW107XG4gICAgICBmb3IgKGNvbnN0IHR4IG9mIHR4cykge1xuICAgICAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiB0eC5vdXRwdXRzKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmhhc0RhdGEob3V0cHV0KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBUcnlpbmcgdG8gZXh0cmFjdCBkYXRhIGZyb20gYm94ICR7b3V0cHV0LmJveElkfWApO1xuICAgICAgICAgIGNvbnN0IGV4dHJhY3RlZERhdGEgPSB0aGlzLmV4dHJhY3RCb3hEYXRhKFxuICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgYmxvY2suaGFzaCxcbiAgICAgICAgICAgIGJsb2NrLmhlaWdodFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGV4dHJhY3RlZERhdGEpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgICBgRXh0cmFjdGVkIGRhdGEgJHtKc29uQmlnSW50LnN0cmluZ2lmeShleHRyYWN0ZWREYXRhKX0gZnJvbSBib3ggJHtcbiAgICAgICAgICAgICAgICBvdXRwdXQuYm94SWRcbiAgICAgICAgICAgICAgfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBib3hlcy5wdXNoKGV4dHJhY3RlZERhdGEgYXMgRXh0cmFjdGVkRGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBib3hJbmRleCA9IDE7XG4gICAgICAgIGZvciAoY29uc3QgaW5wdXQgb2YgdHguaW5wdXRzKSB7XG4gICAgICAgICAgc3BlbnRJbmZvcy5wdXNoKHsgdHhJZDogdHguaWQsIGJveElkOiBpbnB1dC5ib3hJZCwgaW5kZXg6IGJveEluZGV4IH0pO1xuICAgICAgICAgIGJveEluZGV4ICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYm94ZXMubGVuZ3RoID4gMClcbiAgICAgICAgICBhd2FpdCB0aGlzLmFjdGlvbnMuaW5zZXJ0Qm94ZXMoYm94ZXMsIHRoaXMuZ2V0SWQoKSk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWN0aW9ucy5zcGVuZEJveGVzKHNwZW50SW5mb3MsIGJsb2NrLCB0aGlzLmdldElkKCkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICBgRXJyb3IgaW4gc3RvcmluZyBkYXRhIGluICR7dGhpcy5nZXRJZCgpfSBvZiB0aGUgYmxvY2sgJHtibG9ja306ICR7ZX1gXG4gICAgICApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBmb3JrIG9uZSBibG9jayBhbmQgcmVtb3ZlIGFsbCBzdG9yZWQgaW5mb3JtYXRpb24gZm9yIHRoaXMgYmxvY2tcbiAgICogQHBhcmFtIGhhc2ggYmxvY2sgaGFzaFxuICAgKi9cbiAgZm9ya0Jsb2NrID0gYXN5bmMgKGhhc2g6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGF3YWl0IHRoaXMuYWN0aW9ucy5kZWxldGVCbG9ja0JveGVzKGhhc2gsIHRoaXMuZ2V0SWQoKSk7XG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Block } from '../interfaces';
|
|
2
|
+
import { SpendInfo } from './interfaces';
|
|
3
|
+
export declare abstract class AbstractErgoExtractorAction<ExtractedData> {
|
|
4
|
+
/**
|
|
5
|
+
* insert all extracted box data in an atomic transaction
|
|
6
|
+
* @param data
|
|
7
|
+
* @param extractorId
|
|
8
|
+
* @return process success
|
|
9
|
+
*/
|
|
10
|
+
abstract insertBoxes: (data: ExtractedData[], extractorId: string) => Promise<boolean>;
|
|
11
|
+
/**
|
|
12
|
+
* update spending information of stored boxes
|
|
13
|
+
* @param spendInfos
|
|
14
|
+
* @param block
|
|
15
|
+
* @param extractorId
|
|
16
|
+
*/
|
|
17
|
+
abstract spendBoxes: (spendInfos: SpendInfo[], block: Block, extractorId: string) => Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* delete extracted data from a specific block
|
|
20
|
+
* if a box is spend in this block mark it as unspent
|
|
21
|
+
* if a box is created in this block remove it from database
|
|
22
|
+
* @param block
|
|
23
|
+
* @param extractorId
|
|
24
|
+
*/
|
|
25
|
+
abstract deleteBlockBoxes: (block: string, extractorId: string) => Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=AbstractErgoExtractorAction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AbstractErgoExtractorAction.d.ts","sourceRoot":"","sources":["../../lib/ergo/AbstractErgoExtractorAction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,8BAAsB,2BAA2B,CAAC,aAAa;IAC7D;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,EAAE,CACpB,IAAI,EAAE,aAAa,EAAE,EACrB,WAAW,EAAE,MAAM,KAChB,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtB;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,CACnB,UAAU,EAAE,SAAS,EAAE,EACvB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,MAAM,KAChB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnB;;;;;;OAMG;IACH,QAAQ,CAAC,gBAAgB,EAAE,CACzB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,KAChB,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export class AbstractErgoExtractorAction {
|
|
2
|
+
}
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RFcmdvRXh0cmFjdG9yQWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2VyZ28vQWJzdHJhY3RFcmdvRXh0cmFjdG9yQWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sT0FBZ0IsMkJBQTJCO0NBbUNoRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJsb2NrIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTcGVuZEluZm8gfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RFcmdvRXh0cmFjdG9yQWN0aW9uPEV4dHJhY3RlZERhdGE+IHtcbiAgLyoqXG4gICAqIGluc2VydCBhbGwgZXh0cmFjdGVkIGJveCBkYXRhIGluIGFuIGF0b21pYyB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcGFyYW0gZXh0cmFjdG9ySWRcbiAgICogQHJldHVybiBwcm9jZXNzIHN1Y2Nlc3NcbiAgICovXG4gIGFic3RyYWN0IGluc2VydEJveGVzOiAoXG4gICAgZGF0YTogRXh0cmFjdGVkRGF0YVtdLFxuICAgIGV4dHJhY3RvcklkOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuXG4gIC8qKlxuICAgKiB1cGRhdGUgc3BlbmRpbmcgaW5mb3JtYXRpb24gb2Ygc3RvcmVkIGJveGVzXG4gICAqIEBwYXJhbSBzcGVuZEluZm9zXG4gICAqIEBwYXJhbSBibG9ja1xuICAgKiBAcGFyYW0gZXh0cmFjdG9ySWRcbiAgICovXG4gIGFic3RyYWN0IHNwZW5kQm94ZXM6IChcbiAgICBzcGVuZEluZm9zOiBTcGVuZEluZm9bXSxcbiAgICBibG9jazogQmxvY2ssXG4gICAgZXh0cmFjdG9ySWQ6IHN0cmluZ1xuICApID0+IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIGRlbGV0ZSBleHRyYWN0ZWQgZGF0YSBmcm9tIGEgc3BlY2lmaWMgYmxvY2tcbiAgICogaWYgYSBib3ggaXMgc3BlbmQgaW4gdGhpcyBibG9jayBtYXJrIGl0IGFzIHVuc3BlbnRcbiAgICogaWYgYSBib3ggaXMgY3JlYXRlZCBpbiB0aGlzIGJsb2NrIHJlbW92ZSBpdCBmcm9tIGRhdGFiYXNlXG4gICAqIEBwYXJhbSBibG9ja1xuICAgKiBAcGFyYW0gZXh0cmFjdG9ySWRcbiAgICovXG4gIGFic3RyYWN0IGRlbGV0ZUJsb2NrQm94ZXM6IChcbiAgICBibG9jazogc3RyaW5nLFxuICAgIGV4dHJhY3RvcklkOiBzdHJpbmdcbiAgKSA9PiBQcm9taXNlPHZvaWQ+O1xufVxuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './AbstractErgoExtractor';
|
|
2
|
+
export * from './AbstractErgoExtractorAction';
|
|
3
|
+
export * from './interfaces';
|
|
4
|
+
export * from './network/ExplorerNetwork';
|
|
5
|
+
export * from './network/NodeNetwork';
|
|
6
|
+
export * from './initializable';
|
|
7
|
+
export * from './utils';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/ergo/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,cAAc,CAAC;AAC7B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './AbstractErgoExtractor';
|
|
2
|
+
export * from './AbstractErgoExtractorAction';
|
|
3
|
+
export * from './interfaces';
|
|
4
|
+
export * from './network/ExplorerNetwork';
|
|
5
|
+
export * from './network/NodeNetwork';
|
|
6
|
+
export * from './initializable';
|
|
7
|
+
export * from './utils';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvZXJnby9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL0Fic3RyYWN0RXJnb0V4dHJhY3Rvcic7XG5leHBvcnQgKiBmcm9tICcuL0Fic3RyYWN0RXJnb0V4dHJhY3RvckFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9uZXR3b3JrL0V4cGxvcmVyTmV0d29yayc7XG5leHBvcnQgKiBmcm9tICcuL25ldHdvcmsvTm9kZU5ldHdvcmsnO1xuZXhwb3J0ICogZnJvbSAnLi9pbml0aWFsaXphYmxlJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMnO1xuIl19
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
2
|
+
import { ErgoBox, ErgoExtractedData } from '../interfaces';
|
|
3
|
+
import { AbstractErgoExtractor } from '../AbstractErgoExtractor';
|
|
4
|
+
import { AbstractInitializableErgoExtractorAction } from './AbstractInitializableAction';
|
|
5
|
+
import { BlockInfo } from '../../interfaces';
|
|
6
|
+
export declare abstract class AbstractInitializableErgoExtractor<ExtractedData extends ErgoExtractedData> extends AbstractErgoExtractor<ExtractedData> {
|
|
7
|
+
protected initialize: boolean;
|
|
8
|
+
protected abstract actions: AbstractInitializableErgoExtractorAction<ExtractedData>;
|
|
9
|
+
/**
|
|
10
|
+
* create an initializable ergo extractor
|
|
11
|
+
* @param initialize ignore the initialization step if its false
|
|
12
|
+
* @param logger
|
|
13
|
+
*/
|
|
14
|
+
constructor(initialize?: boolean, logger?: AbstractLogger);
|
|
15
|
+
/**
|
|
16
|
+
* return init required boxes with offset limit
|
|
17
|
+
* @param offset
|
|
18
|
+
* @param limit
|
|
19
|
+
* @return boxes in batch
|
|
20
|
+
*/
|
|
21
|
+
abstract getBoxesWithOffsetLimit: (offset: number, limit: number) => Promise<{
|
|
22
|
+
boxes: ErgoBox[];
|
|
23
|
+
hasNextBatch: boolean;
|
|
24
|
+
}>;
|
|
25
|
+
/**
|
|
26
|
+
* return block information of specified tx
|
|
27
|
+
* @param txId
|
|
28
|
+
* @return block info
|
|
29
|
+
*/
|
|
30
|
+
abstract getTxBlock: (txId: string) => Promise<BlockInfo>;
|
|
31
|
+
/**
|
|
32
|
+
* return all related data below the initial height (including the init height)
|
|
33
|
+
* @param initialHeight
|
|
34
|
+
* @return extracted data in batch
|
|
35
|
+
*/
|
|
36
|
+
fetchDataWithOffsetLimit: (initialHeight: number, offset: number, limit: number) => Promise<{
|
|
37
|
+
extractedBoxes: Array<ExtractedData>;
|
|
38
|
+
hasNextBatch: boolean;
|
|
39
|
+
}>;
|
|
40
|
+
/**
|
|
41
|
+
* initialize extractor database with data created below the initial height
|
|
42
|
+
* ignore initialization if this feature is off
|
|
43
|
+
* try to get data multiple times to pass accidental network problems
|
|
44
|
+
* @param initialBlock
|
|
45
|
+
*/
|
|
46
|
+
initializeBoxes: (initialBlock: BlockInfo) => Promise<void>;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=AbstractInitializable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AbstractInitializable.d.ts","sourceRoot":"","sources":["../../../lib/ergo/initializable/AbstractInitializable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAG/D,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,wCAAwC,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,8BAAsB,kCAAkC,CACtD,aAAa,SAAS,iBAAiB,CACvC,SAAQ,qBAAqB,CAAC,aAAa,CAAC;IAC5C,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC;IAC9B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,wCAAwC,CAAC,aAAa,CAAC,CAAC;IAEpF;;;;OAIG;gBACS,UAAU,UAAO,EAAE,MAAM,CAAC,EAAE,cAAc;IAKtD;;;;;OAKG;IACH,QAAQ,CAAC,uBAAuB,EAAE,CAChC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,KACV,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAAC,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAE1D;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IAE1D;;;;OAIG;IACH,wBAAwB,kBACP,MAAM,UACb,MAAM,SACP,MAAM,KACZ,QAAQ;QACT,cAAc,EAAE,MAAM,aAAa,CAAC,CAAC;QACrC,YAAY,EAAE,OAAO,CAAC;KACvB,CAAC,CAoCA;IAEF;;;;;OAKG;IACH,eAAe,iBAAwB,SAAS,mBA+C9C;CACH"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import JsonBigInt from '@rosen-bridge/json-bigint';
|
|
2
|
+
import { API_LIMIT, RETRIAL_COUNT } from '../../constants';
|
|
3
|
+
import { AbstractErgoExtractor } from '../AbstractErgoExtractor';
|
|
4
|
+
export class AbstractInitializableErgoExtractor extends AbstractErgoExtractor {
|
|
5
|
+
initialize;
|
|
6
|
+
/**
|
|
7
|
+
* create an initializable ergo extractor
|
|
8
|
+
* @param initialize ignore the initialization step if its false
|
|
9
|
+
* @param logger
|
|
10
|
+
*/
|
|
11
|
+
constructor(initialize = true, logger) {
|
|
12
|
+
super(logger);
|
|
13
|
+
this.initialize = initialize;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* return all related data below the initial height (including the init height)
|
|
17
|
+
* @param initialHeight
|
|
18
|
+
* @return extracted data in batch
|
|
19
|
+
*/
|
|
20
|
+
fetchDataWithOffsetLimit = async (initialHeight, offset, limit) => {
|
|
21
|
+
const extractedBoxes = [];
|
|
22
|
+
const apiOutput = await this.getBoxesWithOffsetLimit(offset, limit);
|
|
23
|
+
const filteredBoxes = apiOutput.boxes.filter((box) => box.creationHeight <= initialHeight && this.hasData(box));
|
|
24
|
+
for (const box of filteredBoxes) {
|
|
25
|
+
const data = this.extractBoxData(box, box.blockId, box.creationHeight);
|
|
26
|
+
if (!data)
|
|
27
|
+
continue;
|
|
28
|
+
let spendBlock, spendHeight;
|
|
29
|
+
if (box.spentTransactionId) {
|
|
30
|
+
const block = await this.getTxBlock(box.spentTransactionId);
|
|
31
|
+
if (block.height <= initialHeight) {
|
|
32
|
+
this.logger.debug(`Box with id ${box.boxId} spent at block ${JsonBigInt.stringify(block)} bellow the initial height`);
|
|
33
|
+
spendBlock = block.hash;
|
|
34
|
+
spendHeight = block.height;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const extractedData = {
|
|
38
|
+
...data,
|
|
39
|
+
spendBlock,
|
|
40
|
+
spendHeight,
|
|
41
|
+
};
|
|
42
|
+
this.logger.debug(`Extracted data ${JsonBigInt.stringify(extractedData)} from box ${box.boxId} in initialization phase`);
|
|
43
|
+
extractedBoxes.push(extractedData);
|
|
44
|
+
}
|
|
45
|
+
return { extractedBoxes, hasNextBatch: apiOutput.hasNextBatch };
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* initialize extractor database with data created below the initial height
|
|
49
|
+
* ignore initialization if this feature is off
|
|
50
|
+
* try to get data multiple times to pass accidental network problems
|
|
51
|
+
* @param initialBlock
|
|
52
|
+
*/
|
|
53
|
+
initializeBoxes = async (initialBlock) => {
|
|
54
|
+
let trial = 1;
|
|
55
|
+
if (this.initialize) {
|
|
56
|
+
this.logger.debug(`Initializing ${this.getId()} started, removing all existing data`);
|
|
57
|
+
await this.actions.removeAllData(this.getId());
|
|
58
|
+
let hasNextBatch = true;
|
|
59
|
+
let offset = 0;
|
|
60
|
+
while (hasNextBatch) {
|
|
61
|
+
try {
|
|
62
|
+
const data = await this.fetchDataWithOffsetLimit(initialBlock.height, offset, API_LIMIT);
|
|
63
|
+
this.logger.info(`Inserting ${data.extractedBoxes.length} new extracted data in ${this.getId()} initialization`);
|
|
64
|
+
const insertSuccess = await this.actions.insertBoxes(data.extractedBoxes, this.getId());
|
|
65
|
+
if (!insertSuccess)
|
|
66
|
+
throw new Error('Could not store extracted data');
|
|
67
|
+
hasNextBatch = data.hasNextBatch;
|
|
68
|
+
offset += API_LIMIT;
|
|
69
|
+
}
|
|
70
|
+
catch (e) {
|
|
71
|
+
this.logger.warn(`Initialization for ${this.getId()} failed with error :${e}`);
|
|
72
|
+
if (trial == RETRIAL_COUNT)
|
|
73
|
+
throw Error(`Initialization for ${this.getId()} failed after ${RETRIAL_COUNT} retrial`);
|
|
74
|
+
trial += 1;
|
|
75
|
+
this.logger.info(`Trying again to initialize ${this.getId()} with trial step ${trial}`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
this.logger.info(`Initialization for ${this.getId()} is turned off`);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RJbml0aWFsaXphYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2VyZ28vaW5pdGlhbGl6YWJsZS9BYnN0cmFjdEluaXRpYWxpemFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxVQUFVLE1BQU0sMkJBQTJCLENBQUM7QUFHbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUlqRSxNQUFNLE9BQWdCLGtDQUVwQixTQUFRLHFCQUFvQztJQUNsQyxVQUFVLENBQVU7SUFHOUI7Ozs7T0FJRztJQUNILFlBQVksVUFBVSxHQUFHLElBQUksRUFBRSxNQUF1QjtRQUNwRCxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUMvQixDQUFDO0lBb0JEOzs7O09BSUc7SUFDSCx3QkFBd0IsR0FBRyxLQUFLLEVBQzlCLGFBQXFCLEVBQ3JCLE1BQWMsRUFDZCxLQUFhLEVBSVosRUFBRTtRQUNILE1BQU0sY0FBYyxHQUF5QixFQUFFLENBQUM7UUFDaEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXBFLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUMxQyxDQUFDLEdBQVksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLGNBQWMsSUFBSSxhQUFhLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FDM0UsQ0FBQztRQUNGLEtBQUssTUFBTSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLElBQUk7Z0JBQUUsU0FBUztZQUNwQixJQUFJLFVBQVUsRUFBRSxXQUFXLENBQUM7WUFDNUIsSUFBSSxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDM0IsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksYUFBYSxFQUFFLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLGVBQWUsR0FBRyxDQUFDLEtBQUssbUJBQW1CLFVBQVUsQ0FBQyxTQUFTLENBQzdELEtBQUssQ0FDTiw0QkFBNEIsQ0FDOUIsQ0FBQztvQkFDRixVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztvQkFDeEIsV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7Z0JBQzdCLENBQUM7WUFDSCxDQUFDO1lBQ0QsTUFBTSxhQUFhLEdBQUc7Z0JBQ3BCLEdBQUcsSUFBSTtnQkFDUCxVQUFVO2dCQUNWLFdBQVc7YUFDSyxDQUFDO1lBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLGtCQUFrQixVQUFVLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxhQUNuRCxHQUFHLENBQUMsS0FDTiwwQkFBMEIsQ0FDM0IsQ0FBQztZQUNGLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUNELE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNsRSxDQUFDLENBQUM7SUFFRjs7Ozs7T0FLRztJQUNILGVBQWUsR0FBRyxLQUFLLEVBQUUsWUFBdUIsRUFBRSxFQUFFO1FBQ2xELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLGdCQUFnQixJQUFJLENBQUMsS0FBSyxFQUFFLHNDQUFzQyxDQUNuRSxDQUFDO1lBQ0YsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUUvQyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsT0FBTyxZQUFZLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxDQUFDO29CQUNILE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUM5QyxZQUFZLENBQUMsTUFBTSxFQUNuQixNQUFNLEVBQ04sU0FBUyxDQUNWLENBQUM7b0JBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2QsYUFDRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQ3RCLDBCQUEwQixJQUFJLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUN4RCxDQUFDO29CQUNGLE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQ2xELElBQUksQ0FBQyxjQUFjLEVBQ25CLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FDYixDQUFDO29CQUNGLElBQUksQ0FBQyxhQUFhO3dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztvQkFFdEUsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7b0JBQ2pDLE1BQU0sSUFBSSxTQUFTLENBQUM7Z0JBQ3RCLENBQUM7Z0JBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZCxzQkFBc0IsSUFBSSxDQUFDLEtBQUssRUFBRSx1QkFBdUIsQ0FBQyxFQUFFLENBQzdELENBQUM7b0JBQ0YsSUFBSSxLQUFLLElBQUksYUFBYTt3QkFDeEIsTUFBTSxLQUFLLENBQ1Qsc0JBQXNCLElBQUksQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLGFBQWEsVUFBVSxDQUMzRSxDQUFDO29CQUNKLEtBQUssSUFBSSxDQUFDLENBQUM7b0JBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2QsOEJBQThCLElBQUksQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLEtBQUssRUFBRSxDQUN0RSxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7SUFDSCxDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IEpzb25CaWdJbnQgZnJvbSAnQHJvc2VuLWJyaWRnZS9qc29uLWJpZ2ludCc7XG5cbmltcG9ydCB7IEVyZ29Cb3gsIEVyZ29FeHRyYWN0ZWREYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBUElfTElNSVQsIFJFVFJJQUxfQ09VTlQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQWJzdHJhY3RFcmdvRXh0cmFjdG9yIH0gZnJvbSAnLi4vQWJzdHJhY3RFcmdvRXh0cmFjdG9yJztcbmltcG9ydCB7IEFic3RyYWN0SW5pdGlhbGl6YWJsZUVyZ29FeHRyYWN0b3JBY3Rpb24gfSBmcm9tICcuL0Fic3RyYWN0SW5pdGlhbGl6YWJsZUFjdGlvbic7XG5pbXBvcnQgeyBCbG9ja0luZm8gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0SW5pdGlhbGl6YWJsZUVyZ29FeHRyYWN0b3I8XG4gIEV4dHJhY3RlZERhdGEgZXh0ZW5kcyBFcmdvRXh0cmFjdGVkRGF0YVxuPiBleHRlbmRzIEFic3RyYWN0RXJnb0V4dHJhY3RvcjxFeHRyYWN0ZWREYXRhPiB7XG4gIHByb3RlY3RlZCBpbml0aWFsaXplOiBib29sZWFuO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgYWN0aW9uczogQWJzdHJhY3RJbml0aWFsaXphYmxlRXJnb0V4dHJhY3RvckFjdGlvbjxFeHRyYWN0ZWREYXRhPjtcblxuICAvKipcbiAgICogY3JlYXRlIGFuIGluaXRpYWxpemFibGUgZXJnbyBleHRyYWN0b3JcbiAgICogQHBhcmFtIGluaXRpYWxpemUgaWdub3JlIHRoZSBpbml0aWFsaXphdGlvbiBzdGVwIGlmIGl0cyBmYWxzZVxuICAgKiBAcGFyYW0gbG9nZ2VyXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihpbml0aWFsaXplID0gdHJ1ZSwgbG9nZ2VyPzogQWJzdHJhY3RMb2dnZXIpIHtcbiAgICBzdXBlcihsb2dnZXIpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZSA9IGluaXRpYWxpemU7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJuIGluaXQgcmVxdWlyZWQgYm94ZXMgd2l0aCBvZmZzZXQgbGltaXRcbiAgICogQHBhcmFtIG9mZnNldFxuICAgKiBAcGFyYW0gbGltaXRcbiAgICogQHJldHVybiBib3hlcyBpbiBiYXRjaFxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0Qm94ZXNXaXRoT2Zmc2V0TGltaXQ6IChcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICBsaW1pdDogbnVtYmVyXG4gICkgPT4gUHJvbWlzZTx7IGJveGVzOiBFcmdvQm94W107IGhhc05leHRCYXRjaDogYm9vbGVhbiB9PjtcblxuICAvKipcbiAgICogcmV0dXJuIGJsb2NrIGluZm9ybWF0aW9uIG9mIHNwZWNpZmllZCB0eFxuICAgKiBAcGFyYW0gdHhJZFxuICAgKiBAcmV0dXJuIGJsb2NrIGluZm9cbiAgICovXG4gIGFic3RyYWN0IGdldFR4QmxvY2s6ICh0eElkOiBzdHJpbmcpID0+IFByb21pc2U8QmxvY2tJbmZvPjtcblxuICAvKipcbiAgICogcmV0dXJuIGFsbCByZWxhdGVkIGRhdGEgYmVsb3cgdGhlIGluaXRpYWwgaGVpZ2h0IChpbmNsdWRpbmcgdGhlIGluaXQgaGVpZ2h0KVxuICAgKiBAcGFyYW0gaW5pdGlhbEhlaWdodFxuICAgKiBAcmV0dXJuIGV4dHJhY3RlZCBkYXRhIGluIGJhdGNoXG4gICAqL1xuICBmZXRjaERhdGFXaXRoT2Zmc2V0TGltaXQgPSBhc3luYyAoXG4gICAgaW5pdGlhbEhlaWdodDogbnVtYmVyLFxuICAgIG9mZnNldDogbnVtYmVyLFxuICAgIGxpbWl0OiBudW1iZXJcbiAgKTogUHJvbWlzZTx7XG4gICAgZXh0cmFjdGVkQm94ZXM6IEFycmF5PEV4dHJhY3RlZERhdGE+O1xuICAgIGhhc05leHRCYXRjaDogYm9vbGVhbjtcbiAgfT4gPT4ge1xuICAgIGNvbnN0IGV4dHJhY3RlZEJveGVzOiBBcnJheTxFeHRyYWN0ZWREYXRhPiA9IFtdO1xuICAgIGNvbnN0IGFwaU91dHB1dCA9IGF3YWl0IHRoaXMuZ2V0Qm94ZXNXaXRoT2Zmc2V0TGltaXQob2Zmc2V0LCBsaW1pdCk7XG5cbiAgICBjb25zdCBmaWx0ZXJlZEJveGVzID0gYXBpT3V0cHV0LmJveGVzLmZpbHRlcihcbiAgICAgIChib3g6IEVyZ29Cb3gpID0+IGJveC5jcmVhdGlvbkhlaWdodCA8PSBpbml0aWFsSGVpZ2h0ICYmIHRoaXMuaGFzRGF0YShib3gpXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGJveCBvZiBmaWx0ZXJlZEJveGVzKSB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5leHRyYWN0Qm94RGF0YShib3gsIGJveC5ibG9ja0lkLCBib3guY3JlYXRpb25IZWlnaHQpO1xuICAgICAgaWYgKCFkYXRhKSBjb250aW51ZTtcbiAgICAgIGxldCBzcGVuZEJsb2NrLCBzcGVuZEhlaWdodDtcbiAgICAgIGlmIChib3guc3BlbnRUcmFuc2FjdGlvbklkKSB7XG4gICAgICAgIGNvbnN0IGJsb2NrID0gYXdhaXQgdGhpcy5nZXRUeEJsb2NrKGJveC5zcGVudFRyYW5zYWN0aW9uSWQpO1xuICAgICAgICBpZiAoYmxvY2suaGVpZ2h0IDw9IGluaXRpYWxIZWlnaHQpIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAgIGBCb3ggd2l0aCBpZCAke2JveC5ib3hJZH0gc3BlbnQgYXQgYmxvY2sgJHtKc29uQmlnSW50LnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgYmxvY2tcbiAgICAgICAgICAgICl9IGJlbGxvdyB0aGUgaW5pdGlhbCBoZWlnaHRgXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzcGVuZEJsb2NrID0gYmxvY2suaGFzaDtcbiAgICAgICAgICBzcGVuZEhlaWdodCA9IGJsb2NrLmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgZXh0cmFjdGVkRGF0YSA9IHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgc3BlbmRCbG9jayxcbiAgICAgICAgc3BlbmRIZWlnaHQsXG4gICAgICB9IGFzIEV4dHJhY3RlZERhdGE7XG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYEV4dHJhY3RlZCBkYXRhICR7SnNvbkJpZ0ludC5zdHJpbmdpZnkoZXh0cmFjdGVkRGF0YSl9IGZyb20gYm94ICR7XG4gICAgICAgICAgYm94LmJveElkXG4gICAgICAgIH0gaW4gaW5pdGlhbGl6YXRpb24gcGhhc2VgXG4gICAgICApO1xuICAgICAgZXh0cmFjdGVkQm94ZXMucHVzaChleHRyYWN0ZWREYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgZXh0cmFjdGVkQm94ZXMsIGhhc05leHRCYXRjaDogYXBpT3V0cHV0Lmhhc05leHRCYXRjaCB9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBpbml0aWFsaXplIGV4dHJhY3RvciBkYXRhYmFzZSB3aXRoIGRhdGEgY3JlYXRlZCBiZWxvdyB0aGUgaW5pdGlhbCBoZWlnaHRcbiAgICogaWdub3JlIGluaXRpYWxpemF0aW9uIGlmIHRoaXMgZmVhdHVyZSBpcyBvZmZcbiAgICogdHJ5IHRvIGdldCBkYXRhIG11bHRpcGxlIHRpbWVzIHRvIHBhc3MgYWNjaWRlbnRhbCBuZXR3b3JrIHByb2JsZW1zXG4gICAqIEBwYXJhbSBpbml0aWFsQmxvY2tcbiAgICovXG4gIGluaXRpYWxpemVCb3hlcyA9IGFzeW5jIChpbml0aWFsQmxvY2s6IEJsb2NrSW5mbykgPT4ge1xuICAgIGxldCB0cmlhbCA9IDE7XG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZSkge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgIGBJbml0aWFsaXppbmcgJHt0aGlzLmdldElkKCl9IHN0YXJ0ZWQsIHJlbW92aW5nIGFsbCBleGlzdGluZyBkYXRhYFxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMuYWN0aW9ucy5yZW1vdmVBbGxEYXRhKHRoaXMuZ2V0SWQoKSk7XG5cbiAgICAgIGxldCBoYXNOZXh0QmF0Y2ggPSB0cnVlO1xuICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICB3aGlsZSAoaGFzTmV4dEJhdGNoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZmV0Y2hEYXRhV2l0aE9mZnNldExpbWl0KFxuICAgICAgICAgICAgaW5pdGlhbEJsb2NrLmhlaWdodCxcbiAgICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICAgIEFQSV9MSU1JVFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIGBJbnNlcnRpbmcgJHtcbiAgICAgICAgICAgICAgZGF0YS5leHRyYWN0ZWRCb3hlcy5sZW5ndGhcbiAgICAgICAgICAgIH0gbmV3IGV4dHJhY3RlZCBkYXRhIGluICR7dGhpcy5nZXRJZCgpfSBpbml0aWFsaXphdGlvbmBcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGluc2VydFN1Y2Nlc3MgPSBhd2FpdCB0aGlzLmFjdGlvbnMuaW5zZXJ0Qm94ZXMoXG4gICAgICAgICAgICBkYXRhLmV4dHJhY3RlZEJveGVzLFxuICAgICAgICAgICAgdGhpcy5nZXRJZCgpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIWluc2VydFN1Y2Nlc3MpIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IHN0b3JlIGV4dHJhY3RlZCBkYXRhJyk7XG5cbiAgICAgICAgICBoYXNOZXh0QmF0Y2ggPSBkYXRhLmhhc05leHRCYXRjaDtcbiAgICAgICAgICBvZmZzZXQgKz0gQVBJX0xJTUlUO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcbiAgICAgICAgICAgIGBJbml0aWFsaXphdGlvbiBmb3IgJHt0aGlzLmdldElkKCl9IGZhaWxlZCB3aXRoIGVycm9yIDoke2V9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHRyaWFsID09IFJFVFJJQUxfQ09VTlQpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICAgICAgYEluaXRpYWxpemF0aW9uIGZvciAke3RoaXMuZ2V0SWQoKX0gZmFpbGVkIGFmdGVyICR7UkVUUklBTF9DT1VOVH0gcmV0cmlhbGBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgdHJpYWwgKz0gMTtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgYFRyeWluZyBhZ2FpbiB0byBpbml0aWFsaXplICR7dGhpcy5nZXRJZCgpfSB3aXRoIHRyaWFsIHN0ZXAgJHt0cmlhbH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZ2dlci5pbmZvKGBJbml0aWFsaXphdGlvbiBmb3IgJHt0aGlzLmdldElkKCl9IGlzIHR1cm5lZCBvZmZgKTtcbiAgICB9XG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AbstractErgoExtractorAction } from '../AbstractErgoExtractorAction';
|
|
2
|
+
export declare abstract class AbstractInitializableErgoExtractorAction<ExtractedData> extends AbstractErgoExtractorAction<ExtractedData> {
|
|
3
|
+
/**
|
|
4
|
+
* remove all existing data for the extractor
|
|
5
|
+
* @param extractorId
|
|
6
|
+
*/
|
|
7
|
+
abstract removeAllData: (extractorId: string) => Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=AbstractInitializableAction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AbstractInitializableAction.d.ts","sourceRoot":"","sources":["../../../lib/ergo/initializable/AbstractInitializableAction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAE7E,8BAAsB,wCAAwC,CAC5D,aAAa,CACb,SAAQ,2BAA2B,CAAC,aAAa,CAAC;IAClD;;;OAGG;IACH,QAAQ,CAAC,aAAa,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChE"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { AbstractErgoExtractorAction } from '../AbstractErgoExtractorAction';
|
|
2
|
+
export class AbstractInitializableErgoExtractorAction extends AbstractErgoExtractorAction {
|
|
3
|
+
}
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RJbml0aWFsaXphYmxlQWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2VyZ28vaW5pdGlhbGl6YWJsZS9BYnN0cmFjdEluaXRpYWxpemFibGVBY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFN0UsTUFBTSxPQUFnQix3Q0FFcEIsU0FBUSwyQkFBMEM7Q0FNbkQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdEVyZ29FeHRyYWN0b3JBY3Rpb24gfSBmcm9tICcuLi9BYnN0cmFjdEVyZ29FeHRyYWN0b3JBY3Rpb24nO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RJbml0aWFsaXphYmxlRXJnb0V4dHJhY3RvckFjdGlvbjxcbiAgRXh0cmFjdGVkRGF0YVxuPiBleHRlbmRzIEFic3RyYWN0RXJnb0V4dHJhY3RvckFjdGlvbjxFeHRyYWN0ZWREYXRhPiB7XG4gIC8qKlxuICAgKiByZW1vdmUgYWxsIGV4aXN0aW5nIGRhdGEgZm9yIHRoZSBleHRyYWN0b3JcbiAgICogQHBhcmFtIGV4dHJhY3RvcklkXG4gICAqL1xuICBhYnN0cmFjdCByZW1vdmVBbGxEYXRhOiAoZXh0cmFjdG9ySWQ6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
2
|
+
import { ErgoExtractedData, ErgoNetworkType, ErgoBox } from '../interfaces';
|
|
3
|
+
import { AbstractInitializableErgoExtractor } from './AbstractInitializable';
|
|
4
|
+
import { BlockInfo } from '../../interfaces';
|
|
5
|
+
export declare abstract class AbstractInitializableByAddressErgoExtractor<ExtractedData extends ErgoExtractedData> extends AbstractInitializableErgoExtractor<ExtractedData> {
|
|
6
|
+
private address;
|
|
7
|
+
private network;
|
|
8
|
+
constructor(type: ErgoNetworkType, url: string, address: string, initialize?: boolean, logger?: AbstractLogger);
|
|
9
|
+
/**
|
|
10
|
+
* return boxes by token id from the specified network source
|
|
11
|
+
* @param offset
|
|
12
|
+
* @param limit
|
|
13
|
+
* @return boxes in batch
|
|
14
|
+
*/
|
|
15
|
+
getBoxesWithOffsetLimit: (offset: number, limit: number) => Promise<{
|
|
16
|
+
boxes: ErgoBox[];
|
|
17
|
+
hasNextBatch: boolean;
|
|
18
|
+
}>;
|
|
19
|
+
/**
|
|
20
|
+
* return block information from the specified network source
|
|
21
|
+
* @param txId
|
|
22
|
+
* @return block info
|
|
23
|
+
*/
|
|
24
|
+
getTxBlock: (txId: string) => Promise<BlockInfo>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=InitializableByAddress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InitializableByAddress.d.ts","sourceRoot":"","sources":["../../../lib/ergo/initializable/InitializableByAddress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,kCAAkC,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAK7C,8BAAsB,2CAA2C,CAC/D,aAAa,SAAS,iBAAiB,CACvC,SAAQ,kCAAkC,CAAC,aAAa,CAAC;IACzD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAkB;gBAG/B,IAAI,EAAE,eAAe,EACrB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,OAAO,EACpB,MAAM,CAAC,EAAE,cAAc;IAWzB;;;;;OAKG;IACH,uBAAuB,WACb,MAAM,SACP,MAAM,KACZ,QAAQ;QAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAAC,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC,CAErD;IAEF;;;;OAIG;IACH,UAAU,SAAU,MAAM,KAAG,QAAQ,SAAS,CAAC,CAE7C;CACH"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { ErgoNetworkType } from '../interfaces';
|
|
2
|
+
import { AbstractInitializableErgoExtractor } from './AbstractInitializable';
|
|
3
|
+
import { ExplorerNetwork } from '../network/ExplorerNetwork';
|
|
4
|
+
import { NodeNetwork } from '../network/NodeNetwork';
|
|
5
|
+
export class AbstractInitializableByAddressErgoExtractor extends AbstractInitializableErgoExtractor {
|
|
6
|
+
address;
|
|
7
|
+
network;
|
|
8
|
+
constructor(type, url, address, initialize, logger) {
|
|
9
|
+
super(initialize, logger);
|
|
10
|
+
this.address = address;
|
|
11
|
+
if (type == ErgoNetworkType.Explorer) {
|
|
12
|
+
this.network = new ExplorerNetwork(url);
|
|
13
|
+
}
|
|
14
|
+
else if (type == ErgoNetworkType.Node) {
|
|
15
|
+
this.network = new NodeNetwork(url);
|
|
16
|
+
}
|
|
17
|
+
else
|
|
18
|
+
throw new Error(`Network type ${type} is not supported`);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* return boxes by token id from the specified network source
|
|
22
|
+
* @param offset
|
|
23
|
+
* @param limit
|
|
24
|
+
* @return boxes in batch
|
|
25
|
+
*/
|
|
26
|
+
getBoxesWithOffsetLimit = (offset, limit) => {
|
|
27
|
+
return this.network.getBoxesByAddress(this.address, offset, limit);
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* return block information from the specified network source
|
|
31
|
+
* @param txId
|
|
32
|
+
* @return block info
|
|
33
|
+
*/
|
|
34
|
+
getTxBlock = (txId) => {
|
|
35
|
+
return this.network.getTxBlock(txId);
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5pdGlhbGl6YWJsZUJ5QWRkcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9lcmdvL2luaXRpYWxpemFibGUvSW5pdGlhbGl6YWJsZUJ5QWRkcmVzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQXFCLGVBQWUsRUFBVyxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU3RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR3JELE1BQU0sT0FBZ0IsMkNBRXBCLFNBQVEsa0NBQWlEO0lBQ2pELE9BQU8sQ0FBUztJQUNoQixPQUFPLENBQWtCO0lBRWpDLFlBQ0UsSUFBcUIsRUFDckIsR0FBVyxFQUNYLE9BQWUsRUFDZixVQUFvQixFQUNwQixNQUF1QjtRQUV2QixLQUFLLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksSUFBSSxJQUFJLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLENBQUM7YUFBTSxJQUFJLElBQUksSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxDQUFDOztZQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLElBQUksbUJBQW1CLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx1QkFBdUIsR0FBRyxDQUN4QixNQUFjLEVBQ2QsS0FBYSxFQUN5QyxFQUFFO1FBQ3hELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNyRSxDQUFDLENBQUM7SUFFRjs7OztPQUlHO0lBQ0gsVUFBVSxHQUFHLENBQUMsSUFBWSxFQUFzQixFQUFFO1FBQ2hELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdExvZ2dlciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtbG9nZ2VyJztcblxuaW1wb3J0IHsgRXJnb0V4dHJhY3RlZERhdGEsIEVyZ29OZXR3b3JrVHlwZSwgRXJnb0JveCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RJbml0aWFsaXphYmxlRXJnb0V4dHJhY3RvciB9IGZyb20gJy4vQWJzdHJhY3RJbml0aWFsaXphYmxlJztcbmltcG9ydCB7IEJsb2NrSW5mbyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRXhwbG9yZXJOZXR3b3JrIH0gZnJvbSAnLi4vbmV0d29yay9FeHBsb3Jlck5ldHdvcmsnO1xuaW1wb3J0IHsgTm9kZU5ldHdvcmsgfSBmcm9tICcuLi9uZXR3b3JrL05vZGVOZXR3b3JrJztcbmltcG9ydCB7IEFic3RyYWN0TmV0d29yayB9IGZyb20gJy4uL25ldHdvcmsvQWJzdHJhY3ROZXR3b3JrJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0SW5pdGlhbGl6YWJsZUJ5QWRkcmVzc0VyZ29FeHRyYWN0b3I8XG4gIEV4dHJhY3RlZERhdGEgZXh0ZW5kcyBFcmdvRXh0cmFjdGVkRGF0YVxuPiBleHRlbmRzIEFic3RyYWN0SW5pdGlhbGl6YWJsZUVyZ29FeHRyYWN0b3I8RXh0cmFjdGVkRGF0YT4ge1xuICBwcml2YXRlIGFkZHJlc3M6IHN0cmluZztcbiAgcHJpdmF0ZSBuZXR3b3JrOiBBYnN0cmFjdE5ldHdvcms7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdHlwZTogRXJnb05ldHdvcmtUeXBlLFxuICAgIHVybDogc3RyaW5nLFxuICAgIGFkZHJlc3M6IHN0cmluZyxcbiAgICBpbml0aWFsaXplPzogYm9vbGVhbixcbiAgICBsb2dnZXI/OiBBYnN0cmFjdExvZ2dlclxuICApIHtcbiAgICBzdXBlcihpbml0aWFsaXplLCBsb2dnZXIpO1xuICAgIHRoaXMuYWRkcmVzcyA9IGFkZHJlc3M7XG4gICAgaWYgKHR5cGUgPT0gRXJnb05ldHdvcmtUeXBlLkV4cGxvcmVyKSB7XG4gICAgICB0aGlzLm5ldHdvcmsgPSBuZXcgRXhwbG9yZXJOZXR3b3JrKHVybCk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09IEVyZ29OZXR3b3JrVHlwZS5Ob2RlKSB7XG4gICAgICB0aGlzLm5ldHdvcmsgPSBuZXcgTm9kZU5ldHdvcmsodXJsKTtcbiAgICB9IGVsc2UgdGhyb3cgbmV3IEVycm9yKGBOZXR3b3JrIHR5cGUgJHt0eXBlfSBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJuIGJveGVzIGJ5IHRva2VuIGlkIGZyb20gdGhlIHNwZWNpZmllZCBuZXR3b3JrIHNvdXJjZVxuICAgKiBAcGFyYW0gb2Zmc2V0XG4gICAqIEBwYXJhbSBsaW1pdFxuICAgKiBAcmV0dXJuIGJveGVzIGluIGJhdGNoXG4gICAqL1xuICBnZXRCb3hlc1dpdGhPZmZzZXRMaW1pdCA9IChcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICBsaW1pdDogbnVtYmVyXG4gICk6IFByb21pc2U8eyBib3hlczogRXJnb0JveFtdOyBoYXNOZXh0QmF0Y2g6IGJvb2xlYW4gfT4gPT4ge1xuICAgIHJldHVybiB0aGlzLm5ldHdvcmsuZ2V0Qm94ZXNCeUFkZHJlc3ModGhpcy5hZGRyZXNzLCBvZmZzZXQsIGxpbWl0KTtcbiAgfTtcblxuICAvKipcbiAgICogcmV0dXJuIGJsb2NrIGluZm9ybWF0aW9uIGZyb20gdGhlIHNwZWNpZmllZCBuZXR3b3JrIHNvdXJjZVxuICAgKiBAcGFyYW0gdHhJZFxuICAgKiBAcmV0dXJuIGJsb2NrIGluZm9cbiAgICovXG4gIGdldFR4QmxvY2sgPSAodHhJZDogc3RyaW5nKTogUHJvbWlzZTxCbG9ja0luZm8+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5uZXR3b3JrLmdldFR4QmxvY2sodHhJZCk7XG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
2
|
+
import { ErgoExtractedData, ErgoNetworkType, ErgoBox } from '../interfaces';
|
|
3
|
+
import { AbstractInitializableErgoExtractor } from './AbstractInitializable';
|
|
4
|
+
import { BlockInfo } from '../../interfaces';
|
|
5
|
+
export declare abstract class AbstractInitializableByTokenErgoExtractor<ExtractedData extends ErgoExtractedData> extends AbstractInitializableErgoExtractor<ExtractedData> {
|
|
6
|
+
private tokenId;
|
|
7
|
+
private network;
|
|
8
|
+
constructor(type: ErgoNetworkType, url: string, tokenId: string, initialize?: boolean, logger?: AbstractLogger);
|
|
9
|
+
/**
|
|
10
|
+
* return boxes by token id from the specified network source
|
|
11
|
+
* @param offset
|
|
12
|
+
* @param limit
|
|
13
|
+
* @return boxes in batch
|
|
14
|
+
*/
|
|
15
|
+
getBoxesWithOffsetLimit: (offset: number, limit: number) => Promise<{
|
|
16
|
+
boxes: ErgoBox[];
|
|
17
|
+
hasNextBatch: boolean;
|
|
18
|
+
}>;
|
|
19
|
+
/**
|
|
20
|
+
* return block information from the specified network source
|
|
21
|
+
* @param txId
|
|
22
|
+
* @return block info
|
|
23
|
+
*/
|
|
24
|
+
getTxBlock: (txId: string) => Promise<BlockInfo>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=InitializableByToken.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InitializableByToken.d.ts","sourceRoot":"","sources":["../../../lib/ergo/initializable/InitializableByToken.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,kCAAkC,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAK7C,8BAAsB,yCAAyC,CAC7D,aAAa,SAAS,iBAAiB,CACvC,SAAQ,kCAAkC,CAAC,aAAa,CAAC;IACzD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAkB;gBAG/B,IAAI,EAAE,eAAe,EACrB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,OAAO,EACpB,MAAM,CAAC,EAAE,cAAc;IAWzB;;;;;OAKG;IACH,uBAAuB,WACb,MAAM,SACP,MAAM,KACZ,QAAQ;QAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAAC,YAAY,EAAE,OAAO,CAAA;KAAE,CAAC,CAErD;IAEF;;;;OAIG;IACH,UAAU,SAAU,MAAM,KAAG,QAAQ,SAAS,CAAC,CAE7C;CACH"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { ErgoNetworkType } from '../interfaces';
|
|
2
|
+
import { AbstractInitializableErgoExtractor } from './AbstractInitializable';
|
|
3
|
+
import { ExplorerNetwork } from '../network/ExplorerNetwork';
|
|
4
|
+
import { NodeNetwork } from '../network/NodeNetwork';
|
|
5
|
+
export class AbstractInitializableByTokenErgoExtractor extends AbstractInitializableErgoExtractor {
|
|
6
|
+
tokenId;
|
|
7
|
+
network;
|
|
8
|
+
constructor(type, url, tokenId, initialize, logger) {
|
|
9
|
+
super(initialize, logger);
|
|
10
|
+
this.tokenId = tokenId;
|
|
11
|
+
if (type == ErgoNetworkType.Explorer) {
|
|
12
|
+
this.network = new ExplorerNetwork(url);
|
|
13
|
+
}
|
|
14
|
+
else if (type == ErgoNetworkType.Node) {
|
|
15
|
+
this.network = new NodeNetwork(url);
|
|
16
|
+
}
|
|
17
|
+
else
|
|
18
|
+
throw new Error(`Network type ${type} is not supported`);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* return boxes by token id from the specified network source
|
|
22
|
+
* @param offset
|
|
23
|
+
* @param limit
|
|
24
|
+
* @return boxes in batch
|
|
25
|
+
*/
|
|
26
|
+
getBoxesWithOffsetLimit = (offset, limit) => {
|
|
27
|
+
return this.network.getBoxesByTokenId(this.tokenId, offset, limit);
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* return block information from the specified network source
|
|
31
|
+
* @param txId
|
|
32
|
+
* @return block info
|
|
33
|
+
*/
|
|
34
|
+
getTxBlock = (txId) => {
|
|
35
|
+
return this.network.getTxBlock(txId);
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5pdGlhbGl6YWJsZUJ5VG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZXJnby9pbml0aWFsaXphYmxlL0luaXRpYWxpemFibGVCeVRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBcUIsZUFBZSxFQUFXLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHckQsTUFBTSxPQUFnQix5Q0FFcEIsU0FBUSxrQ0FBaUQ7SUFDakQsT0FBTyxDQUFTO0lBQ2hCLE9BQU8sQ0FBa0I7SUFFakMsWUFDRSxJQUFxQixFQUNyQixHQUFXLEVBQ1gsT0FBZSxFQUNmLFVBQW9CLEVBQ3BCLE1BQXVCO1FBRXZCLEtBQUssQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxJQUFJLElBQUksZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsQ0FBQzthQUFNLElBQUksSUFBSSxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7O1lBQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHVCQUF1QixHQUFHLENBQ3hCLE1BQWMsRUFDZCxLQUFhLEVBQ3lDLEVBQUU7UUFDeEQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JFLENBQUMsQ0FBQztJQUVGOzs7O09BSUc7SUFDSCxVQUFVLEdBQUcsQ0FBQyxJQUFZLEVBQXNCLEVBQUU7UUFDaEQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuXG5pbXBvcnQgeyBFcmdvRXh0cmFjdGVkRGF0YSwgRXJnb05ldHdvcmtUeXBlLCBFcmdvQm94IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBYnN0cmFjdEluaXRpYWxpemFibGVFcmdvRXh0cmFjdG9yIH0gZnJvbSAnLi9BYnN0cmFjdEluaXRpYWxpemFibGUnO1xuaW1wb3J0IHsgQmxvY2tJbmZvIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFeHBsb3Jlck5ldHdvcmsgfSBmcm9tICcuLi9uZXR3b3JrL0V4cGxvcmVyTmV0d29yayc7XG5pbXBvcnQgeyBOb2RlTmV0d29yayB9IGZyb20gJy4uL25ldHdvcmsvTm9kZU5ldHdvcmsnO1xuaW1wb3J0IHsgQWJzdHJhY3ROZXR3b3JrIH0gZnJvbSAnLi4vbmV0d29yay9BYnN0cmFjdE5ldHdvcmsnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RJbml0aWFsaXphYmxlQnlUb2tlbkVyZ29FeHRyYWN0b3I8XG4gIEV4dHJhY3RlZERhdGEgZXh0ZW5kcyBFcmdvRXh0cmFjdGVkRGF0YVxuPiBleHRlbmRzIEFic3RyYWN0SW5pdGlhbGl6YWJsZUVyZ29FeHRyYWN0b3I8RXh0cmFjdGVkRGF0YT4ge1xuICBwcml2YXRlIHRva2VuSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBuZXR3b3JrOiBBYnN0cmFjdE5ldHdvcms7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgdHlwZTogRXJnb05ldHdvcmtUeXBlLFxuICAgIHVybDogc3RyaW5nLFxuICAgIHRva2VuSWQ6IHN0cmluZyxcbiAgICBpbml0aWFsaXplPzogYm9vbGVhbixcbiAgICBsb2dnZXI/OiBBYnN0cmFjdExvZ2dlclxuICApIHtcbiAgICBzdXBlcihpbml0aWFsaXplLCBsb2dnZXIpO1xuICAgIHRoaXMudG9rZW5JZCA9IHRva2VuSWQ7XG4gICAgaWYgKHR5cGUgPT0gRXJnb05ldHdvcmtUeXBlLkV4cGxvcmVyKSB7XG4gICAgICB0aGlzLm5ldHdvcmsgPSBuZXcgRXhwbG9yZXJOZXR3b3JrKHVybCk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09IEVyZ29OZXR3b3JrVHlwZS5Ob2RlKSB7XG4gICAgICB0aGlzLm5ldHdvcmsgPSBuZXcgTm9kZU5ldHdvcmsodXJsKTtcbiAgICB9IGVsc2UgdGhyb3cgbmV3IEVycm9yKGBOZXR3b3JrIHR5cGUgJHt0eXBlfSBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJuIGJveGVzIGJ5IHRva2VuIGlkIGZyb20gdGhlIHNwZWNpZmllZCBuZXR3b3JrIHNvdXJjZVxuICAgKiBAcGFyYW0gb2Zmc2V0XG4gICAqIEBwYXJhbSBsaW1pdFxuICAgKiBAcmV0dXJuIGJveGVzIGluIGJhdGNoXG4gICAqL1xuICBnZXRCb3hlc1dpdGhPZmZzZXRMaW1pdCA9IChcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICBsaW1pdDogbnVtYmVyXG4gICk6IFByb21pc2U8eyBib3hlczogRXJnb0JveFtdOyBoYXNOZXh0QmF0Y2g6IGJvb2xlYW4gfT4gPT4ge1xuICAgIHJldHVybiB0aGlzLm5ldHdvcmsuZ2V0Qm94ZXNCeVRva2VuSWQodGhpcy50b2tlbklkLCBvZmZzZXQsIGxpbWl0KTtcbiAgfTtcblxuICAvKipcbiAgICogcmV0dXJuIGJsb2NrIGluZm9ybWF0aW9uIGZyb20gdGhlIHNwZWNpZmllZCBuZXR3b3JrIHNvdXJjZVxuICAgKiBAcGFyYW0gdHhJZFxuICAgKiBAcmV0dXJuIGJsb2NrIGluZm9cbiAgICovXG4gIGdldFR4QmxvY2sgPSAodHhJZDogc3RyaW5nKTogUHJvbWlzZTxCbG9ja0luZm8+ID0+IHtcbiAgICByZXR1cm4gdGhpcy5uZXR3b3JrLmdldFR4QmxvY2sodHhJZCk7XG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/ergo/initializable/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './AbstractInitializable';
|
|
2
|
+
export * from './AbstractInitializableAction';
|
|
3
|
+
export * from './InitializableByAddress';
|
|
4
|
+
export * from './InitializableByToken';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZXJnby9pbml0aWFsaXphYmxlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL0Fic3RyYWN0SW5pdGlhbGl6YWJsZSc7XG5leHBvcnQgKiBmcm9tICcuL0Fic3RyYWN0SW5pdGlhbGl6YWJsZUFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL0luaXRpYWxpemFibGVCeUFkZHJlc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9Jbml0aWFsaXphYmxlQnlUb2tlbic7XG4iXX0=
|