@rosen-bridge/abstract-extractor 2.1.0 → 2.1.1

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 (127) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/package.json +14 -7
  3. package/.eslintignore +0 -1
  4. package/dist/lib/abstractExtractor.d.ts +0 -25
  5. package/dist/lib/abstractExtractor.d.ts.map +0 -1
  6. package/dist/lib/abstractExtractor.js +0 -3
  7. package/dist/lib/constants.d.ts +0 -4
  8. package/dist/lib/constants.d.ts.map +0 -1
  9. package/dist/lib/constants.js +0 -4
  10. package/dist/lib/ergo/AbstractErgoExtractor.d.ts +0 -80
  11. package/dist/lib/ergo/AbstractErgoExtractor.d.ts.map +0 -1
  12. package/dist/lib/ergo/AbstractErgoExtractor.js +0 -142
  13. package/dist/lib/ergo/AbstractErgoExtractorAction.d.ts +0 -92
  14. package/dist/lib/ergo/AbstractErgoExtractorAction.d.ts.map +0 -1
  15. package/dist/lib/ergo/AbstractErgoExtractorAction.js +0 -222
  16. package/dist/lib/ergo/AbstractErgoExtractorEntity.d.ts +0 -11
  17. package/dist/lib/ergo/AbstractErgoExtractorEntity.d.ts.map +0 -1
  18. package/dist/lib/ergo/AbstractErgoExtractorEntity.js +0 -57
  19. package/dist/lib/ergo/index.d.ts +0 -10
  20. package/dist/lib/ergo/index.d.ts.map +0 -1
  21. package/dist/lib/ergo/index.js +0 -10
  22. package/dist/lib/ergo/initializable/AbstractInitializable.d.ts +0 -48
  23. package/dist/lib/ergo/initializable/AbstractInitializable.d.ts.map +0 -1
  24. package/dist/lib/ergo/initializable/AbstractInitializable.js +0 -163
  25. package/dist/lib/ergo/initializable/AbstractInitializableAction.d.ts +0 -14
  26. package/dist/lib/ergo/initializable/AbstractInitializableAction.d.ts.map +0 -1
  27. package/dist/lib/ergo/initializable/AbstractInitializableAction.js +0 -16
  28. package/dist/lib/ergo/initializable/index.d.ts +0 -3
  29. package/dist/lib/ergo/initializable/index.d.ts.map +0 -1
  30. package/dist/lib/ergo/initializable/index.js +0 -3
  31. package/dist/lib/ergo/interfaces.d.ts +0 -47
  32. package/dist/lib/ergo/interfaces.d.ts.map +0 -1
  33. package/dist/lib/ergo/interfaces.js +0 -8
  34. package/dist/lib/ergo/network/AbstractNetwork.d.ts +0 -26
  35. package/dist/lib/ergo/network/AbstractNetwork.d.ts.map +0 -1
  36. package/dist/lib/ergo/network/AbstractNetwork.js +0 -3
  37. package/dist/lib/ergo/network/ExplorerNetwork.d.ts +0 -74
  38. package/dist/lib/ergo/network/ExplorerNetwork.d.ts.map +0 -1
  39. package/dist/lib/ergo/network/ExplorerNetwork.js +0 -185
  40. package/dist/lib/ergo/network/NodeNetwork.d.ts +0 -60
  41. package/dist/lib/ergo/network/NodeNetwork.d.ts.map +0 -1
  42. package/dist/lib/ergo/network/NodeNetwork.js +0 -131
  43. package/dist/lib/ergo/utils.d.ts +0 -8
  44. package/dist/lib/ergo/utils.d.ts.map +0 -1
  45. package/dist/lib/ergo/utils.js +0 -16
  46. package/dist/lib/index.d.ts +0 -4
  47. package/dist/lib/index.d.ts.map +0 -1
  48. package/dist/lib/index.js +0 -4
  49. package/dist/tests/AbstractErgoExtractor.mock.d.ts +0 -11
  50. package/dist/tests/AbstractErgoExtractor.mock.d.ts.map +0 -1
  51. package/dist/tests/AbstractErgoExtractor.mock.js +0 -11
  52. package/dist/tests/AbstractErgoExtractor.spec.d.ts +0 -2
  53. package/dist/tests/AbstractErgoExtractor.spec.d.ts.map +0 -1
  54. package/dist/tests/AbstractErgoExtractor.spec.js +0 -240
  55. package/dist/tests/AbstractErgoExtractorAction.mock.d.ts +0 -15
  56. package/dist/tests/AbstractErgoExtractorAction.mock.d.ts.map +0 -1
  57. package/dist/tests/AbstractErgoExtractorAction.mock.js +0 -27
  58. package/dist/tests/AbstractErgoExtractorAction.spec.d.ts +0 -2
  59. package/dist/tests/AbstractErgoExtractorAction.spec.d.ts.map +0 -1
  60. package/dist/tests/AbstractErgoExtractorAction.spec.js +0 -221
  61. package/dist/tests/initializable/AbstractInitializable.mock.d.ts +0 -61
  62. package/dist/tests/initializable/AbstractInitializable.mock.d.ts.map +0 -1
  63. package/dist/tests/initializable/AbstractInitializable.mock.js +0 -18
  64. package/dist/tests/initializable/AbstractInitializable.spec.d.ts +0 -2
  65. package/dist/tests/initializable/AbstractInitializable.spec.d.ts.map +0 -1
  66. package/dist/tests/initializable/AbstractInitializable.spec.js +0 -299
  67. package/dist/tests/initializable/AbstractInitializableAction.mock.d.ts +0 -15
  68. package/dist/tests/initializable/AbstractInitializableAction.mock.d.ts.map +0 -1
  69. package/dist/tests/initializable/AbstractInitializableAction.mock.js +0 -27
  70. package/dist/tests/initializable/AbstractInitializableAction.spec.d.ts +0 -2
  71. package/dist/tests/initializable/AbstractInitializableAction.spec.d.ts.map +0 -1
  72. package/dist/tests/initializable/AbstractInitializableAction.spec.js +0 -54
  73. package/dist/tests/initializable/testData.d.ts +0 -94
  74. package/dist/tests/initializable/testData.d.ts.map +0 -1
  75. package/dist/tests/initializable/testData.js +0 -235
  76. package/dist/tests/network/ExplorerNetwork.spec.d.ts +0 -2
  77. package/dist/tests/network/ExplorerNetwork.spec.d.ts.map +0 -1
  78. package/dist/tests/network/ExplorerNetwork.spec.js +0 -61
  79. package/dist/tests/network/NodeNetwork.spec.d.ts +0 -2
  80. package/dist/tests/network/NodeNetwork.spec.d.ts.map +0 -1
  81. package/dist/tests/network/NodeNetwork.spec.js +0 -48
  82. package/dist/tests/network/testData.d.ts +0 -752
  83. package/dist/tests/network/testData.d.ts.map +0 -1
  84. package/dist/tests/network/testData.js +0 -1401
  85. package/dist/tests/testData.d.ts +0 -32
  86. package/dist/tests/testData.d.ts.map +0 -1
  87. package/dist/tests/testData.js +0 -121
  88. package/dist/tests/testUtils.d.ts +0 -9
  89. package/dist/tests/testUtils.d.ts.map +0 -1
  90. package/dist/tests/testUtils.js +0 -31
  91. package/dist/tsconfig.tsbuildinfo +0 -1
  92. package/dist/vitest.config.d.ts +0 -3
  93. package/dist/vitest.config.d.ts.map +0 -1
  94. package/dist/vitest.config.js +0 -18
  95. package/lib/abstractExtractor.ts +0 -31
  96. package/lib/constants.ts +0 -3
  97. package/lib/ergo/AbstractErgoExtractor.ts +0 -227
  98. package/lib/ergo/AbstractErgoExtractorAction.ts +0 -319
  99. package/lib/ergo/AbstractErgoExtractorEntity.ts +0 -32
  100. package/lib/ergo/index.ts +0 -9
  101. package/lib/ergo/initializable/AbstractInitializable.ts +0 -228
  102. package/lib/ergo/initializable/AbstractInitializableAction.ts +0 -33
  103. package/lib/ergo/initializable/index.ts +0 -2
  104. package/lib/ergo/interfaces.ts +0 -51
  105. package/lib/ergo/network/AbstractNetwork.ts +0 -29
  106. package/lib/ergo/network/ExplorerNetwork.ts +0 -237
  107. package/lib/ergo/network/NodeNetwork.ts +0 -169
  108. package/lib/ergo/utils.ts +0 -15
  109. package/lib/index.ts +0 -3
  110. package/tests/AbstractErgoExtractor.mock.ts +0 -33
  111. package/tests/AbstractErgoExtractor.spec.ts +0 -284
  112. package/tests/AbstractErgoExtractorAction.mock.ts +0 -45
  113. package/tests/AbstractErgoExtractorAction.spec.ts +0 -268
  114. package/tests/initializable/AbstractInitializable.mock.ts +0 -44
  115. package/tests/initializable/AbstractInitializable.spec.ts +0 -386
  116. package/tests/initializable/AbstractInitializableAction.mock.ts +0 -45
  117. package/tests/initializable/AbstractInitializableAction.spec.ts +0 -64
  118. package/tests/initializable/testData.ts +0 -283
  119. package/tests/network/ExplorerNetwork.spec.ts +0 -73
  120. package/tests/network/NodeNetwork.spec.ts +0 -56
  121. package/tests/network/testData.ts +0 -1708
  122. package/tests/testData.ts +0 -140
  123. package/tests/testUtils.ts +0 -22
  124. package/tsconfig.build.json +0 -9
  125. package/tsconfig.build.tsbuildinfo +0 -1
  126. package/tsconfig.json +0 -9
  127. package/vitest.config.ts +0 -18
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # @rosen-bridge/abstract-extractor
2
2
 
