@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.
Files changed (81) hide show
  1. package/.eslintignore +1 -0
  2. package/README.md +24 -0
  3. package/dist/AbstractExtractor.d.ts +25 -0
  4. package/dist/AbstractExtractor.d.ts.map +1 -0
  5. package/dist/AbstractExtractor.js +3 -0
  6. package/dist/constants.d.ts +4 -0
  7. package/dist/constants.d.ts.map +1 -0
  8. package/dist/constants.js +4 -0
  9. package/dist/ergo/AbstractErgoExtractor.d.ts +39 -0
  10. package/dist/ergo/AbstractErgoExtractor.d.ts.map +1 -0
  11. package/dist/ergo/AbstractErgoExtractor.js +57 -0
  12. package/dist/ergo/AbstractErgoExtractorAction.d.ts +27 -0
  13. package/dist/ergo/AbstractErgoExtractorAction.d.ts.map +1 -0
  14. package/dist/ergo/AbstractErgoExtractorAction.js +3 -0
  15. package/dist/ergo/index.d.ts +8 -0
  16. package/dist/ergo/index.d.ts.map +1 -0
  17. package/dist/ergo/index.js +8 -0
  18. package/dist/ergo/initializable/AbstractInitializable.d.ts +48 -0
  19. package/dist/ergo/initializable/AbstractInitializable.d.ts.map +1 -0
  20. package/dist/ergo/initializable/AbstractInitializable.js +84 -0
  21. package/dist/ergo/initializable/AbstractInitializableAction.d.ts +9 -0
  22. package/dist/ergo/initializable/AbstractInitializableAction.d.ts.map +1 -0
  23. package/dist/ergo/initializable/AbstractInitializableAction.js +4 -0
  24. package/dist/ergo/initializable/InitializableByAddress.d.ts +26 -0
  25. package/dist/ergo/initializable/InitializableByAddress.d.ts.map +1 -0
  26. package/dist/ergo/initializable/InitializableByAddress.js +38 -0
  27. package/dist/ergo/initializable/InitializableByToken.d.ts +26 -0
  28. package/dist/ergo/initializable/InitializableByToken.d.ts.map +1 -0
  29. package/dist/ergo/initializable/InitializableByToken.js +38 -0
  30. package/dist/ergo/initializable/index.d.ts +5 -0
  31. package/dist/ergo/initializable/index.d.ts.map +1 -0
  32. package/dist/ergo/initializable/index.js +5 -0
  33. package/dist/ergo/interfaces.d.ts +56 -0
  34. package/dist/ergo/interfaces.d.ts.map +1 -0
  35. package/dist/ergo/interfaces.js +6 -0
  36. package/dist/ergo/network/AbstractNetwork.d.ts +32 -0
  37. package/dist/ergo/network/AbstractNetwork.d.ts.map +1 -0
  38. package/dist/ergo/network/AbstractNetwork.js +3 -0
  39. package/dist/ergo/network/ExplorerNetwork.d.ts +35 -0
  40. package/dist/ergo/network/ExplorerNetwork.d.ts.map +1 -0
  41. package/dist/ergo/network/ExplorerNetwork.js +53 -0
  42. package/dist/ergo/network/NodeNetwork.d.ts +42 -0
  43. package/dist/ergo/network/NodeNetwork.d.ts.map +1 -0
  44. package/dist/ergo/network/NodeNetwork.js +71 -0
  45. package/dist/ergo/utils.d.ts +8 -0
  46. package/dist/ergo/utils.d.ts.map +1 -0
  47. package/dist/ergo/utils.js +16 -0
  48. package/dist/index.d.ts +4 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +4 -0
  51. package/dist/interfaces.d.ts +12 -0
  52. package/dist/interfaces.d.ts.map +1 -0
  53. package/dist/interfaces.js +2 -0
  54. package/lib/AbstractExtractor.ts +31 -0
  55. package/lib/constants.ts +3 -0
  56. package/lib/ergo/AbstractErgoExtractor.ts +107 -0
  57. package/lib/ergo/AbstractErgoExtractorAction.ts +39 -0
  58. package/lib/ergo/index.ts +7 -0
  59. package/lib/ergo/initializable/AbstractInitializable.ts +148 -0
  60. package/lib/ergo/initializable/AbstractInitializableAction.ts +11 -0
  61. package/lib/ergo/initializable/InitializableByAddress.ts +53 -0
  62. package/lib/ergo/initializable/InitializableByToken.ts +53 -0
  63. package/lib/ergo/initializable/index.ts +4 -0
  64. package/lib/ergo/interfaces.ts +64 -0
  65. package/lib/ergo/network/AbstractNetwork.ts +35 -0
  66. package/lib/ergo/network/ExplorerNetwork.ts +68 -0
  67. package/lib/ergo/network/NodeNetwork.ts +93 -0
  68. package/lib/ergo/utils.ts +15 -0
  69. package/lib/index.ts +3 -0
  70. package/lib/interfaces.ts +12 -0
  71. package/package.json +42 -0
  72. package/tests/AbstractExtractor.mock.ts +26 -0
  73. package/tests/AbstractExtractor.spec.ts +106 -0
  74. package/tests/initializable/AbstractInitializable.mock.ts +31 -0
  75. package/tests/initializable/AbstractInitializable.spec.ts +258 -0
  76. package/tests/initializable/testData.ts +59 -0
  77. package/tests/testData.ts +111 -0
  78. package/tsconfig.build.json +7 -0
  79. package/tsconfig.build.tsbuildinfo +1 -0
  80. package/tsconfig.json +7 -0
  81. 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,4 @@
1
+ export declare const API_LIMIT = 100;
2
+ export declare const RETRIAL_COUNT = 10;
3
+ export declare const DB_CHUNK_SIZE = 100;
4
+ //# sourceMappingURL=constants.d.ts.map
@@ -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,5 @@
1
+ export * from './AbstractInitializable';
2
+ export * from './AbstractInitializableAction';
3
+ export * from './InitializableByAddress';
4
+ export * from './InitializableByToken';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -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=