3
+ ## 2.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Update dependencies
8
+ - @rosen-bridge/extended-typeorm@1.0.0
9
+ - @rosen-bridge/abstract-logger@3.0.0
10
+ - @rosen-bridge/json-bigint@1.0.0
11
+ - @rosen-clients/ergo-explorer@2.0.0
12
+ - @rosen-clients/ergo-node@3.0.0
13
+
3
14
  ## 2.1.0
4
15
 
5
16
  ### Minor Changes
package/package.json CHANGED
@@ -1,13 +1,20 @@
1
1
  {
2
2
  "name": "@rosen-bridge/abstract-extractor",
3
- "version": "2.1.0",
3
+ "version": "2.1.1",
4
4
  "description": "Rosen Bridge extractor interfaces to work with scanner",
5
- "repository": "",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/rosen-bridge/scanner.git"
8
+ },
6
9
  "license": "MIT",
7
10
  "author": "Rosen Team",
8
11
  "type": "module",
9
12
  "main": "dist/index.js",
10
13
  "types": "dist/index.d.ts",
14
+ "files": [
15
+ "dist",
16
+ "CHANGELOG.md"
17
+ ],
11
18
  "scripts": {
12
19
  "build": "tsc --build tsconfig.build.json",
13
20
  "coverage": "npm run test -- --coverage",
@@ -28,12 +35,12 @@
28
35
  "vitest": "^3.1.4"
29
36
  },
30
37
  "dependencies": {
31
- "@rosen-bridge/abstract-logger": "^2.0.1",
32
- "@rosen-bridge/extended-typeorm": "^0.2.1",
33
- "@rosen-bridge/json-bigint": "^0.1.0",
38
+ "@rosen-bridge/abstract-logger": "^3.0.0",
39
+ "@rosen-bridge/extended-typeorm": "^1.0.0",
40
+ "@rosen-bridge/json-bigint": "^1.0.0",
34
41
  "@rosen-bridge/scanner-interfaces": "^0.2.0",
35
- "@rosen-clients/ergo-explorer": "^1.1.5",
36
- "@rosen-clients/ergo-node": "^1.2.3",
42
+ "@rosen-clients/ergo-explorer": "^2.0.0",
43
+ "@rosen-clients/ergo-node": "^3.0.0",
37
44
  "lodash-es": "^4.17.21",
38
45
  "uuid": "^9.0.0"
39
46
  },
package/.eslintignore DELETED
@@ -1 +0,0 @@
1
- dist
@@ -1,25 +0,0 @@
1
- import { BlockInfo, Block } from '@rosen-bridge/scanner-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
@@ -1 +0,0 @@
1
- {"version":3,"file":"abstractExtractor.d.ts","sourceRoot":"","sources":["../../lib/abstractExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAEpE,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"}
@@ -1,3 +0,0 @@
1
- export class AbstractExtractor {
2
- }
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RFeHRyYWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvYWJzdHJhY3RFeHRyYWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFnQixpQkFBaUI7Q0E0QnRDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmxvY2tJbmZvLCBCbG9jayB9IGZyb20gJ0Byb3Nlbi1icmlkZ2Uvc2Nhbm5lci1pbnRlcmZhY2VzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0RXh0cmFjdG9yPFRyYW5zYWN0aW9uVHlwZT4ge1xuICAvKipcbiAgICogcHJvY2VzcyBhIGxpc3Qgb2YgdHJhbnNhY3Rpb25zIGluIGEgYmxvY2sgYW5kIHN0b3JlIHJlcXVpcmVkIGluZm9ybWF0aW9uXG4gICAqIEBwYXJhbSB0eHMgbGlzdCBvZiB0cmFuc2FjdGlvbnMgaW4gdGhlIGJsb2NrXG4gICAqIEBwYXJhbSBibG9ja1xuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHByb2Nlc3MgaXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBhbmQgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBhYnN0cmFjdCBwcm9jZXNzVHJhbnNhY3Rpb25zOiAoXG4gICAgdHhzOiBBcnJheTxUcmFuc2FjdGlvblR5cGU+LFxuICAgIGJsb2NrOiBCbG9jayxcbiAgKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuXG4gIC8qKlxuICAgKiByZXR1cm4gZXh0cmFjdG9yIGlkLiBUaGlzIGlkIG11c3QgYmUgdW5pcXVlIG92ZXIgYWxsIGV4dHJhY3RvcnMuXG4gICAqL1xuICBhYnN0cmFjdCBnZXRJZDogKCkgPT4gc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBmb3JrIG9uZSBibG9jayBhbmQgcmVtb3ZlIGFsbCBzdG9yZWQgaW5mb3JtYXRpb24gZm9yIHRoaXMgYmxvY2tcbiAgICogQHBhcmFtIGhhc2ggYmxvY2sgaGFzaFxuICAgKi9cbiAgYWJzdHJhY3QgZm9ya0Jsb2NrOiAoaGFzaDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBpbml0aWFsaXplIGV4dHJhY3RvciBkYXRhYmFzZSB3aXRoIGRhdGEgY3JlYXRlZCBiZWxvdyB0aGUgaW5pdGlhbCBoZWlnaHRcbiAgICogQHBhcmFtIGluaXRpYWxCbG9ja1xuICAgKi9cbiAgYWJzdHJhY3QgaW5pdGlhbGl6ZUJveGVzOiAoaW5pdGlhbEJsb2NrOiBCbG9ja0luZm8pID0+IFByb21pc2U8dm9pZD47XG59XG4iXX0=
@@ -1,4 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,4 +0,0 @@
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQzdCLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDaEMsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBBUElfTElNSVQgPSAxMDA7XG5leHBvcnQgY29uc3QgUkVUUklBTF9DT1VOVCA9IDEwO1xuZXhwb3J0IGNvbnN0IERCX0NIVU5LX1NJWkUgPSAxMDA7XG4iXX0=
@@ -1,80 +0,0 @@
1
- import { AbstractLogger, DummyLogger } from '@rosen-bridge/abstract-logger';
2
- import { Transaction, OutputBox, InputExtension, BlockInfo } from '@rosen-bridge/scanner-interfaces';
3
- import { AbstractExtractor } from '../abstractExtractor';
4
- import { AbstractErgoExtractorAction } from './AbstractErgoExtractorAction';
5
- import { AbstractBoxData, CallbackType, CallbackMap, CallbackDataMap, TxExtra } from './interfaces';
6
- import { AbstractErgoExtractorEntity } from './AbstractErgoExtractorEntity';
7
- export declare abstract class AbstractErgoExtractor<ExtractedData extends AbstractBoxData, ExtractorEntity extends AbstractErgoExtractorEntity> extends AbstractExtractor<Transaction> {
8
- protected abstract actions: AbstractErgoExtractorAction<ExtractedData, ExtractorEntity>;
9
- protected logger: AbstractLogger;
10
- protected callbacks: {
11
- [K in CallbackType]: Map<string, CallbackMap<ExtractedData>[K]>;
12
- };
13
- private callbackMutex;
14
- constructor(logger?: DummyLogger);
15
- /**
16
- * hook a new callback on a callback type
17
- * @param type
18
- * @param id
19
- * @param callback
20
- * @returns callback registered id
21
- */
22
- hook: <T extends CallbackType>(type: T, callback: CallbackMap<ExtractedData>[T]) => Promise<string>;
23
- /**
24
- * unhook a callback on a type
25
- * returns false if there is no registered callback with the id
26
- * @param type
27
- * @param id
28
- * @returns success status
29
- */
30
- unhook: (type: CallbackType, id: string) => Promise<boolean>;
31
- /**
32
- * trigger all callbacks registered on a specific type with the provided data
33
- * @param type
34
- * @param data
35
- */
36
- protected triggerCallbacks<T extends CallbackType>(type: T, data: CallbackDataMap<ExtractedData>[T]): void;
37
- /**
38
- * extract box data to proper format (not including spending information)
39
- * @param box
40
- * @param inputExtensions all input box extensions in transaction
41
- * @return extracted data in proper format
42
- */
43
- abstract extractBoxData: (box: OutputBox, inputExtensions: InputExtension[], txExtra?: TxExtra) => ExtractedData | undefined;
44
- /**
45
- * check proper data format in the box
46
- * @param box
47
- * @return true if the box has the required data and false otherwise
48
- */
49
- abstract hasData: (box: OutputBox) => boolean;
50
- /**
51
- * create spend info array for the transaction
52
- * @param tx
53
- * @returns spend info array of the transaction
54
- */
55
- getTransactionSpendInfo: (tx: Transaction) => {
56
- txId: string;
57
- boxId: string;
58
- index: number;
59
- }[];
60
- /**
61
- * extract transaction extra information
62
- * override this function if there is extra needed information
63
- * @param tx
64
- * @returns
65
- */
66
- getTransactionExtraData: (tx: Transaction) => TxExtra;
67
- /**
68
- * process a list of transactions in a block and store required information
69
- * @param txs list of transactions in the block
70
- * @param block
71
- * @return true if the process is completed successfully and false otherwise
72
- */
73
- processTransactions: (txs: Transaction[], block: BlockInfo) => Promise<boolean>;
74
- /**
75
- * fork one block and remove all stored information for this block
76
- * @param hash block hash
77
- */
78
- forkBlock: (hash: string) => Promise<void>;
79
- }
80
- //# sourceMappingURL=AbstractErgoExtractor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AbstractErgoExtractor.d.ts","sourceRoot":"","sources":["../../../lib/ergo/AbstractErgoExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAI5E,OAAO,EACL,WAAW,EACX,SAAS,EACT,cAAc,EACd,SAAS,EACV,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EACL,eAAe,EAEf,YAAY,EACZ,WAAW,EACX,eAAe,EACf,OAAO,EACR,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAE5E,8BAAsB,qBAAqB,CACzC,aAAa,SAAS,eAAe,EACrC,eAAe,SAAS,2BAA2B,CACnD,SAAQ,iBAAiB,CAAC,WAAW,CAAC;IACtC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,2BAA2B,CACrD,aAAa,EACb,eAAe,CAChB,CAAC;IACF,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC;IACjC,SAAS,CAAC,SAAS,EAAE;SAClB,CAAC,IAAI,YAAY,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;KAChE,CAKC;IACF,OAAO,CAAC,aAAa,CAAe;gBAExB,MAAM,cAAoB;IAKtC;;;;;;OAMG;IACH,IAAI,GAAU,CAAC,SAAS,YAAY,EAClC,MAAM,CAAC,EACP,UAAU,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KACtC,OAAO,CAAC,MAAM,CAAC,CAOhB;IAEF;;;;;;OAMG;IACH,MAAM,GAAU,MAAM,YAAY,EAAE,IAAI,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC,CAY/D;IAEF;;;;OAIG;IACH,SAAS,CAAC,gBAAgB,CAAC,CAAC,SAAS,YAAY,EAC/C,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GACtC,IAAI;IAOP;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,EAAE,CACvB,GAAG,EAAE,SAAS,EACd,eAAe,EAAE,cAAc,EAAE,EACjC,OAAO,CAAC,EAAE,OAAO,KACd,aAAa,GAAG,SAAS,CAAC;IAE/B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,OAAO,CAAC;IAE9C;;;;OAIG;IACH,uBAAuB,GAAI,IAAI,WAAW;;;;QAQxC;IAEF;;;;;OAKG;IACH,uBAAuB,GACrB,IAAI,WAAW,KACd,OAAO,CAER;IAEF;;;;;OAKG;IACH,mBAAmB,GACjB,KAAK,WAAW,EAAE,EAClB,OAAO,SAAS,KACf,OAAO,CAAC,OAAO,CAAC,CAwDjB;IAEF;;;OAGG;IACH,SAAS,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAM7C;CACH"}
@@ -1,142 +0,0 @@
1
- import { DummyLogger } from '@rosen-bridge/abstract-logger';
2
- import JsonBigInt from '@rosen-bridge/json-bigint';
3
- import { Mutex } from 'await-semaphore';
4
- import { v4 as uuidv4 } from 'uuid';
5
- import { AbstractExtractor } from '../abstractExtractor';
6
- import { CallbackType, } from './interfaces';
7
- export class AbstractErgoExtractor extends AbstractExtractor {
8
- logger;
9
- callbacks = {
10
- [CallbackType.Update]: new Map(),
11
- [CallbackType.Insert]: new Map(),
12
- [CallbackType.Delete]: new Map(),
13
- [CallbackType.Spend]: new Map(),
14
- };
15
- callbackMutex = new Mutex();
16
- constructor(logger = new DummyLogger()) {
17
- super();
18
- this.logger = logger;
19
- }
20
- /**
21
- * hook a new callback on a callback type
22
- * @param type
23
- * @param id
24
- * @param callback
25
- * @returns callback registered id
26
- */
27
- hook = async (type, callback) => {
28
- const release = await this.callbackMutex.acquire();
29
- const callbackMap = this.callbacks[type];
30
- const id = uuidv4();
31
- callbackMap.set(id, callback);
32
- release();
33
- return id;
34
- };
35
- /**
36
- * unhook a callback on a type
37
- * returns false if there is no registered callback with the id
38
- * @param type
39
- * @param id
40
- * @returns success status
41
- */
42
- unhook = async (type, id) => {
43
- const release = await this.callbackMutex.acquire();
44
- const callbackMap = this.callbacks[type];
45
- if (!callbackMap.has(id)) {
46
- this.logger.warn(`Callback with Id [${id}] is not registered for type [${type}].`);
47
- return false;
48
- }
49
- callbackMap.delete(id);
50
- release();
51
- return true;
52
- };
53
- /**
54
- * trigger all callbacks registered on a specific type with the provided data
55
- * @param type
56
- * @param data
57
- */
58
- triggerCallbacks(type, data) {
59
- const callbackMap = this.callbacks[type];
60
- callbackMap.forEach((callback) => {
61
- callback(data);
62
- });
63
- }
64
- /**
65
- * create spend info array for the transaction
66
- * @param tx
67
- * @returns spend info array of the transaction
68
- */
69
- getTransactionSpendInfo = (tx) => {
70
- let boxIndex = 1;
71
- const spendInfoArray = [];
72
- for (const input of tx.inputs) {
73
- spendInfoArray.push({ txId: tx.id, boxId: input.boxId, index: boxIndex });
74
- boxIndex += 1;
75
- }
76
- return spendInfoArray;
77
- };
78
- /**
79
- * extract transaction extra information
80
- * override this function if there is extra needed information
81
- * @param tx
82
- * @returns
83
- */
84
- getTransactionExtraData = (tx) => {
85
- return {};
86
- };
87
- /**
88
- * process a list of transactions in a block and store required information
89
- * @param txs list of transactions in the block
90
- * @param block
91
- * @return true if the process is completed successfully and false otherwise
92
- */
93
- processTransactions = async (txs, block) => {
94
- try {
95
- const boxes = [];
96
- const spentInfos = [];
97
- for (const tx of txs) {
98
- const inputExtensions = tx.inputs.map((input) => input.extension || {});
99
- for (const output of tx.outputs) {
100
- if (!this.hasData(output)) {
101
- continue;
102
- }
103
- this.logger.debug(`Trying to extract data from box ${output.boxId}`);
104
- const extractedData = this.extractBoxData(output, inputExtensions, this.getTransactionExtraData(tx));
105
- if (extractedData) {
106
- this.logger.debug(`Extracted data ${JsonBigInt.stringify(extractedData)} from box ${output.boxId}`);
107
- boxes.push(extractedData);
108
- }
109
- }
110
- spentInfos.push(...this.getTransactionSpendInfo(tx));
111
- }
112
- if (boxes.length > 0) {
113
- if (!(await this.actions.storeBoxes(boxes, block, this.getId()))) {
114
- this.logger.warn(`Data insertion failed for ${this.getId()} at the block ${block.height}`);
115
- return false;
116
- }
117
- this.triggerCallbacks(CallbackType.Insert, boxes);
118
- }
119
- const spentData = await this.actions.spendBoxes(spentInfos, block, this.getId());
120
- if (spentData.length > 0) {
121
- this.triggerCallbacks(CallbackType.Spend, spentData);
122
- }
123
- }
124
- catch (e) {
125
- this.logger.error(`Processing transactions failed for ${this.getId()} at the block ${block.height} with error: ${e}`);
126
- return false;
127
- }
128
- return true;
129
- };
130
- /**
131
- * fork one block and remove all stored information for this block
132
- * @param hash block hash
133
- */
134
- forkBlock = async (hash) => {
135
- const result = await this.actions.deleteBlockBoxes(hash, this.getId());
136
- if (result.deletedData.length > 0)
137
- this.triggerCallbacks(CallbackType.Delete, result.deletedData);
138
- if (result.updatedData.length > 0)
139
- this.triggerCallbacks(CallbackType.Update, result.updatedData);
140
- };
141
- }
142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RFcmdvRXh0cmFjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2VyZ28vQWJzdHJhY3RFcmdvRXh0cmFjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBa0IsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUUsT0FBTyxVQUFVLE1BQU0sMkJBQTJCLENBQUM7QUFDbkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBUXBDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXpELE9BQU8sRUFHTCxZQUFZLEdBSWIsTUFBTSxjQUFjLENBQUM7QUFHdEIsTUFBTSxPQUFnQixxQkFHcEIsU0FBUSxpQkFBOEI7SUFLNUIsTUFBTSxDQUFpQjtJQUN2QixTQUFTLEdBRWY7UUFDRixDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEdBQUcsRUFBRTtRQUNoQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEdBQUcsRUFBRTtRQUNoQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEdBQUcsRUFBRTtRQUNoQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEdBQUcsRUFBRTtLQUNoQyxDQUFDO0lBQ00sYUFBYSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7SUFFcEMsWUFBWSxNQUFNLEdBQUcsSUFBSSxXQUFXLEVBQUU7UUFDcEMsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsSUFBSSxHQUFHLEtBQUssRUFDVixJQUFPLEVBQ1AsUUFBdUMsRUFDdEIsRUFBRTtRQUNuQixNQUFNLE9B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SyxFQUFFLENBQ2IsQ0FBQztZQUNGLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDdkQsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2Ysc0NBQXNDLElBQUksQ0FBQyxLQUFLLEVBQUUsaUJBQ2hELEtBQUssQ0FBQyxNQUNSLGdCQUFnQixDQUFDLEVBQUUsQ0FDcEIsQ0FBQztZQUNGLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0lBRUY7OztPQUdHO0lBQ0gsU0FBUyxHQUFHLEtBQUssRUFBRSxJQUFZLEVBQWlCLEVBQUU7UUFDaEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN2RSxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDL0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pFLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUMvQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkUsQ0FBQyxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdExvZ2dlciwgRHVtbXlMb2dnZXIgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LWxvZ2dlcic7XG5pbXBvcnQgSnNvbkJpZ0ludCBmcm9tICdAcm9zZW4tYnJpZGdlL2pzb24tYmlnaW50JztcbmltcG9ydCB7IE11dGV4IH0gZnJvbSAnYXdhaXQtc2VtYXBob3JlJztcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHtcbiAgVHJhbnNhY3Rpb24sXG4gIE91dHB1dEJveCxcbiAgSW5wdXRFeHRlbnNpb24sXG4gIEJsb2NrSW5mbyxcbn0gZnJvbSAnQHJvc2VuLWJyaWRnZS9zY2FubmVyLWludGVyZmFjZXMnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdEV4dHJhY3RvciB9IGZyb20gJy4uL2Fic3RyYWN0RXh0cmFjdG9yJztcbmltcG9ydCB7IEFic3RyYWN0RXJnb0V4dHJhY3RvckFjdGlvbiB9IGZyb20gJy4vQWJzdHJhY3RFcmdvRXh0cmFjdG9yQWN0aW9uJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Qm94RGF0YSxcbiAgU3BlbmRJbmZvLFxuICBDYWxsYmFja1R5cGUsXG4gIENhbGxiYWNrTWFwLFxuICBDYWxsYmFja0RhdGFNYXAsXG4gIFR4RXh0cmEsXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBYnN0cmFjdEVyZ29FeHRyYWN0b3JFbnRpdHkgfSBmcm9tICcuL0Fic3RyYWN0RXJnb0V4dHJhY3RvckVudGl0eSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdEVyZ29FeHRyYWN0b3I8XG4gIEV4dHJhY3RlZERhdGEgZXh0ZW5kcyBBYnN0cmFjdEJveERhdGEsXG4gIEV4dHJhY3RvckVudGl0eSBleHRlbmRzIEFic3RyYWN0RXJnb0V4dHJhY3RvckVudGl0eSxcbj4gZXh0ZW5kcyBBYnN0cmFjdEV4dHJhY3RvcjxUcmFuc2FjdGlvbj4ge1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgYWN0aW9uczogQWJzdHJhY3RFcmdvRXh0cmFjdG9yQWN0aW9uPFxuICAgIEV4dHJhY3RlZERhdGEsXG4gICAgRXh0cmFjdG9yRW50aXR5XG4gID47XG4gIHByb3RlY3RlZCBsb2dnZXI6IEFic3RyYWN0TG9nZ2VyO1xuICBwcm90ZWN0ZWQgY2FsbGJhY2tzOiB7XG4gICAgW0sgaW4gQ2FsbGJhY2tUeXBlXTogTWFwPHN0cmluZywgQ2FsbGJhY2tNYXA8RXh0cmFjdGVkRGF0YT5bS10+O1xuICB9ID0ge1xuICAgIFtDYWxsYmFja1R5cGUuVXBkYXRlXTogbmV3IE1hcCgpLFxuICAgIFtDYWxsYmFja1R5cGUuSW5zZXJ0XTogbmV3IE1hcCgpLFxuICAgIFtDYWxsYmFja1R5cGUuRGVsZXRlXTogbmV3IE1hcCgpLFxuICAgIFtDYWxsYmFja1R5cGUuU3BlbmRdOiBuZXcgTWFwKCksXG4gIH07XG4gIHByaXZhdGUgY2FsbGJhY2tNdXRleCA9IG5ldyBNdXRleCgpO1xuXG4gIGNvbnN0cnVjdG9yKGxvZ2dlciA9IG5ldyBEdW1teUxvZ2dlcigpKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBob29rIGEgbmV3IGNhbGxiYWNrIG9uIGEgY2FsbGJhY2sgdHlwZVxuICAgKiBAcGFyYW0gdHlwZVxuICAgKiBAcGFyYW0gaWRcbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIGNhbGxiYWNrIHJlZ2lzdGVyZWQgaWRcbiAgICovXG4gIGhvb2sgPSBhc3luYyA8VCBleHRlbmRzIENhbGxiYWNrVHlwZT4oXG4gICAgdHlwZTogVCxcbiAgICBjYWxsYmFjazogQ2FsbGJhY2tNYXA8RXh0cmFjdGVkRGF0YT5bVF0sXG4gICk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gICAgY29uc3QgcmVsZWFzZSA9IGF3YWl0IHRoaXMuY2FsbGJhY2tNdXRleC5hY3F1aXJlKCk7XG4gICAgY29uc3QgY2FsbGJhY2tNYXAgPSB0aGlzLmNhbGxiYWNrc1t0eXBlXTtcbiAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgIGNhbGxiYWNrTWFwLnNldChpZCwgY2FsbGJhY2spO1xuICAgIHJlbGVhc2UoKTtcbiAgICByZXR1cm4gaWQ7XG4gIH07XG5cbiAgLyoqXG4gICAqIHVuaG9vayBhIGNhbGxiYWNrIG9uIGEgdHlwZVxuICAgKiByZXR1cm5zIGZhbHNlIGlmIHRoZXJlIGlzIG5vIHJlZ2lzdGVyZWQgY2FsbGJhY2sgd2l0aCB0aGUgaWRcbiAgICogQHBhcmFtIHR5cGVcbiAgICogQHBhcmFtIGlkXG4gICAqIEByZXR1cm5zIHN1Y2Nlc3Mgc3RhdHVzXG4gICAqL1xuICB1bmhvb2sgPSBhc3luYyAodHlwZTogQ2FsbGJhY2tUeXBlLCBpZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgY29uc3QgcmVsZWFzZSA9IGF3YWl0IHRoaXMuY2FsbGJhY2tNdXRleC5hY3F1aXJlKCk7XG4gICAgY29uc3QgY2FsbGJhY2tNYXAgPSB0aGlzLmNhbGxiYWNrc1t0eXBlXTtcbiAgICBpZiAoIWNhbGxiYWNrTWFwLmhhcyhpZCkpIHtcbiAgICAgIHRoaXMubG9nZ2VyLndhcm4oXG4gICAgICAgIGBDYWxsYmFjayB3aXRoIElkIFske2lkfV0gaXMgbm90IHJlZ2lzdGVyZWQgZm9yIHR5cGUgWyR7dHlwZX1dLmAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjYWxsYmFja01hcC5kZWxldGUoaWQpO1xuICAgIHJlbGVhc2UoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvKipcbiAgICogdHJpZ2dlciBhbGwgY2FsbGJhY2tzIHJlZ2lzdGVyZWQgb24gYSBzcGVjaWZpYyB0eXBlIHdpdGggdGhlIHByb3ZpZGVkIGRhdGFcbiAgICogQHBhcmFtIHR5cGVcbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIHByb3RlY3RlZCB0cmlnZ2VyQ2FsbGJhY2tzPFQgZXh0ZW5kcyBDYWxsYmFja1R5cGU+KFxuICAgIHR5cGU6IFQsXG4gICAgZGF0YTogQ2FsbGJhY2tEYXRhTWFwPEV4dHJhY3RlZERhdGE+W1RdLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjYWxsYmFja01hcCA9IHRoaXMuY2FsbGJhY2tzW3R5cGVdO1xuICAgIGNhbGxiYWNrTWFwLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBleHRyYWN0IGJveCBkYXRhIHRvIHByb3BlciBmb3JtYXQgKG5vdCBpbmNsdWRpbmcgc3BlbmRpbmcgaW5mb3JtYXRpb24pXG4gICAqIEBwYXJhbSBib3hcbiAgICogQHBhcmFtIGlucHV0RXh0ZW5zaW9ucyBhbGwgaW5wdXQgYm94IGV4dGVuc2lvbnMgaW4gdHJhbnNhY3Rpb25cbiAgICogQHJldHVybiBleHRyYWN0ZWQgZGF0YSBpbiBwcm9wZXIgZm9ybWF0XG4gICAqL1xuICBhYnN0cmFjdCBleHRyYWN0Qm94RGF0YTogKFxuICAgIGJveDogT3V0cHV0Qm94LFxuICAgIGlucHV0RXh0ZW5zaW9uczogSW5wdXRFeHRlbnNpb25bXSxcbiAgICB0eEV4dHJhPzogVHhFeHRyYSxcbiAgKSA9PiBFeHRyYWN0ZWREYXRhIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBjaGVjayBwcm9wZXIgZGF0YSBmb3JtYXQgaW4gdGhlIGJveFxuICAgKiBAcGFyYW0gYm94XG4gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgYm94IGhhcyB0aGUgcmVxdWlyZWQgZGF0YSBhbmQgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBhYnN0cmFjdCBoYXNEYXRhOiAoYm94OiBPdXRwdXRCb3gpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBzcGVuZCBpbmZvIGFycmF5IGZvciB0aGUgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHR4XG4gICAqIEByZXR1cm5zIHNwZW5kIGluZm8gYXJyYXkgb2YgdGhlIHRyYW5zYWN0aW9uXG4gICAqL1xuICBnZXRUcmFuc2FjdGlvblNwZW5kSW5mbyA9ICh0eDogVHJhbnNhY3Rpb24pID0+IHtcbiAgICBsZXQgYm94SW5kZXggPSAxO1xuICAgIGNvbnN0IHNwZW5kSW5mb0FycmF5ID0gW107XG4gICAgZm9yIChjb25zdCBpbnB1dCBvZiB0eC5pbnB1dHMpIHtcbiAgICAgIHNwZW5kSW5mb0FycmF5LnB1c2goeyB0eElkOiB0eC5pZCwgYm94SWQ6IGlucHV0LmJveElkLCBpbmRleDogYm94SW5kZXggfSk7XG4gICAgICBib3hJbmRleCArPSAxO1xuICAgIH1cbiAgICByZXR1cm4gc3BlbmRJbmZvQXJyYXk7XG4gIH07XG5cbiAgLyoqXG4gICAqIGV4dHJhY3QgdHJhbnNhY3Rpb24gZXh0cmEgaW5mb3JtYXRpb25cbiAgICogb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiBpZiB0aGVyZSBpcyBleHRyYSBuZWVkZWQgaW5mb3JtYXRpb25cbiAgICogQHBhcmFtIHR4XG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBnZXRUcmFuc2FjdGlvbkV4dHJhRGF0YSA9IChcbiAgICB0eDogVHJhbnNhY3Rpb24sIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICk6IFR4RXh0cmEgPT4ge1xuICAgIHJldHVybiB7fTtcbiAgfTtcblxuICAvKipcbiAgICogcHJvY2VzcyBhIGxpc3Qgb2YgdHJhbnNhY3Rpb25zIGluIGEgYmxvY2sgYW5kIHN0b3JlIHJlcXVpcmVkIGluZm9ybWF0aW9uXG4gICAqIEBwYXJhbSB0eHMgbGlzdCBvZiB0cmFuc2FjdGlvbnMgaW4gdGhlIGJsb2NrXG4gICAqIEBwYXJhbSBibG9ja1xuICAgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHByb2Nlc3MgaXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBhbmQgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBwcm9jZXNzVHJhbnNhY3Rpb25zID0gYXN5bmMgKFxuICAgIHR4czogVHJhbnNhY3Rpb25bXSxcbiAgICBibG9jazogQmxvY2tJbmZvLFxuICApOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYm94ZXM6IEFycmF5PEV4dHJhY3RlZERhdGE+ID0gW107XG4gICAgICBjb25zdCBzcGVudEluZm9zOiBBcnJheTxTcGVuZEluZm8+ID0gW107XG4gICAgICBmb3IgKGNvbnN0IHR4IG9mIHR4cykge1xuICAgICAgICBjb25zdCBpbnB1dEV4dGVuc2lvbnMgPSB0eC5pbnB1dHMubWFwKChpbnB1dCkgPT4gaW5wdXQuZXh0ZW5zaW9uIHx8IHt9KTtcbiAgICAgICAgZm9yIChjb25zdCBvdXRwdXQgb2YgdHgub3V0cHV0cykge1xuICAgICAgICAgIGlmICghdGhpcy5oYXNEYXRhKG91dHB1dCkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgVHJ5aW5nIHRvIGV4dHJhY3QgZGF0YSBmcm9tIGJveCAke291dHB1dC5ib3hJZH1gKTtcbiAgICAgICAgICBjb25zdCBleHRyYWN0ZWREYXRhID0gdGhpcy5leHRyYWN0Qm94RGF0YShcbiAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgIGlucHV0RXh0ZW5zaW9ucyxcbiAgICAgICAgICAgIHRoaXMuZ2V0VHJhbnNhY3Rpb25FeHRyYURhdGEodHgpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGV4dHJhY3RlZERhdGEpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgICBgRXh0cmFjdGVkIGRhdGEgJHtKc29uQmlnSW50LnN0cmluZ2lmeShleHRyYWN0ZWREYXRhKX0gZnJvbSBib3ggJHtcbiAgICAgICAgICAgICAgICBvdXRwdXQuYm94SWRcbiAgICAgICAgICAgICAgfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYm94ZXMucHVzaChleHRyYWN0ZWREYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3BlbnRJbmZvcy5wdXNoKC4uLnRoaXMuZ2V0VHJhbnNhY3Rpb25TcGVuZEluZm8odHgpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGJveGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKCEoYXdhaXQgdGhpcy5hY3Rpb25zLnN0b3JlQm94ZXMoYm94ZXMsIGJsb2NrLCB0aGlzLmdldElkKCkpKSkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXG4gICAgICAgICAgICBgRGF0YSBpbnNlcnRpb24gZmFpbGVkIGZvciAke3RoaXMuZ2V0SWQoKX0gYXQgdGhlIGJsb2NrICR7XG4gICAgICAgICAgICAgIGJsb2NrLmhlaWdodFxuICAgICAgICAgICAgfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50cmlnZ2VyQ2FsbGJhY2tzKENhbGxiYWNrVHlwZS5JbnNlcnQsIGJveGVzKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNwZW50RGF0YSA9IGF3YWl0IHRoaXMuYWN0aW9ucy5zcGVuZEJveGVzKFxuICAgICAgICBzcGVudEluZm9zLFxuICAgICAgICBibG9jayxcbiAgICAgICAgdGhpcy5nZXRJZCgpLFxuICAgICAgKTtcbiAgICAgIGlmIChzcGVudERhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnRyaWdnZXJDYWxsYmFja3MoQ2FsbGJhY2tUeXBlLlNwZW5kLCBzcGVudERhdGEpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICBgUHJvY2Vzc2luZyB0cmFuc2FjdGlvbnMgZmFpbGVkIGZvciAke3RoaXMuZ2V0SWQoKX0gYXQgdGhlIGJsb2NrICR7XG4gICAgICAgICAgYmxvY2suaGVpZ2h0XG4gICAgICAgIH0gd2l0aCBlcnJvcjogJHtlfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvKipcbiAgICogZm9yayBvbmUgYmxvY2sgYW5kIHJlbW92ZSBhbGwgc3RvcmVkIGluZm9ybWF0aW9uIGZvciB0aGlzIGJsb2NrXG4gICAqIEBwYXJhbSBoYXNoIGJsb2NrIGhhc2hcbiAgICovXG4gIGZvcmtCbG9jayA9IGFzeW5jIChoYXNoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFjdGlvbnMuZGVsZXRlQmxvY2tCb3hlcyhoYXNoLCB0aGlzLmdldElkKCkpO1xuICAgIGlmIChyZXN1bHQuZGVsZXRlZERhdGEubGVuZ3RoID4gMClcbiAgICAgIHRoaXMudHJpZ2dlckNhbGxiYWNrcyhDYWxsYmFja1R5cGUuRGVsZXRlLCByZXN1bHQuZGVsZXRlZERhdGEpO1xuICAgIGlmIChyZXN1bHQudXBkYXRlZERhdGEubGVuZ3RoID4gMClcbiAgICAgIHRoaXMudHJpZ2dlckNhbGxiYWNrcyhDYWxsYmFja1R5cGUuVXBkYXRlLCByZXN1bHQudXBkYXRlZERhdGEpO1xuICB9O1xufVxuIl19
@@ -1,92 +0,0 @@
1
- import { DataSource, Repository, EntityTarget, QueryRunner } from '@rosen-bridge/extended-typeorm';
2
- import { AbstractLogger } from '@rosen-bridge/abstract-logger';
3
- import { BlockInfo } from '@rosen-bridge/scanner-interfaces';
4
- import { AbstractBoxData, BoxInfo, SpendInfo } from './interfaces';
5
- import { AbstractErgoExtractorEntity } from './AbstractErgoExtractorEntity';
6
- export declare abstract class AbstractErgoExtractorAction<ExtractedData extends AbstractBoxData, ExtractorEntity extends AbstractErgoExtractorEntity> {
7
- private readonly datasource;
8
- readonly logger: AbstractLogger;
9
- protected readonly repository: Repository<ExtractorEntity>;
10
- private repo;
11
- constructor(dataSource: DataSource, repo: EntityTarget<ExtractorEntity>, logger?: AbstractLogger);
12
- /**
13
- * create the database entity from extracted data and block information
14
- */
15
- protected createEntity: (data: ExtractedData[], // eslint-disable-line @typescript-eslint/no-unused-vars
16
- block: BlockInfo, // eslint-disable-line @typescript-eslint/no-unused-vars
17
- extractor: string) => Array<Omit<ExtractorEntity, "id">>;
18
- /**
19
- * convert the database entity back to raw data
20
- */
21
- protected convertEntityToData: (entities: ExtractorEntity[]) => ExtractedData[];
22
- /**
23
- * insert entities extracted from a block to database
24
- * @param queryRunner
25
- * @param boxesToInsert
26
- * @param block
27
- * @param extractor
28
- */
29
- protected insertEntities: (queryRunner: QueryRunner, boxesToInsert: Array<ExtractedData>, block: BlockInfo, extractor: string) => Promise<void>;
30
- /**
31
- * update entities related to a box
32
- * @param queryRunner
33
- * @param updateBox
34
- * @param block
35
- * @param extractor
36
- */
37
- protected updateEntity: (queryRunner: QueryRunner, updateBox: ExtractedData, // eslint-disable-line @typescript-eslint/no-unused-vars
38
- block: BlockInfo, // eslint-disable-line @typescript-eslint/no-unused-vars
39
- extractor: string) => Promise<void>;
40
- /**
41
- * delete all data extracted from a block
42
- * @param queryRunner
43
- * @param extractor
44
- * @param block
45
- * @returns
46
- */
47
- protected deleteBlockEntities: (queryRunner: QueryRunner, extractor: string, block: string) => Promise<ExtractedData[]>;
48
- /**
49
- * delete all data extracted from a block
50
- * @param queryRunner
51
- * @param extractor
52
- * @param block
53
- * @returns
54
- */
55
- protected updateBlockEntities: (queryRunner: QueryRunner, // eslint-disable-line @typescript-eslint/no-unused-vars
56
- extractor: string, block: string) => Promise<ExtractorEntity[]>;
57
- /**
58
- * insert all extracted box data in an atomic transaction
59
- * update the data if a box with the same id is already stored in db
60
- * @param boxes
61
- * @param block
62
- * @param extractor
63
- * @return inserted items and updated box ids
64
- * returns undefined in case of any problem
65
- */
66
- storeBoxes: (boxes: Array<ExtractedData>, block: BlockInfo, extractor: string) => Promise<boolean>;
67
- /**
68
- * update spending information of stored boxes
69
- * chunk spendInfos to prevent large database queries
70
- * Note: It only updates the spendHeight and spendBlock fields. If updating
71
- * anything else is required, override this implementation to include the
72
- * additional fields.
73
- * @param spendInfos
74
- * @param block
75
- * @param extractor
76
- * @returns spent box ids
77
- */
78
- spendBoxes: (spendInfos: Array<SpendInfo>, block: BlockInfo, extractor: string) => Promise<BoxInfo[]>;
79
- /**
80
- * delete extracted data from a specific block
81
- * if a box is spend in this block mark it as unspent
82
- * if a box is created in this block remove it from database
83
- * @param block
84
- * @param extractor
85
- * @return deleted items and updated box ids
86
- */
87
- deleteBlockBoxes: (block: string, extractor: string) => Promise<{
88
- deletedData: ExtractedData[];
89
- updatedData: BoxInfo[];
90
- }>;
91
- }
92
- //# sourceMappingURL=AbstractErgoExtractorAction.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AbstractErgoExtractorAction.d.ts","sourceRoot":"","sources":["../../../lib/ergo/AbstractErgoExtractorAction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAEV,UAAU,EAEV,YAAY,EAEZ,WAAW,EACZ,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAE5E,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAE7D,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAE5E,8BAAsB,2BAA2B,CAC/C,aAAa,SAAS,eAAe,EACrC,eAAe,SAAS,2BAA2B;IAEnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC;IAC3D,OAAO,CAAC,IAAI,CAAgC;gBAG1C,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,YAAY,CAAC,eAAe,CAAC,EACnC,MAAM,CAAC,EAAE,cAAc;IAQzB;;OAEG;IACH,SAAS,CAAC,YAAY,GACpB,MAAM,aAAa,EAAE,EAAE,wDAAwD;IAC/E,OAAO,SAAS,EAAE,wDAAwD;IAC1E,WAAW,MAAM,KAChB,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAInC;IAEF;;OAEG;IACH,SAAS,CAAC,mBAAmB,GAC3B,UAAU,eAAe,EAAE,KAC1B,aAAa,EAAE,CAIhB;IAEF;;;;;;OAMG;IACH,SAAS,CAAC,cAAc,GACtB,aAAa,WAAW,EACxB,eAAe,KAAK,CAAC,aAAa,CAAC,EACnC,OAAO,SAAS,EAChB,WAAW,MAAM,mBAMjB;IAEF;;;;;;OAMG;IACH,SAAS,CAAC,YAAY,GACpB,aAAa,WAAW,EACxB,WAAW,aAAa,EAAE,wDAAwD;IAClF,OAAO,SAAS,EAAE,wDAAwD;IAC1E,WAAW,MAAM,mBAWjB;IAEF;;;;;;OAMG;IACH,SAAS,CAAC,mBAAmB,GAC3B,aAAa,WAAW,EACxB,WAAW,MAAM,EACjB,OAAO,MAAM,KACZ,OAAO,CAAC,aAAa,EAAE,CAAC,CAazB;IAEF;;;;;;OAMG;IACH,SAAS,CAAC,mBAAmB,GAC3B,aAAa,WAAW,EAAE,wDAAwD;IAClF,WAAW,MAAM,EACjB,OAAO,MAAM,KACZ,OAAO,CAAC,eAAe,EAAE,CAAC,CAsB3B;IAEF;;;;;;;;OAQG;IACH,UAAU,GACR,OAAO,KAAK,CAAC,aAAa,CAAC,EAC3B,OAAO,SAAS,EAChB,WAAW,MAAM,KAChB,OAAO,CAAC,OAAO,CAAC,CA6CjB;IAEF;;;;;;;;;;OAUG;IACH,UAAU,GACR,YAAY,KAAK,CAAC,SAAS,CAAC,EAC5B,OAAO,SAAS,EAChB,WAAW,MAAM,KAChB,OAAO,CAAC,OAAO,EAAE,CAAC,CA8BnB;IAEF;;;;;;;OAOG;IACH,gBAAgB,GACd,OAAO,MAAM,EACb,WAAW,MAAM,KAChB,OAAO,CAAC;QAAE,WAAW,EAAE,aAAa,EAAE,CAAC;QAAC,WAAW,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC,CAiClE;CACH"}