@rosen-bridge/abstract-extractor 2.0.1 → 2.0.3-52fc0239

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/ergo/AbstractErgoExtractor.d.ts.map +1 -1
  3. package/dist/ergo/AbstractErgoExtractor.js +3 -2
  4. package/dist/ergo/AbstractErgoExtractorAction.d.ts +1 -1
  5. package/dist/ergo/AbstractErgoExtractorAction.d.ts.map +1 -1
  6. package/dist/ergo/AbstractErgoExtractorAction.js +23 -9
  7. package/dist/ergo/AbstractErgoExtractorEntity.js +2 -2
  8. package/dist/ergo/initializable/AbstractInitializableAction.d.ts +1 -1
  9. package/dist/ergo/initializable/AbstractInitializableAction.d.ts.map +1 -1
  10. package/dist/ergo/initializable/AbstractInitializableAction.js +4 -2
  11. package/dist/lib/abstractExtractor.d.ts +25 -0
  12. package/dist/lib/abstractExtractor.d.ts.map +1 -0
  13. package/dist/lib/abstractExtractor.js +3 -0
  14. package/dist/lib/constants.d.ts +4 -0
  15. package/dist/lib/constants.d.ts.map +1 -0
  16. package/dist/lib/constants.js +4 -0
  17. package/dist/lib/ergo/AbstractErgoExtractor.d.ts +80 -0
  18. package/dist/lib/ergo/AbstractErgoExtractor.d.ts.map +1 -0
  19. package/dist/lib/ergo/AbstractErgoExtractor.js +143 -0
  20. package/dist/lib/ergo/AbstractErgoExtractorAction.d.ts +87 -0
  21. package/dist/lib/ergo/AbstractErgoExtractorAction.d.ts.map +1 -0
  22. package/dist/lib/ergo/AbstractErgoExtractorAction.js +222 -0
  23. package/dist/lib/ergo/AbstractErgoExtractorEntity.d.ts +11 -0
  24. package/dist/lib/ergo/AbstractErgoExtractorEntity.d.ts.map +1 -0
  25. package/dist/lib/ergo/AbstractErgoExtractorEntity.js +57 -0
  26. package/dist/lib/ergo/index.d.ts +10 -0
  27. package/dist/lib/ergo/index.d.ts.map +1 -0
  28. package/dist/lib/ergo/index.js +10 -0
  29. package/dist/lib/ergo/initializable/AbstractInitializable.d.ts +48 -0
  30. package/dist/lib/ergo/initializable/AbstractInitializable.d.ts.map +1 -0
  31. package/dist/lib/ergo/initializable/AbstractInitializable.js +163 -0
  32. package/dist/lib/ergo/initializable/AbstractInitializableAction.d.ts +14 -0
  33. package/dist/lib/ergo/initializable/AbstractInitializableAction.d.ts.map +1 -0
  34. package/dist/lib/ergo/initializable/AbstractInitializableAction.js +16 -0
  35. package/dist/lib/ergo/initializable/index.d.ts +3 -0
  36. package/dist/lib/ergo/initializable/index.d.ts.map +1 -0
  37. package/dist/lib/ergo/initializable/index.js +3 -0
  38. package/dist/lib/ergo/interfaces.d.ts +47 -0
  39. package/dist/lib/ergo/interfaces.d.ts.map +1 -0
  40. package/dist/lib/ergo/interfaces.js +8 -0
  41. package/dist/lib/ergo/network/AbstractNetwork.d.ts +26 -0
  42. package/dist/lib/ergo/network/AbstractNetwork.d.ts.map +1 -0
  43. package/dist/lib/ergo/network/AbstractNetwork.js +3 -0
  44. package/dist/lib/ergo/network/ExplorerNetwork.d.ts +74 -0
  45. package/dist/lib/ergo/network/ExplorerNetwork.d.ts.map +1 -0
  46. package/dist/lib/ergo/network/ExplorerNetwork.js +185 -0
  47. package/dist/lib/ergo/network/NodeNetwork.d.ts +60 -0
  48. package/dist/lib/ergo/network/NodeNetwork.d.ts.map +1 -0
  49. package/dist/lib/ergo/network/NodeNetwork.js +131 -0
  50. package/dist/lib/ergo/utils.d.ts +8 -0
  51. package/dist/lib/ergo/utils.d.ts.map +1 -0
  52. package/dist/lib/ergo/utils.js +16 -0
  53. package/dist/lib/index.d.ts +4 -0
  54. package/dist/lib/index.d.ts.map +1 -0
  55. package/dist/lib/index.js +4 -0
  56. package/dist/tests/AbstractErgoExtractor.mock.d.ts +11 -0
  57. package/dist/tests/AbstractErgoExtractor.mock.d.ts.map +1 -0
  58. package/dist/tests/AbstractErgoExtractor.mock.js +13 -0
  59. package/dist/tests/AbstractErgoExtractor.spec.d.ts +2 -0
  60. package/dist/tests/AbstractErgoExtractor.spec.d.ts.map +1 -0
  61. package/dist/tests/AbstractErgoExtractor.spec.js +241 -0
  62. package/dist/tests/AbstractErgoExtractorAction.mock.d.ts +15 -0
  63. package/dist/tests/AbstractErgoExtractorAction.mock.d.ts.map +1 -0
  64. package/dist/tests/AbstractErgoExtractorAction.mock.js +27 -0
  65. package/dist/tests/AbstractErgoExtractorAction.spec.d.ts +2 -0
  66. package/dist/tests/AbstractErgoExtractorAction.spec.d.ts.map +1 -0
  67. package/dist/tests/AbstractErgoExtractorAction.spec.js +222 -0
  68. package/dist/tests/initializable/AbstractInitializable.mock.d.ts +60 -0
  69. package/dist/tests/initializable/AbstractInitializable.mock.d.ts.map +1 -0
  70. package/dist/tests/initializable/AbstractInitializable.mock.js +22 -0
  71. package/dist/tests/initializable/AbstractInitializable.spec.d.ts +2 -0
  72. package/dist/tests/initializable/AbstractInitializable.spec.d.ts.map +1 -0
  73. package/dist/tests/initializable/AbstractInitializable.spec.js +300 -0
  74. package/dist/tests/initializable/AbstractInitializableAction.mock.d.ts +15 -0
  75. package/dist/tests/initializable/AbstractInitializableAction.mock.d.ts.map +1 -0
  76. package/dist/tests/initializable/AbstractInitializableAction.mock.js +27 -0
  77. package/dist/tests/initializable/AbstractInitializableAction.spec.d.ts +2 -0
  78. package/dist/tests/initializable/AbstractInitializableAction.spec.d.ts.map +1 -0
  79. package/dist/tests/initializable/AbstractInitializableAction.spec.js +55 -0
  80. package/dist/tests/initializable/testData.d.ts +94 -0
  81. package/dist/tests/initializable/testData.d.ts.map +1 -0
  82. package/dist/tests/initializable/testData.js +235 -0
  83. package/dist/tests/network/ExplorerNetwork.spec.d.ts +2 -0
  84. package/dist/tests/network/ExplorerNetwork.spec.d.ts.map +1 -0
  85. package/dist/tests/network/ExplorerNetwork.spec.js +62 -0
  86. package/dist/tests/network/NodeNetwork.spec.d.ts +2 -0
  87. package/dist/tests/network/NodeNetwork.spec.d.ts.map +1 -0
  88. package/dist/tests/network/NodeNetwork.spec.js +49 -0
  89. package/dist/tests/network/testData.d.ts +752 -0
  90. package/dist/tests/network/testData.d.ts.map +1 -0
  91. package/dist/tests/network/testData.js +1401 -0
  92. package/dist/tests/testData.d.ts +32 -0
  93. package/dist/tests/testData.d.ts.map +1 -0
  94. package/dist/tests/testData.js +121 -0
  95. package/dist/tests/testUtils.d.ts +9 -0
  96. package/dist/tests/testUtils.d.ts.map +1 -0
  97. package/dist/tests/testUtils.js +31 -0
  98. package/dist/tsconfig.tsbuildinfo +1 -0
  99. package/dist/vitest.config.d.ts +3 -0
  100. package/dist/vitest.config.d.ts.map +1 -0
  101. package/dist/vitest.config.js +17 -0
  102. package/lib/ergo/AbstractErgoExtractor.ts +3 -1
  103. package/lib/ergo/AbstractErgoExtractorAction.ts +47 -36
  104. package/lib/ergo/AbstractErgoExtractorEntity.ts +1 -1
  105. package/lib/ergo/initializable/AbstractInitializableAction.ts +4 -2
  106. package/package.json +9 -14
  107. package/tests/AbstractErgoExtractor.mock.ts +4 -2
  108. package/tests/AbstractErgoExtractorAction.mock.ts +1 -1
  109. package/tests/AbstractErgoExtractorAction.spec.ts +1 -1
  110. package/tests/initializable/AbstractInitializable.mock.ts +13 -4
  111. package/tests/initializable/AbstractInitializable.spec.ts +1 -9
  112. package/tests/initializable/AbstractInitializableAction.mock.ts +1 -1
  113. package/tests/initializable/AbstractInitializableAction.spec.ts +1 -1
  114. package/tests/testUtils.ts +1 -1
  115. package/tsconfig.build.tsbuildinfo +1 -1
@@ -0,0 +1,143 @@
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 // eslint-disable-line @typescript-eslint/no-unused-vars
85
+ ) => {
86
+ return {};
87
+ };
88
+ /**
89
+ * process a list of transactions in a block and store required information
90
+ * @param txs list of transactions in the block
91
+ * @param block
92
+ * @return true if the process is completed successfully and false otherwise
93
+ */
94
+ processTransactions = async (txs, block) => {
95
+ try {
96
+ const boxes = [];
97
+ const spentInfos = [];
98
+ for (const tx of txs) {
99
+ const inputExtensions = tx.inputs.map((input) => input.extension || {});
100
+ for (const output of tx.outputs) {
101
+ if (!this.hasData(output)) {
102
+ continue;
103
+ }
104
+ this.logger.debug(`Trying to extract data from box ${output.boxId}`);
105
+ const extractedData = this.extractBoxData(output, inputExtensions, this.getTransactionExtraData(tx));
106
+ if (extractedData) {
107
+ this.logger.debug(`Extracted data ${JsonBigInt.stringify(extractedData)} from box ${output.boxId}`);
108
+ boxes.push(extractedData);
109
+ }
110
+ }
111
+ spentInfos.push(...this.getTransactionSpendInfo(tx));
112
+ }
113
+ if (boxes.length > 0) {
114
+ if (!(await this.actions.storeBoxes(boxes, block, this.getId()))) {
115
+ this.logger.warn(`Data insertion failed for ${this.getId()} at the block ${block.height}`);
116
+ return false;
117
+ }
118
+ this.triggerCallbacks(CallbackType.Insert, boxes);
119
+ }
120
+ const spentData = await this.actions.spendBoxes(spentInfos, block, this.getId());
121
+ if (spentData.length > 0) {
122
+ this.triggerCallbacks(CallbackType.Spend, spentData);
123
+ }
124
+ }
125
+ catch (e) {
126
+ this.logger.error(`Processing transactions failed for ${this.getId()} at the block ${block.height} with error: ${e}`);
127
+ return false;
128
+ }
129
+ return true;
130
+ };
131
+ /**
132
+ * fork one block and remove all stored information for this block
133
+ * @param hash block hash
134
+ */
135
+ forkBlock = async (hash) => {
136
+ const result = await this.actions.deleteBlockBoxes(hash, this.getId());
137
+ if (result.deletedData.length > 0)
138
+ this.triggerCallbacks(CallbackType.Delete, result.deletedData);
139
+ if (result.updatedData.length > 0)
140
+ this.triggerCallbacks(CallbackType.Update, result.updatedData);
141
+ };
142
+ }
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RFcmdvRXh0cmFjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2VyZ28vQWJzdHJhY3RFcmdvRXh0cmFjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBa0IsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUUsT0FBTyxVQUFVLE1BQU0sMkJBQTJCLENBQUM7QUFDbkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBUXBDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXpELE9BQU8sRUFHTCxZQUFZLEdBSWIsTUFBTSxjQUFjLENBQUM7QUFHdEIsTUFBTSxPQUFnQixxQkFHcEIsU0FBUSxpQkFBOEI7SUFLNUIsTUFBTSxDQUFpQjtJQUN2QixTQUFTLEdBRWY7UUFDRixDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEdBQUcsRUFBRTtRQUNoQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEdBQUcsRUFBRTtRQUNoQyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEdBQUcsRUFBRTtRQUNoQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLEdBQUcsRUFBRTtLQUNoQyxDQUFDO0lBQ00sYUFBYSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7SUFFcEMsWUFBWSxNQUFNLEdBQUcsSUFBSSxXQUFXLEVBQUU7UUFDcEMsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsSUFBSSxHQUFHLEtBQUssRUFDVixJQUFPLEVBQ1AsUUFBdUMsRUFDdEIsRUFBRTtRQUNuQixNQUFNLE9B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SUFBSSxDQUFDLEtBQUssRUFBRSxDQUNiLENBQUM7WUFDRixJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLHNDQUFzQyxJQUFJLENBQUMsS0FBSyxFQUFFLGlCQUNoRCxLQUFLLENBQUMsTUFDUixnQkFBZ0IsQ0FBQyxFQUFFLENBQ3BCLENBQUM7WUFDRixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQztJQUVGOzs7T0FHRztJQUNILFNBQVMsR0FBRyxLQUFLLEVBQUUsSUFBWSxFQUFpQixFQUFFO1FBQ2hELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDdkUsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQy9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqRSxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDL0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ25FLENBQUMsQ0FBQztDQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIsIER1bW15TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IEpzb25CaWdJbnQgZnJvbSAnQHJvc2VuLWJyaWRnZS9qc29uLWJpZ2ludCc7XG5pbXBvcnQgeyBNdXRleCB9IGZyb20gJ2F3YWl0LXNlbWFwaG9yZSc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7XG4gIFRyYW5zYWN0aW9uLFxuICBPdXRwdXRCb3gsXG4gIElucHV0RXh0ZW5zaW9uLFxuICBCbG9ja0luZm8sXG59IGZyb20gJ0Byb3Nlbi1icmlkZ2Uvc2Nhbm5lci1pbnRlcmZhY2VzJztcblxuaW1wb3J0IHsgQWJzdHJhY3RFeHRyYWN0b3IgfSBmcm9tICcuLi9hYnN0cmFjdEV4dHJhY3Rvcic7XG5pbXBvcnQgeyBBYnN0cmFjdEVyZ29FeHRyYWN0b3JBY3Rpb24gfSBmcm9tICcuL0Fic3RyYWN0RXJnb0V4dHJhY3RvckFjdGlvbic7XG5pbXBvcnQge1xuICBBYnN0cmFjdEJveERhdGEsXG4gIFNwZW5kSW5mbyxcbiAgQ2FsbGJhY2tUeXBlLFxuICBDYWxsYmFja01hcCxcbiAgQ2FsbGJhY2tEYXRhTWFwLFxuICBUeEV4dHJhLFxufSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RFcmdvRXh0cmFjdG9yRW50aXR5IH0gZnJvbSAnLi9BYnN0cmFjdEVyZ29FeHRyYWN0b3JFbnRpdHknO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RFcmdvRXh0cmFjdG9yPFxuICBFeHRyYWN0ZWREYXRhIGV4dGVuZHMgQWJzdHJhY3RCb3hEYXRhLFxuICBFeHRyYWN0b3JFbnRpdHkgZXh0ZW5kcyBBYnN0cmFjdEVyZ29FeHRyYWN0b3JFbnRpdHlcbj4gZXh0ZW5kcyBBYnN0cmFjdEV4dHJhY3RvcjxUcmFuc2FjdGlvbj4ge1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgYWN0aW9uczogQWJzdHJhY3RFcmdvRXh0cmFjdG9yQWN0aW9uPFxuICAgIEV4dHJhY3RlZERhdGEsXG4gICAgRXh0cmFjdG9yRW50aXR5XG4gID47XG4gIHByb3RlY3RlZCBsb2dnZXI6IEFic3RyYWN0TG9nZ2VyO1xuICBwcm90ZWN0ZWQgY2FsbGJhY2tzOiB7XG4gICAgW0sgaW4gQ2FsbGJhY2tUeXBlXTogTWFwPHN0cmluZywgQ2FsbGJhY2tNYXA8RXh0cmFjdGVkRGF0YT5bS10+O1xuICB9ID0ge1xuICAgIFtDYWxsYmFja1R5cGUuVXBkYXRlXTogbmV3IE1hcCgpLFxuICAgIFtDYWxsYmFja1R5cGUuSW5zZXJ0XTogbmV3IE1hcCgpLFxuICAgIFtDYWxsYmFja1R5cGUuRGVsZXRlXTogbmV3IE1hcCgpLFxuICAgIFtDYWxsYmFja1R5cGUuU3BlbmRdOiBuZXcgTWFwKCksXG4gIH07XG4gIHByaXZhdGUgY2FsbGJhY2tNdXRleCA9IG5ldyBNdXRleCgpO1xuXG4gIGNvbnN0cnVjdG9yKGxvZ2dlciA9IG5ldyBEdW1teUxvZ2dlcigpKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBob29rIGEgbmV3IGNhbGxiYWNrIG9uIGEgY2FsbGJhY2sgdHlwZVxuICAgKiBAcGFyYW0gdHlwZVxuICAgKiBAcGFyYW0gaWRcbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIGNhbGxiYWNrIHJlZ2lzdGVyZWQgaWRcbiAgICovXG4gIGhvb2sgPSBhc3luYyA8VCBleHRlbmRzIENhbGxiYWNrVHlwZT4oXG4gICAgdHlwZTogVCxcbiAgICBjYWxsYmFjazogQ2FsbGJhY2tNYXA8RXh0cmFjdGVkRGF0YT5bVF1cbiAgKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgICBjb25zdCByZWxlYXNlID0gYXdhaXQgdGhpcy5jYWxsYmFja011dGV4LmFjcXVpcmUoKTtcbiAgICBjb25zdCBjYWxsYmFja01hcCA9IHRoaXMuY2FsbGJhY2tzW3R5cGVdO1xuICAgIGNvbnN0IGlkID0gdXVpZHY0KCk7XG4gICAgY2FsbGJhY2tNYXAuc2V0KGlkLCBjYWxsYmFjayk7XG4gICAgcmVsZWFzZSgpO1xuICAgIHJldHVybiBpZDtcbiAgfTtcblxuICAvKipcbiAgICogdW5ob29rIGEgY2FsbGJhY2sgb24gYSB0eXBlXG4gICAqIHJldHVybnMgZmFsc2UgaWYgdGhlcmUgaXMgbm8gcmVnaXN0ZXJlZCBjYWxsYmFjayB3aXRoIHRoZSBpZFxuICAgKiBAcGFyYW0gdHlwZVxuICAgKiBAcGFyYW0gaWRcbiAgICogQHJldHVybnMgc3VjY2VzcyBzdGF0dXNcbiAgICovXG4gIHVuaG9vayA9IGFzeW5jICh0eXBlOiBDYWxsYmFja1R5cGUsIGlkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBjb25zdCByZWxlYXNlID0gYXdhaXQgdGhpcy5jYWxsYmFja011dGV4LmFjcXVpcmUoKTtcbiAgICBjb25zdCBjYWxsYmFja01hcCA9IHRoaXMuY2FsbGJhY2tzW3R5cGVdO1xuICAgIGlmICghY2FsbGJhY2tNYXAuaGFzKGlkKSkge1xuICAgICAgdGhpcy5sb2dnZXIud2FybihcbiAgICAgICAgYENhbGxiYWNrIHdpdGggSWQgWyR7aWR9XSBpcyBub3QgcmVnaXN0ZXJlZCBmb3IgdHlwZSBbJHt0eXBlfV0uYFxuICAgICAgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY2FsbGJhY2tNYXAuZGVsZXRlKGlkKTtcbiAgICByZWxlYXNlKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgLyoqXG4gICAqIHRyaWdnZXIgYWxsIGNhbGxiYWNrcyByZWdpc3RlcmVkIG9uIGEgc3BlY2lmaWMgdHlwZSB3aXRoIHRoZSBwcm92aWRlZCBkYXRhXG4gICAqIEBwYXJhbSB0eXBlXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqL1xuICBwcm90ZWN0ZWQgdHJpZ2dlckNhbGxiYWNrczxUIGV4dGVuZHMgQ2FsbGJhY2tUeXBlPihcbiAgICB0eXBlOiBULFxuICAgIGRhdGE6IENhbGxiYWNrRGF0YU1hcDxFeHRyYWN0ZWREYXRhPltUXVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjYWxsYmFja01hcCA9IHRoaXMuY2FsbGJhY2tzW3R5cGVdO1xuICAgIGNhbGxiYWNrTWFwLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG4gICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBleHRyYWN0IGJveCBkYXRhIHRvIHByb3BlciBmb3JtYXQgKG5vdCBpbmNsdWRpbmcgc3BlbmRpbmcgaW5mb3JtYXRpb24pXG4gICAqIEBwYXJhbSBib3hcbiAgICogQHBhcmFtIGlucHV0RXh0ZW5zaW9ucyBhbGwgaW5wdXQgYm94IGV4dGVuc2lvbnMgaW4gdHJhbnNhY3Rpb25cbiAgICogQHJldHVybiBleHRyYWN0ZWQgZGF0YSBpbiBwcm9wZXIgZm9ybWF0XG4gICAqL1xuICBhYnN0cmFjdCBleHRyYWN0Qm94RGF0YTogKFxuICAgIGJveDogT3V0cHV0Qm94LFxuICAgIGlucHV0RXh0ZW5zaW9uczogSW5wdXRFeHRlbnNpb25bXSxcbiAgICB0eEV4dHJhPzogVHhFeHRyYVxuICApID0+IEV4dHJhY3RlZERhdGEgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIGNoZWNrIHByb3BlciBkYXRhIGZvcm1hdCBpbiB0aGUgYm94XG4gICAqIEBwYXJhbSBib3hcbiAgICogQHJldHVybiB0cnVlIGlmIHRoZSBib3ggaGFzIHRoZSByZXF1aXJlZCBkYXRhIGFuZCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGFic3RyYWN0IGhhc0RhdGE6IChib3g6IE91dHB1dEJveCkgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogY3JlYXRlIHNwZW5kIGluZm8gYXJyYXkgZm9yIHRoZSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gdHhcbiAgICogQHJldHVybnMgc3BlbmQgaW5mbyBhcnJheSBvZiB0aGUgdHJhbnNhY3Rpb25cbiAgICovXG4gIGdldFRyYW5zYWN0aW9uU3BlbmRJbmZvID0gKHR4OiBUcmFuc2FjdGlvbikgPT4ge1xuICAgIGxldCBib3hJbmRleCA9IDE7XG4gICAgY29uc3Qgc3BlbmRJbmZvQXJyYXkgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGlucHV0IG9mIHR4LmlucHV0cykge1xuICAgICAgc3BlbmRJbmZvQXJyYXkucHVzaCh7IHR4SWQ6IHR4LmlkLCBib3hJZDogaW5wdXQuYm94SWQsIGluZGV4OiBib3hJbmRleCB9KTtcbiAgICAgIGJveEluZGV4ICs9IDE7XG4gICAgfVxuICAgIHJldHVybiBzcGVuZEluZm9BcnJheTtcbiAgfTtcblxuICAvKipcbiAgICogZXh0cmFjdCB0cmFuc2FjdGlvbiBleHRyYSBpbmZvcm1hdGlvblxuICAgKiBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIGlmIHRoZXJlIGlzIGV4dHJhIG5lZWRlZCBpbmZvcm1hdGlvblxuICAgKiBAcGFyYW0gdHhcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldFRyYW5zYWN0aW9uRXh0cmFEYXRhID0gKFxuICAgIHR4OiBUcmFuc2FjdGlvbiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICApOiBUeEV4dHJhID0+IHtcbiAgICByZXR1cm4ge307XG4gIH07XG5cbiAgLyoqXG4gICAqIHByb2Nlc3MgYSBsaXN0IG9mIHRyYW5zYWN0aW9ucyBpbiBhIGJsb2NrIGFuZCBzdG9yZSByZXF1aXJlZCBpbmZvcm1hdGlvblxuICAgKiBAcGFyYW0gdHhzIGxpc3Qgb2YgdHJhbnNhY3Rpb25zIGluIHRoZSBibG9ja1xuICAgKiBAcGFyYW0gYmxvY2tcbiAgICogQHJldHVybiB0cnVlIGlmIHRoZSBwcm9jZXNzIGlzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgYW5kIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcHJvY2Vzc1RyYW5zYWN0aW9ucyA9IGFzeW5jIChcbiAgICB0eHM6IFRyYW5zYWN0aW9uW10sXG4gICAgYmxvY2s6IEJsb2NrSW5mb1xuICApOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYm94ZXM6IEFycmF5PEV4dHJhY3RlZERhdGE+ID0gW107XG4gICAgICBjb25zdCBzcGVudEluZm9zOiBBcnJheTxTcGVuZEluZm8+ID0gW107XG4gICAgICBmb3IgKGNvbnN0IHR4IG9mIHR4cykge1xuICAgICAgICBjb25zdCBpbnB1dEV4dGVuc2lvbnMgPSB0eC5pbnB1dHMubWFwKChpbnB1dCkgPT4gaW5wdXQuZXh0ZW5zaW9uIHx8IHt9KTtcbiAgICAgICAgZm9yIChjb25zdCBvdXRwdXQgb2YgdHgub3V0cHV0cykge1xuICAgICAgICAgIGlmICghdGhpcy5oYXNEYXRhKG91dHB1dCkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgVHJ5aW5nIHRvIGV4dHJhY3QgZGF0YSBmcm9tIGJveCAke291dHB1dC5ib3hJZH1gKTtcbiAgICAgICAgICBjb25zdCBleHRyYWN0ZWREYXRhID0gdGhpcy5leHRyYWN0Qm94RGF0YShcbiAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgICAgIGlucHV0RXh0ZW5zaW9ucyxcbiAgICAgICAgICAgIHRoaXMuZ2V0VHJhbnNhY3Rpb25FeHRyYURhdGEodHgpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZXh0cmFjdGVkRGF0YSkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgICAgIGBFeHRyYWN0ZWQgZGF0YSAke0pzb25CaWdJbnQuc3RyaW5naWZ5KGV4dHJhY3RlZERhdGEpfSBmcm9tIGJveCAke1xuICAgICAgICAgICAgICAgIG91dHB1dC5ib3hJZFxuICAgICAgICAgICAgICB9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJveGVzLnB1c2goZXh0cmFjdGVkRGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNwZW50SW5mb3MucHVzaCguLi50aGlzLmdldFRyYW5zYWN0aW9uU3BlbmRJbmZvKHR4KSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChib3hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmICghKGF3YWl0IHRoaXMuYWN0aW9ucy5zdG9yZUJveGVzKGJveGVzLCBibG9jaywgdGhpcy5nZXRJZCgpKSkpIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFxuICAgICAgICAgICAgYERhdGEgaW5zZXJ0aW9uIGZhaWxlZCBmb3IgJHt0aGlzLmdldElkKCl9IGF0IHRoZSBibG9jayAke1xuICAgICAgICAgICAgICBibG9jay5oZWlnaHRcbiAgICAgICAgICAgIH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50cmlnZ2VyQ2FsbGJhY2tzKENhbGxiYWNrVHlwZS5JbnNlcnQsIGJveGVzKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNwZW50RGF0YSA9IGF3YWl0IHRoaXMuYWN0aW9ucy5zcGVuZEJveGVzKFxuICAgICAgICBzcGVudEluZm9zLFxuICAgICAgICBibG9jayxcbiAgICAgICAgdGhpcy5nZXRJZCgpXG4gICAgICApO1xuICAgICAgaWYgKHNwZW50RGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlckNhbGxiYWNrcyhDYWxsYmFja1R5cGUuU3BlbmQsIHNwZW50RGF0YSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXG4gICAgICAgIGBQcm9jZXNzaW5nIHRyYW5zYWN0aW9ucyBmYWlsZWQgZm9yICR7dGhpcy5nZXRJZCgpfSBhdCB0aGUgYmxvY2sgJHtcbiAgICAgICAgICBibG9jay5oZWlnaHRcbiAgICAgICAgfSB3aXRoIGVycm9yOiAke2V9YFxuICAgICAgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgLyoqXG4gICAqIGZvcmsgb25lIGJsb2NrIGFuZCByZW1vdmUgYWxsIHN0b3JlZCBpbmZvcm1hdGlvbiBmb3IgdGhpcyBibG9ja1xuICAgKiBAcGFyYW0gaGFzaCBibG9jayBoYXNoXG4gICAqL1xuICBmb3JrQmxvY2sgPSBhc3luYyAoaGFzaDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5hY3Rpb25zLmRlbGV0ZUJsb2NrQm94ZXMoaGFzaCwgdGhpcy5nZXRJZCgpKTtcbiAgICBpZiAocmVzdWx0LmRlbGV0ZWREYXRhLmxlbmd0aCA+IDApXG4gICAgICB0aGlzLnRyaWdnZXJDYWxsYmFja3MoQ2FsbGJhY2tUeXBlLkRlbGV0ZSwgcmVzdWx0LmRlbGV0ZWREYXRhKTtcbiAgICBpZiAocmVzdWx0LnVwZGF0ZWREYXRhLmxlbmd0aCA+IDApXG4gICAgICB0aGlzLnRyaWdnZXJDYWxsYmFja3MoQ2FsbGJhY2tUeXBlLlVwZGF0ZSwgcmVzdWx0LnVwZGF0ZWREYXRhKTtcbiAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,87 @@
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[], block: BlockInfo, extractor: string) => Array<Omit<ExtractorEntity, 'id'>>;
16
+ /**
17
+ * convert the database entity back to raw data
18
+ */
19
+ protected convertEntityToData: (entities: ExtractorEntity[]) => ExtractedData[];
20
+ /**
21
+ * insert entities extracted from a block to database
22
+ * @param queryRunner
23
+ * @param boxesToInsert
24
+ * @param block
25
+ * @param extractor
26
+ */
27
+ protected insertEntities: (queryRunner: QueryRunner, boxesToInsert: Array<ExtractedData>, block: BlockInfo, extractor: string) => Promise<void>;
28
+ /**
29
+ * update entities related to a box
30
+ * @param queryRunner
31
+ * @param updateBox
32
+ * @param block
33
+ * @param extractor
34
+ */
35
+ protected updateEntity: (queryRunner: QueryRunner, updateBox: ExtractedData, block: BlockInfo, extractor: string) => Promise<void>;
36
+ /**
37
+ * delete all data extracted from a block
38
+ * @param queryRunner
39
+ * @param extractor
40
+ * @param block
41
+ * @returns
42
+ */
43
+ protected deleteBlockEntities: (queryRunner: QueryRunner, extractor: string, block: string) => Promise<ExtractedData[]>;
44
+ /**
45
+ * delete all data extracted from a block
46
+ * @param queryRunner
47
+ * @param extractor
48
+ * @param block
49
+ * @returns
50
+ */
51
+ protected updateBlockEntities: (queryRunner: QueryRunner, extractor: string, block: string) => Promise<ExtractorEntity[]>;
52
+ /**
53
+ * insert all extracted box data in an atomic transaction
54
+ * update the data if a box with the same id is already stored in db
55
+ * @param boxes
56
+ * @param block
57
+ * @param extractor
58
+ * @return inserted items and updated box ids
59
+ * returns undefined in case of any problem
60
+ */
61
+ storeBoxes: (boxes: Array<ExtractedData>, block: BlockInfo, extractor: string) => Promise<boolean>;
62
+ /**
63
+ * update spending information of stored boxes
64
+ * chunk spendInfos to prevent large database queries
65
+ * Note: It only updates the spendHeight and spendBlock fields. If updating
66
+ * anything else is required, override this implementation to include the
67
+ * additional fields.
68
+ * @param spendInfos
69
+ * @param block
70
+ * @param extractor
71
+ * @returns spent box ids
72
+ */
73
+ spendBoxes: (spendInfos: Array<SpendInfo>, block: BlockInfo, extractor: string) => Promise<BoxInfo[]>;
74
+ /**
75
+ * delete extracted data from a specific block
76
+ * if a box is spend in this block mark it as unspent
77
+ * if a box is created in this block remove it from database
78
+ * @param block
79
+ * @param extractor
80
+ * @return deleted items and updated box ids
81
+ */
82
+ deleteBlockBoxes: (block: string, extractor: string) => Promise<{
83
+ deletedData: ExtractedData[];
84
+ updatedData: BoxInfo[];
85
+ }>;
86
+ }
87
+ //# 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,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,SACd,aAAa,EAAE,SACd,SAAS,aACL,MAAM,KAChB,MAAM,KAAK,eAAe,EAAE,IAAI,CAAC,CAAC,CAInC;IAEF;;OAEG;IACH,SAAS,CAAC,mBAAmB,aACjB,eAAe,EAAE,KAC1B,aAAa,EAAE,CAIhB;IAEF;;;;;;OAMG;IACH,SAAS,CAAC,cAAc,gBACT,WAAW,iBACT,MAAM,aAAa,CAAC,SAC5B,SAAS,aACL,MAAM,mBAMjB;IAEF;;;;;;OAMG;IACH,SAAS,CAAC,YAAY,gBACP,WAAW,aACb,aAAa,SACjB,SAAS,aACL,MAAM,mBAWjB;IAEF;;;;;;OAMG;IACH,SAAS,CAAC,mBAAmB,gBACd,WAAW,aACb,MAAM,SACV,MAAM,KACZ,QAAQ,aAAa,EAAE,CAAC,CAazB;IAEF;;;;;;OAMG;IACH,SAAS,CAAC,mBAAmB,gBACd,WAAW,aACb,MAAM,SACV,MAAM,KACZ,QAAQ,eAAe,EAAE,CAAC,CAsB3B;IAEF;;;;;;;;OAQG;IACH,UAAU,UACD,MAAM,aAAa,CAAC,SACpB,SAAS,aACL,MAAM,KAChB,QAAQ,OAAO,CAAC,CA6CjB;IAEF;;;;;;;;;;OAUG;IACH,UAAU,eACI,MAAM,SAAS,CAAC,SACrB,SAAS,aACL,MAAM,KAChB,QAAQ,OAAO,EAAE,CAAC,CA8BnB;IAEF;;;;;;;OAOG;IACH,gBAAgB,UACP,MAAM,aACF,MAAM,KAChB,QAAQ;QAAE,WAAW,EAAE,aAAa,EAAE,CAAC;QAAC,WAAW,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC,CAiClE;CACH"}
@@ -0,0 +1,222 @@
1
+ import { In, Not, } from '@rosen-bridge/extended-typeorm';
2
+ import { chunk, difference, pick } from 'lodash-es';
3
+ import { DummyLogger } from '@rosen-bridge/abstract-logger';
4
+ import JsonBigInt from '@rosen-bridge/json-bigint';
5
+ import { DB_CHUNK_SIZE } from '../constants';
6
+ export class AbstractErgoExtractorAction {
7
+ datasource;
8
+ logger;
9
+ repository;
10
+ repo;
11
+ constructor(dataSource, repo, logger) {
12
+ this.datasource = dataSource;
13
+ this.logger = logger ? logger : new DummyLogger();
14
+ this.repository = this.datasource.getRepository(repo);
15
+ this.repo = repo;
16
+ }
17
+ /**
18
+ * create the database entity from extracted data and block information
19
+ */
20
+ createEntity = (data, // eslint-disable-line @typescript-eslint/no-unused-vars
21
+ block, // eslint-disable-line @typescript-eslint/no-unused-vars
22
+ extractor) => {
23
+ throw Error('You must implement `createEntity` or override `insertEntities` and `updateEntities`');
24
+ };
25
+ /**
26
+ * convert the database entity back to raw data
27
+ */
28
+ convertEntityToData = (entities) => {
29
+ throw Error('You must implement `convertEntityToData` or override `deleteBlockEntities`');
30
+ };
31
+ /**
32
+ * insert entities extracted from a block to database
33
+ * @param queryRunner
34
+ * @param boxesToInsert
35
+ * @param block
36
+ * @param extractor
37
+ */
38
+ insertEntities = async (queryRunner, boxesToInsert, block, extractor) => {
39
+ const repository = queryRunner.manager.getRepository(this.repo);
40
+ await repository.insert(this.createEntity(boxesToInsert, block, extractor));
41
+ };
42
+ /**
43
+ * update entities related to a box
44
+ * @param queryRunner
45
+ * @param updateBox
46
+ * @param block
47
+ * @param extractor
48
+ */
49
+ updateEntity = async (queryRunner, updateBox, // eslint-disable-line @typescript-eslint/no-unused-vars
50
+ block, // eslint-disable-line @typescript-eslint/no-unused-vars
51
+ extractor) => {
52
+ const repository = queryRunner.manager.getRepository(this.repo);
53
+ const box = this.createEntity([updateBox], block, extractor)[0];
54
+ await repository.update({
55
+ boxId: box.boxId,
56
+ extractor: extractor,
57
+ }, box);
58
+ };
59
+ /**
60
+ * delete all data extracted from a block
61
+ * @param queryRunner
62
+ * @param extractor
63
+ * @param block
64
+ * @returns
65
+ */
66
+ deleteBlockEntities = async (queryRunner, extractor, block) => {
67
+ const repository = queryRunner.manager.getRepository(this.repo);
68
+ const deletedData = await repository.find({
69
+ where: {
70
+ extractor: extractor,
71
+ block: block,
72
+ },
73
+ });
74
+ await repository.delete({
75
+ extractor: extractor,
76
+ block: block,
77
+ });
78
+ return this.convertEntityToData(deletedData);
79
+ };
80
+ /**
81
+ * delete all data extracted from a block
82
+ * @param queryRunner
83
+ * @param extractor
84
+ * @param block
85
+ * @returns
86
+ */
87
+ updateBlockEntities = async (queryRunner, // eslint-disable-line @typescript-eslint/no-unused-vars
88
+ extractor, block) => {
89
+ const repository = this.datasource.getRepository(this.repo);
90
+ const updatedData = await repository.find({
91
+ where: {
92
+ extractor: extractor,
93
+ spendBlock: block,
94
+ block: Not(block),
95
+ },
96
+ });
97
+ await repository.update({
98
+ spendBlock: block,
99
+ extractor: extractor,
100
+ }, {
101
+ spendBlock: null,
102
+ spendHeight: 0,
103
+ });
104
+ return updatedData;
105
+ };
106
+ /**
107
+ * insert all extracted box data in an atomic transaction
108
+ * update the data if a box with the same id is already stored in db
109
+ * @param boxes
110
+ * @param block
111
+ * @param extractor
112
+ * @return inserted items and updated box ids
113
+ * returns undefined in case of any problem
114
+ */
115
+ storeBoxes = async (boxes, block, extractor) => {
116
+ let boxesToInsert = [], boxesToUpdate = [];
117
+ const queryRunner = this.datasource.createQueryRunner();
118
+ await queryRunner.connect();
119
+ await queryRunner.startTransaction();
120
+ try {
121
+ const repository = queryRunner.manager.getRepository(this.repo);
122
+ const dbBoxIds = (await repository.findBy({
123
+ boxId: In(boxes.map((item) => item.boxId)),
124
+ extractor: extractor,
125
+ })).map((box) => box.boxId);
126
+ if (dbBoxIds.length > 0)
127
+ this.logger.debug(`Found stored boxes with same boxId`, dbBoxIds);
128
+ boxesToUpdate = boxes.filter((box) => dbBoxIds.includes(box.boxId));
129
+ boxesToInsert = difference(boxes, boxesToUpdate);
130
+ if (boxesToInsert.length > 0) {
131
+ this.logger.debug(`Inserting boxes`);
132
+ await this.insertEntities(queryRunner, boxesToInsert, block, extractor);
133
+ }
134
+ if (boxesToUpdate.length > 0)
135
+ this.logger.info(`Updating boxes with following Ids in the database: [${boxesToUpdate
136
+ .map((col) => col.boxId)
137
+ .join(', ')}]`);
138
+ for (const box of boxesToUpdate) {
139
+ this.logger.debug(`Updating boxes in database [${JsonBigInt.stringify(box)}]`);
140
+ await this.updateEntity(queryRunner, box, block, extractor);
141
+ }
142
+ await queryRunner.commitTransaction();
143
+ return true;
144
+ }
145
+ catch (e) {
146
+ this.logger.error(`An error occurred during store boxes action: ${e}`);
147
+ await queryRunner.rollbackTransaction();
148
+ return false;
149
+ }
150
+ finally {
151
+ await queryRunner.release();
152
+ }
153
+ };
154
+ /**
155
+ * update spending information of stored boxes
156
+ * chunk spendInfos to prevent large database queries
157
+ * Note: It only updates the spendHeight and spendBlock fields. If updating
158
+ * anything else is required, override this implementation to include the
159
+ * additional fields.
160
+ * @param spendInfos
161
+ * @param block
162
+ * @param extractor
163
+ * @returns spent box ids
164
+ */
165
+ spendBoxes = async (spendInfos, block, extractor) => {
166
+ const spentData = [];
167
+ const spendInfoChunks = chunk(spendInfos, DB_CHUNK_SIZE);
168
+ for (const spendInfoChunk of spendInfoChunks) {
169
+ const boxIds = spendInfoChunk.map((info) => info.boxId);
170
+ const updateResult = await this.repository.update({
171
+ boxId: In(boxIds),
172
+ extractor: extractor,
173
+ }, {
174
+ spendBlock: block.hash,
175
+ spendHeight: block.height,
176
+ });
177
+ if (updateResult.affected && updateResult.affected > 0) {
178
+ const spentRows = await this.repository.findBy({
179
+ boxId: In(boxIds),
180
+ spendBlock: block.hash,
181
+ });
182
+ spentData.push(...spentRows);
183
+ for (const row of spentRows) {
184
+ this.logger.debug(`Spent box with boxId [${row.boxId}] at height ${block.height}`);
185
+ }
186
+ }
187
+ }
188
+ return spentData.map((data) => pick(data, 'boxId'));
189
+ };
190
+ /**
191
+ * delete extracted data from a specific block
192
+ * if a box is spend in this block mark it as unspent
193
+ * if a box is created in this block remove it from database
194
+ * @param block
195
+ * @param extractor
196
+ * @return deleted items and updated box ids
197
+ */
198
+ deleteBlockBoxes = async (block, extractor) => {
199
+ const queryRunner = this.datasource.createQueryRunner();
200
+ await queryRunner.connect();
201
+ await queryRunner.startTransaction();
202
+ try {
203
+ this.logger.info(`Deleting boxes in block ${block} and extractor ${extractor}`);
204
+ const updatedData = await this.updateBlockEntities(queryRunner, extractor, block);
205
+ const deletedData = await this.deleteBlockEntities(queryRunner, extractor, block);
206
+ await queryRunner.commitTransaction();
207
+ return {
208
+ deletedData,
209
+ updatedData: updatedData.map((data) => pick(data, 'boxId')),
210
+ };
211
+ }
212
+ catch (error) {
213
+ await queryRunner.rollbackTransaction();
214
+ this.logger.error(`An error occurred while deleting data extracted from block ${block}`, error);
215
+ throw error;
216
+ }
217
+ finally {
218
+ await queryRunner.release();
219
+ }
220
+ };
221
+ }
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RFcmdvRXh0cmFjdG9yQWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2VyZ28vQWJzdHJhY3RFcmdvRXh0cmFjdG9yQWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxFQUFFLEVBRUYsR0FBRyxHQUlKLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BELE9BQU8sRUFBa0IsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUUsT0FBTyxVQUFVLE1BQU0sMkJBQTJCLENBQUM7QUFJbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUc3QyxNQUFNLE9BQWdCLDJCQUEyQjtJQUk5QixVQUFVLENBQWE7SUFDL0IsTUFBTSxDQUFpQjtJQUNiLFVBQVUsQ0FBOEI7SUFDbkQsSUFBSSxDQUFnQztJQUU1QyxZQUNFLFVBQXNCLEVBQ3RCLElBQW1DLEVBQ25DLE1BQXVCO1FBRXZCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBVyxFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQ7O09BRUc7SUFDTyxZQUFZLEdBQUcsQ0FDdkIsSUFBcUIsRUFBRSx3REFBd0Q7SUFDL0UsS0FBZ0IsRUFBRSx3REFBd0Q7SUFDMUUsU0FBaUIsRUFDbUIsRUFBRTtRQUN0QyxNQUFNLEtBQUssQ0FDVCxxRkFBcUYsQ0FDdEYsQ0FBQztJQUNKLENB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QU8sRUFBRSxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDLENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERhdGFTb3VyY2UsXG4gIEluLFxuICBSZXBvc2l0b3J5LFxuICBOb3QsXG4gIEVudGl0eVRhcmdldCxcbiAgRmluZE9wdGlvbnNXaGVyZSxcbiAgUXVlcnlSdW5uZXIsXG59IGZyb20gJ0Byb3Nlbi1icmlkZ2UvZXh0ZW5kZWQtdHlwZW9ybSc7XG5pbXBvcnQgeyBjaHVuaywgZGlmZmVyZW5jZSwgcGljayB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBBYnN0cmFjdExvZ2dlciwgRHVtbXlMb2dnZXIgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LWxvZ2dlcic7XG5pbXBvcnQgSnNvbkJpZ0ludCBmcm9tICdAcm9zZW4tYnJpZGdlL2pzb24tYmlnaW50JztcbmltcG9ydCB7IEJsb2NrSW5mbyB9IGZyb20gJ0Byb3Nlbi1icmlkZ2Uvc2Nhbm5lci1pbnRlcmZhY2VzJztcblxuaW1wb3J0IHsgQWJzdHJhY3RCb3hEYXRhLCBCb3hJbmZvLCBTcGVuZEluZm8gfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgREJfQ0hVTktfU0laRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBYnN0cmFjdEVyZ29FeHRyYWN0b3JFbnRpdHkgfSBmcm9tICcuL0Fic3RyYWN0RXJnb0V4dHJhY3RvckVudGl0eSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdEVyZ29FeHRyYWN0b3JBY3Rpb248XG4gIEV4dHJhY3RlZERhdGEgZXh0ZW5kcyBBYnN0cmFjdEJveERhdGEsXG4gIEV4dHJhY3RvckVudGl0eSBleHRlbmRzIEFic3RyYWN0RXJnb0V4dHJhY3RvckVudGl0eSxcbj4ge1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGFzb3VyY2U6IERhdGFTb3VyY2U7XG4gIHJlYWRvbmx5IGxvZ2dlcjogQWJzdHJhY3RMb2dnZXI7XG4gIHByb3RlY3RlZCByZWFkb25seSByZXBvc2l0b3J5OiBSZXBvc2l0b3J5PEV4dHJhY3RvckVudGl0eT47XG4gIHByaXZhdGUgcmVwbzogRW50aXR5VGFyZ2V0PEV4dHJhY3RvckVudGl0eT47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZGF0YVNvdXJjZTogRGF0YVNvdXJjZSxcbiAgICByZXBvOiBFbnRpdHlUYXJnZXQ8RXh0cmFjdG9yRW50aXR5PixcbiAgICBsb2dnZXI/OiBBYnN0cmFjdExvZ2dlcixcbiAgKSB7XG4gICAgdGhpcy5kYXRhc291cmNlID0gZGF0YVNvdXJjZTtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlciA/IGxvZ2dlciA6IG5ldyBEdW1teUxvZ2dlcigpO1xuICAgIHRoaXMucmVwb3NpdG9yeSA9IHRoaXMuZGF0YXNvdXJjZS5nZXRSZXBvc2l0b3J5KHJlcG8pO1xuICAgIHRoaXMucmVwbyA9IHJlcG87XG4gIH1cblxuICAvKipcbiAgICogY3JlYXRlIHRoZSBkYXRhYmFzZSBlbnRpdHkgZnJvbSBleHRyYWN0ZWQgZGF0YSBhbmQgYmxvY2sgaW5mb3JtYXRpb25cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVFbnRpdHkgPSAoXG4gICAgZGF0YTogRXh0cmFjdGVkRGF0YVtdLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGJsb2NrOiBCbG9ja0luZm8sIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZXh0cmFjdG9yOiBzdHJpbmcsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICk6IEFycmF5PE9taXQ8RXh0cmFjdG9yRW50aXR5LCAnaWQnPj4gPT4ge1xuICAgIHRocm93IEVycm9yKFxuICAgICAgJ1lvdSBtdXN0IGltcGxlbWVudCBgY3JlYXRlRW50aXR5YCBvciBvdmVycmlkZSBgaW5zZXJ0RW50aXRpZXNgIGFuZCBgdXBkYXRlRW50aXRpZXNgJyxcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBjb252ZXJ0IHRoZSBkYXRhYmFzZSBlbnRpdHkgYmFjayB0byByYXcgZGF0YVxuICAgKi9cbiAgcHJvdGVjdGVkIGNvbnZlcnRFbnRpdHlUb0RhdGEgPSAoXG4gICAgZW50aXRpZXM6IEV4dHJhY3RvckVudGl0eVtdLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICApOiBFeHRyYWN0ZWREYXRhW10gPT4ge1xuICAgIHRocm93IEVycm9yKFxuICAgICAgJ1lvdSBtdXN0IGltcGxlbWVudCBgY29udmVydEVudGl0eVRvRGF0YWAgb3Igb3ZlcnJpZGUgYGRlbGV0ZUJsb2NrRW50aXRpZXNgJyxcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBpbnNlcnQgZW50aXRpZXMgZXh0cmFjdGVkIGZyb20gYSBibG9jayB0byBkYXRhYmFzZVxuICAgKiBAcGFyYW0gcXVlcnlSdW5uZXJcbiAgICogQHBhcmFtIGJveGVzVG9JbnNlcnRcbiAgICogQHBhcmFtIGJsb2NrXG4gICAqIEBwYXJhbSBleHRyYWN0b3JcbiAgICovXG4gIHByb3RlY3RlZCBpbnNlcnRFbnRpdGllcyA9IGFzeW5jIChcbiAgICBxdWVyeVJ1bm5lcjogUXVlcnlSdW5uZXIsXG4gICAgYm94ZXNUb0luc2VydDogQXJyYXk8RXh0cmFjdGVkRGF0YT4sXG4gICAgYmxvY2s6IEJsb2NrSW5mbyxcbiAgICBleHRyYWN0b3I6IHN0cmluZyxcbiAgKSA9PiB7XG4gICAgY29uc3QgcmVwb3NpdG9yeSA9IHF1ZXJ5UnVubmVyLm1hbmFnZXIuZ2V0UmVwb3NpdG9yeSh0aGlzLnJlcG8pO1xuICAgIGF3YWl0IHJlcG9zaXRvcnkuaW5zZXJ0KFxuICAgICAgdGhpcy5jcmVhdGVFbnRpdHkoYm94ZXNUb0luc2VydCwgYmxvY2ssIGV4dHJhY3RvcikgYXMgYW55LCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiB1cGRhdGUgZW50aXRpZXMgcmVsYXRlZCB0byBhIGJveFxuICAgKiBAcGFyYW0gcXVlcnlSdW5uZXJcbiAgICogQHBhcmFtIHVwZGF0ZUJveFxuICAgKiBAcGFyYW0gYmxvY2tcbiAgICogQHBhcmFtIGV4dHJhY3RvclxuICAgKi9cbiAgcHJvdGVjdGVkIHVwZGF0ZUVudGl0eSA9IGFzeW5jIChcbiAgICBxdWVyeVJ1bm5lcjogUXVlcnlSdW5uZXIsXG4gICAgdXBkYXRlQm94OiBFeHRyYWN0ZWREYXRhLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGJsb2NrOiBCbG9ja0luZm8sIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZXh0cmFjdG9yOiBzdHJpbmcsXG4gICkgPT4ge1xuICAgIGNvbnN0IHJlcG9zaXRvcnkgPSBxdWVyeVJ1bm5lci5tYW5hZ2VyLmdldFJlcG9zaXRvcnkodGhpcy5yZXBvKTtcbiAgICBjb25zdCBib3ggPSB0aGlzLmNyZWF0ZUVudGl0eShbdXBkYXRlQm94XSwgYmxvY2ssIGV4dHJhY3RvcilbMF07XG4gICAgYXdhaXQgcmVwb3NpdG9yeS51cGRhdGUoXG4gICAgICB7XG4gICAgICAgIGJveElkOiBib3guYm94SWQsXG4gICAgICAgIGV4dHJhY3RvcjogZXh0cmFjdG9yLFxuICAgICAgfSBhcyBGaW5kT3B0aW9uc1doZXJlPEV4dHJhY3RvckVudGl0eT4sXG4gICAgICBib3ggYXMgYW55LCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICApO1xuICB9O1xuXG4gIC8qKlxuICAgKiBkZWxldGUgYWxsIGRhdGEgZXh0cmFjdGVkIGZyb20gYSBibG9ja1xuICAgKiBAcGFyYW0gcXVlcnlSdW5uZXJcbiAgICogQHBhcmFtIGV4dHJhY3RvclxuICAgKiBAcGFyYW0gYmxvY2tcbiAgICogQHJldHVybnNcbiAgICovXG4gIHByb3RlY3RlZCBkZWxldGVCbG9ja0VudGl0aWVzID0gYXN5bmMgKFxuICAgIHF1ZXJ5UnVubmVyOiBRdWVyeVJ1bm5lcixcbiAgICBleHRyYWN0b3I6IHN0cmluZyxcbiAgICBibG9jazogc3RyaW5nLFxuICApOiBQcm9taXNlPEV4dHJhY3RlZERhdGFbXT4gPT4ge1xuICAgIGNvbnN0IHJlcG9zaXRvcnkgPSBxdWVyeVJ1bm5lci5tYW5hZ2VyLmdldFJlcG9zaXRvcnkodGhpcy5yZXBvKTtcbiAgICBjb25zdCBkZWxldGVkRGF0YSA9IGF3YWl0IHJlcG9zaXRvcnkuZmluZCh7XG4gICAgICB3aGVyZToge1xuICAgICAgICBleHRyYWN0b3I6IGV4dHJhY3RvcixcbiAgICAgICAgYmxvY2s6IGJsb2NrLFxuICAgICAgfSBhcyBGaW5kT3B0aW9uc1doZXJlPEV4dHJhY3RvckVudGl0eT4sXG4gICAgfSk7XG4gICAgYXdhaXQgcmVwb3NpdG9yeS5kZWxldGUoe1xuICAgICAgZXh0cmFjdG9yOiBleHRyYWN0b3IsXG4gICAgICBibG9jazogYmxvY2ssXG4gICAgfSBhcyB1bmtub3duIGFzIEZpbmRPcHRpb25zV2hlcmU8RXh0cmFjdG9yRW50aXR5Pik7XG4gICAgcmV0dXJuIHRoaXMuY29udmVydEVudGl0eVRvRGF0YShkZWxldGVkRGF0YSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIGRlbGV0ZSBhbGwgZGF0YSBleHRyYWN0ZWQgZnJvbSBhIGJsb2NrXG4gICAqIEBwYXJhbSBxdWVyeVJ1bm5lclxuICAgKiBAcGFyYW0gZXh0cmFjdG9yXG4gICAqIEBwYXJhbSBibG9ja1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHJvdGVjdGVkIHVwZGF0ZUJsb2NrRW50aXRpZXMgPSBhc3luYyAoXG4gICAgcXVlcnlSdW5uZXI6IFF1ZXJ5UnVubmVyLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIGV4dHJhY3Rvcjogc3RyaW5nLFxuICAgIGJsb2NrOiBzdHJpbmcsXG4gICk6IFByb21pc2U8RXh0cmFjdG9yRW50aXR5W10+ID0+IHtcbiAgICBjb25zdCByZXBvc2l0b3J5ID0gdGhpcy5kYXRhc291cmNlLmdldFJlcG9zaXRvcnkoXG4gICAgICB0aGlzLnJlcG8gYXMgRW50aXR5VGFyZ2V0PG5ldyAoKSA9PiBFeHRyYWN0b3JFbnRpdHk+LFxuICAgICk7XG4gICAgY29uc3QgdXBkYXRlZERhdGEgPSBhd2FpdCByZXBvc2l0b3J5LmZpbmQoe1xuICAgICAgd2hlcmU6IHtcbiAgICAgICAgZXh0cmFjdG9yOiBleHRyYWN0b3IsXG4gICAgICAgIHNwZW5kQmxvY2s6IGJsb2NrLFxuICAgICAgICBibG9jazogTm90KGJsb2NrKSxcbiAgICAgIH0gYXMgdW5rbm93biBhcyBGaW5kT3B0aW9uc1doZXJlPEV4dHJhY3RvckVudGl0eT4sXG4gICAgfSk7XG4gICAgYXdhaXQgcmVwb3NpdG9yeS51cGRhdGUoXG4gICAgICB7XG4gICAgICAgIHNwZW5kQmxvY2s6IGJsb2NrLFxuICAgICAgICBleHRyYWN0b3I6IGV4dHJhY3RvcixcbiAgICAgIH0gYXMgdW5rbm93biBhcyBGaW5kT3B0aW9uc1doZXJlPEV4dHJhY3RvckVudGl0eT4sXG4gICAgICB7XG4gICAgICAgIHNwZW5kQmxvY2s6IG51bGwsXG4gICAgICAgIHNwZW5kSGVpZ2h0OiAwLFxuICAgICAgfSxcbiAgICApO1xuICAgIHJldHVybiB1cGRhdGVkRGF0YSBhcyB1bmtub3duIGFzIEV4dHJhY3RvckVudGl0eVtdO1xuICB9O1xuXG4gIC8qKlxuICAgKiBpbnNlcnQgYWxsIGV4dHJhY3RlZCBib3ggZGF0YSBpbiBhbiBhdG9taWMgdHJhbnNhY3Rpb25cbiAgICogdXBkYXRlIHRoZSBkYXRhIGlmIGEgYm94IHdpdGggdGhlIHNhbWUgaWQgaXMgYWxyZWFkeSBzdG9yZWQgaW4gZGJcbiAgICogQHBhcmFtIGJveGVzXG4gICAqIEBwYXJhbSBibG9ja1xuICAgKiBAcGFyYW0gZXh0cmFjdG9yXG4gICAqIEByZXR1cm4gaW5zZXJ0ZWQgaXRlbXMgYW5kIHVwZGF0ZWQgYm94IGlkc1xuICAgKiByZXR1cm5zIHVuZGVmaW5lZCBpbiBjYXNlIG9mIGFueSBwcm9ibGVtXG4gICAqL1xuICBzdG9yZUJveGVzID0gYXN5bmMgKFxuICAgIGJveGVzOiBBcnJheTxFeHRyYWN0ZWREYXRhPixcbiAgICBibG9jazogQmxvY2tJbmZvLFxuICAgIGV4dHJhY3Rvcjogc3RyaW5nLFxuICApOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBsZXQgYm94ZXNUb0luc2VydDogRXh0cmFjdGVkRGF0YVtdID0gW10sXG4gICAgICBib3hlc1RvVXBkYXRlOiBFeHRyYWN0ZWREYXRhW10gPSBbXTtcbiAgICBjb25zdCBxdWVyeVJ1bm5lciA9IHRoaXMuZGF0YXNvdXJjZS5jcmVhdGVRdWVyeVJ1bm5lcigpO1xuICAgIGF3YWl0IHF1ZXJ5UnVubmVyLmNvbm5lY3QoKTtcbiAgICBhd2FpdCBxdWVyeVJ1bm5lci5zdGFydFRyYW5zYWN0aW9uKCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcG9zaXRvcnkgPSBxdWVyeVJ1bm5lci5tYW5hZ2VyLmdldFJlcG9zaXRvcnkodGhpcy5yZXBvKTtcbiAgICAgIGNvbnN0IGRiQm94SWRzID0gKFxuICAgICAgICBhd2FpdCByZXBvc2l0b3J5LmZpbmRCeSh7XG4gICAgICAgICAgYm94SWQ6IEluKGJveGVzLm1hcCgoaXRlbSkgPT4gaXRlbS5ib3hJZCkpLFxuICAgICAgICAgIGV4dHJhY3RvcjogZXh0cmFjdG9yLFxuICAgICAgICB9IGFzIEZpbmRPcHRpb25zV2hlcmU8RXh0cmFjdG9yRW50aXR5PilcbiAgICAgICkubWFwKChib3gpID0+IGJveC5ib3hJZCk7XG4gICAgICBpZiAoZGJCb3hJZHMubGVuZ3RoID4gMClcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYEZvdW5kIHN0b3JlZCBib3hlcyB3aXRoIHNhbWUgYm94SWRgLCBkYkJveElkcyk7XG5cbiAgICAgIGJveGVzVG9VcGRhdGUgPSBib3hlcy5maWx0ZXIoKGJveCkgPT4gZGJCb3hJZHMuaW5jbHVkZXMoYm94LmJveElkKSk7XG4gICAgICBib3hlc1RvSW5zZXJ0ID0gZGlmZmVyZW5jZShib3hlcywgYm94ZXNUb1VwZGF0ZSk7XG5cbiAgICAgIGlmIChib3hlc1RvSW5zZXJ0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYEluc2VydGluZyBib3hlc2ApO1xuICAgICAgICBhd2FpdCB0aGlzLmluc2VydEVudGl0aWVzKHF1ZXJ5UnVubmVyLCBib3hlc1RvSW5zZXJ0LCBibG9jaywgZXh0cmFjdG9yKTtcbiAgICAgIH1cbiAgICAgIGlmIChib3hlc1RvVXBkYXRlLmxlbmd0aCA+IDApXG4gICAgICAgIHRoaXMubG9nZ2VyLmluZm8oXG4gICAgICAgICAgYFVwZGF0aW5nIGJveGVzIHdpdGggZm9sbG93aW5nIElkcyBpbiB0aGUgZGF0YWJhc2U6IFske2JveGVzVG9VcGRhdGVcbiAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gY29sLmJveElkKVxuICAgICAgICAgICAgLmpvaW4oJywgJyl9XWAsXG4gICAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGJveCBvZiBib3hlc1RvVXBkYXRlKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIGBVcGRhdGluZyBib3hlcyBpbiBkYXRhYmFzZSBbJHtKc29uQmlnSW50LnN0cmluZ2lmeShib3gpfV1gLFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUVudGl0eShxdWVyeVJ1bm5lciwgYm94LCBibG9jaywgZXh0cmFjdG9yKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHF1ZXJ5UnVubmVyLmNvbW1pdFRyYW5zYWN0aW9uKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihgQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHN0b3JlIGJveGVzIGFjdGlvbjogJHtlfWApO1xuICAgICAgYXdhaXQgcXVlcnlSdW5uZXIucm9sbGJhY2tUcmFuc2FjdGlvbigpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBxdWVyeVJ1bm5lci5yZWxlYXNlKCk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiB1cGRhdGUgc3BlbmRpbmcgaW5mb3JtYXRpb24gb2Ygc3RvcmVkIGJveGVzXG4gICAqIGNodW5rIHNwZW5kSW5mb3MgdG8gcHJldmVudCBsYXJnZSBkYXRhYmFzZSBxdWVyaWVzXG4gICAqIE5vdGU6IEl0IG9ubHkgdXBkYXRlcyB0aGUgc3BlbmRIZWlnaHQgYW5kIHNwZW5kQmxvY2sgZmllbGRzLiBJZiB1cGRhdGluZ1xuICAgKiBhbnl0aGluZyBlbHNlIGlzIHJlcXVpcmVkLCBvdmVycmlkZSB0aGlzIGltcGxlbWVudGF0aW9uIHRvIGluY2x1ZGUgdGhlXG4gICAqIGFkZGl0aW9uYWwgZmllbGRzLlxuICAgKiBAcGFyYW0gc3BlbmRJbmZvc1xuICAgKiBAcGFyYW0gYmxvY2tcbiAgICogQHBhcmFtIGV4dHJhY3RvclxuICAgKiBAcmV0dXJucyBzcGVudCBib3ggaWRzXG4gICAqL1xuICBzcGVuZEJveGVzID0gYXN5bmMgKFxuICAgIHNwZW5kSW5mb3M6IEFycmF5PFNwZW5kSW5mbz4sXG4gICAgYmxvY2s6IEJsb2NrSW5mbyxcbiAgICBleHRyYWN0b3I6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxCb3hJbmZvW10+ID0+IHtcbiAgICBjb25zdCBzcGVudERhdGEgPSBbXTtcbiAgICBjb25zdCBzcGVuZEluZm9DaHVua3MgPSBjaHVuayhzcGVuZEluZm9zLCBEQl9DSFVOS19TSVpFKTtcbiAgICBmb3IgKGNvbnN0IHNwZW5kSW5mb0NodW5rIG9mIHNwZW5kSW5mb0NodW5rcykge1xuICAgICAgY29uc3QgYm94SWRzID0gc3BlbmRJbmZvQ2h1bmsubWFwKChpbmZvKSA9PiBpbmZvLmJveElkKTtcbiAgICAgIGNvbnN0IHVwZGF0ZVJlc3VsdCA9IGF3YWl0IHRoaXMucmVwb3NpdG9yeS51cGRhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBib3hJZDogSW4oYm94SWRzKSxcbiAgICAgICAgICBleHRyYWN0b3I6IGV4dHJhY3RvcixcbiAgICAgICAgfSBhcyBGaW5kT3B0aW9uc1doZXJlPEV4dHJhY3RvckVudGl0eT4sXG4gICAgICAgIHtcbiAgICAgICAgICBzcGVuZEJsb2NrOiBibG9jay5oYXNoLFxuICAgICAgICAgIHNwZW5kSGVpZ2h0OiBibG9jay5oZWlnaHQsXG4gICAgICAgIH0gYXMgYW55LCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICk7XG5cbiAgICAgIGlmICh1cGRhdGVSZXN1bHQuYWZmZWN0ZWQgJiYgdXBkYXRlUmVzdWx0LmFmZmVjdGVkID4gMCkge1xuICAgICAgICBjb25zdCBzcGVudFJvd3MgPSBhd2FpdCB0aGlzLnJlcG9zaXRvcnkuZmluZEJ5KHtcbiAgICAgICAgICBib3hJZDogSW4oYm94SWRzKSxcbiAgICAgICAgICBzcGVuZEJsb2NrOiBibG9jay5oYXNoLFxuICAgICAgICB9IGFzIEZpbmRPcHRpb25zV2hlcmU8RXh0cmFjdG9yRW50aXR5Pik7XG4gICAgICAgIHNwZW50RGF0YS5wdXNoKC4uLnNwZW50Um93cyk7XG4gICAgICAgIGZvciAoY29uc3Qgcm93IG9mIHNwZW50Um93cykge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYFNwZW50IGJveCB3aXRoIGJveElkIFske3Jvdy5ib3hJZH1dIGF0IGhlaWdodCAke2Jsb2NrLmhlaWdodH1gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNwZW50RGF0YS5tYXAoKGRhdGEpID0+IHBpY2soZGF0YSwgJ2JveElkJykpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBkZWxldGUgZXh0cmFjdGVkIGRhdGEgZnJvbSBhIHNwZWNpZmljIGJsb2NrXG4gICAqIGlmIGEgYm94IGlzIHNwZW5kIGluIHRoaXMgYmxvY2sgbWFyayBpdCBhcyB1bnNwZW50XG4gICAqIGlmIGEgYm94IGlzIGNyZWF0ZWQgaW4gdGhpcyBibG9jayByZW1vdmUgaXQgZnJvbSBkYXRhYmFzZVxuICAgKiBAcGFyYW0gYmxvY2tcbiAgICogQHBhcmFtIGV4dHJhY3RvclxuICAgKiBAcmV0dXJuIGRlbGV0ZWQgaXRlbXMgYW5kIHVwZGF0ZWQgYm94IGlkc1xuICAgKi9cbiAgZGVsZXRlQmxvY2tCb3hlcyA9IGFzeW5jIChcbiAgICBibG9jazogc3RyaW5nLFxuICAgIGV4dHJhY3Rvcjogc3RyaW5nLFxuICApOiBQcm9taXNlPHsgZGVsZXRlZERhdGE6IEV4dHJhY3RlZERhdGFbXTsgdXBkYXRlZERhdGE6IEJveEluZm9bXSB9PiA9PiB7XG4gICAgY29uc3QgcXVlcnlSdW5uZXIgPSB0aGlzLmRhdGFzb3VyY2UuY3JlYXRlUXVlcnlSdW5uZXIoKTtcbiAgICBhd2FpdCBxdWVyeVJ1bm5lci5jb25uZWN0KCk7XG4gICAgYXdhaXQgcXVlcnlSdW5uZXIuc3RhcnRUcmFuc2FjdGlvbigpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgICBgRGVsZXRpbmcgYm94ZXMgaW4gYmxvY2sgJHtibG9ja30gYW5kIGV4dHJhY3RvciAke2V4dHJhY3Rvcn1gLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gYXdhaXQgdGhpcy51cGRhdGVCbG9ja0VudGl0aWVzKFxuICAgICAgICBxdWVyeVJ1bm5lcixcbiAgICAgICAgZXh0cmFjdG9yLFxuICAgICAgICBibG9jayxcbiAgICAgICk7XG4gICAgICBjb25zdCBkZWxldGVkRGF0YSA9IGF3YWl0IHRoaXMuZGVsZXRlQmxvY2tFbnRpdGllcyhcbiAgICAgICAgcXVlcnlSdW5uZXIsXG4gICAgICAgIGV4dHJhY3RvcixcbiAgICAgICAgYmxvY2ssXG4gICAgICApO1xuICAgICAgYXdhaXQgcXVlcnlSdW5uZXIuY29tbWl0VHJhbnNhY3Rpb24oKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlbGV0ZWREYXRhLFxuICAgICAgICB1cGRhdGVkRGF0YTogdXBkYXRlZERhdGEubWFwKChkYXRhKSA9PiBwaWNrKGRhdGEsICdib3hJZCcpKSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGF3YWl0IHF1ZXJ5UnVubmVyLnJvbGxiYWNrVHJhbnNhY3Rpb24oKTtcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICBgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZGVsZXRpbmcgZGF0YSBleHRyYWN0ZWQgZnJvbSBibG9jayAke2Jsb2NrfWAsXG4gICAgICAgIGVycm9yLFxuICAgICAgKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBxdWVyeVJ1bm5lci5yZWxlYXNlKCk7XG4gICAgfVxuICB9O1xufVxuIl19
@@ -0,0 +1,11 @@
1
+ export declare abstract class AbstractErgoExtractorEntity {
2
+ id: number;
3
+ boxId: string;
4
+ block: string;
5
+ height: number;
6
+ spendBlock?: string | null;
7
+ spendHeight?: number | null;
8
+ extractor: string;
9
+ serialized: string;
10
+ }
11
+ //# sourceMappingURL=AbstractErgoExtractorEntity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractErgoExtractorEntity.d.ts","sourceRoot":"","sources":["../../../lib/ergo/AbstractErgoExtractorEntity.ts"],"names":[],"mappings":"AAEA,8BACsB,2BAA2B;IAE/C,EAAE,EAAE,MAAM,CAAC;IAGX,KAAK,EAAE,MAAM,CAAC;IAGd,KAAK,EAAE,MAAM,CAAC;IAGd,MAAM,EAAE,MAAM,CAAC;IAGf,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAG3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAG5B,SAAS,EAAE,MAAM,CAAC;IAGlB,UAAU,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,57 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Column, PrimaryGeneratedColumn, Unique } from '@rosen-bridge/extended-typeorm';
11
+ let AbstractErgoExtractorEntity = class AbstractErgoExtractorEntity {
12
+ id;
13
+ boxId;
14
+ block;
15
+ height;
16
+ spendBlock;
17
+ spendHeight;
18
+ extractor;
19
+ serialized;
20
+ };
21
+ __decorate([
22
+ PrimaryGeneratedColumn(),
23
+ __metadata("design:type", Number)
24
+ ], AbstractErgoExtractorEntity.prototype, "id", void 0);
25
+ __decorate([
26
+ Column({ type: 'varchar' }),
27
+ __metadata("design:type", String)
28
+ ], AbstractErgoExtractorEntity.prototype, "boxId", void 0);
29
+ __decorate([
30
+ Column({ type: 'varchar' }),
31
+ __metadata("design:type", String)
32
+ ], AbstractErgoExtractorEntity.prototype, "block", void 0);
33
+ __decorate([
34
+ Column({ type: 'int' }),
35
+ __metadata("design:type", Number)
36
+ ], AbstractErgoExtractorEntity.prototype, "height", void 0);
37
+ __decorate([
38
+ Column({ nullable: true, type: 'varchar' }),
39
+ __metadata("design:type", Object)
40
+ ], AbstractErgoExtractorEntity.prototype, "spendBlock", void 0);
41
+ __decorate([
42
+ Column({ nullable: true, type: 'int' }),
43
+ __metadata("design:type", Object)
44
+ ], AbstractErgoExtractorEntity.prototype, "spendHeight", void 0);
45
+ __decorate([
46
+ Column({ type: 'varchar' }),
47
+ __metadata("design:type", String)
48
+ ], AbstractErgoExtractorEntity.prototype, "extractor", void 0);
49
+ __decorate([
50
+ Column({ type: 'varchar' }),
51
+ __metadata("design:type", String)
52
+ ], AbstractErgoExtractorEntity.prototype, "serialized", void 0);
53
+ AbstractErgoExtractorEntity = __decorate([
54
+ Unique(['boxId', 'extractor'])
55
+ ], AbstractErgoExtractorEntity);
56
+ export { AbstractErgoExtractorEntity };
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RFcmdvRXh0cmFjdG9yRW50aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2VyZ28vQWJzdHJhY3RFcmdvRXh0cmFjdG9yRW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHakYsSUFBZSwyQkFBMkIsR0FBMUMsTUFBZSwyQkFBMkI7SUFFL0MsRUFBRSxDQUFTO0lBR1gsS0FBSyxDQUFTO0lBR2QsS0FBSyxDQUFTO0lBR2QsTUFBTSxDQUFTO0lBR2YsVUFBVSxDQUFpQjtJQUczQixXQUFXLENBQWlCO0lBRzVCLFNBQVMsQ0FBUztJQUdsQixVQUFVLENBQVM7Q0FDcEIsQ0FBQTtBQXRCQztJQURDLHNCQUFzQixFQUFFOzt1REFDZDtBQUdYO0lBREMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDOzswREFDZDtBQUdkO0lBREMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDOzswREFDZDtBQUdkO0lBREMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDOzsyREFDVDtBQUdmO0lBREMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7OytEQUNqQjtBQUczQjtJQURDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDOztnRUFDWjtBQUc1QjtJQURDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQzs7OERBQ1Y7QUFHbEI7SUFEQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7OytEQUNUO0FBdkJDLDJCQUEyQjtJQURoRCxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7R0FDVCwyQkFBMkIsQ0F3QmhEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sdW1uLCBQcmltYXJ5R2VuZXJhdGVkQ29sdW1uLCBVbmlxdWUgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2V4dGVuZGVkLXR5cGVvcm0nO1xuXG5AVW5pcXVlKFsnYm94SWQnLCAnZXh0cmFjdG9yJ10pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RFcmdvRXh0cmFjdG9yRW50aXR5IHtcbiAgQFByaW1hcnlHZW5lcmF0ZWRDb2x1bW4oKVxuICBpZDogbnVtYmVyO1xuXG4gIEBDb2x1bW4oeyB0eXBlOiAndmFyY2hhcicgfSlcbiAgYm94SWQ6IHN0cmluZztcblxuICBAQ29sdW1uKHsgdHlwZTogJ3ZhcmNoYXInIH0pXG4gIGJsb2NrOiBzdHJpbmc7XG5cbiAgQENvbHVtbih7IHR5cGU6ICdpbnQnIH0pXG4gIGhlaWdodDogbnVtYmVyO1xuXG4gIEBDb2x1bW4oeyBudWxsYWJsZTogdHJ1ZSwgdHlwZTogJ3ZhcmNoYXInIH0pXG4gIHNwZW5kQmxvY2s/OiBzdHJpbmcgfCBudWxsO1xuXG4gIEBDb2x1bW4oeyBudWxsYWJsZTogdHJ1ZSwgdHlwZTogJ2ludCcgfSlcbiAgc3BlbmRIZWlnaHQ/OiBudW1iZXIgfCBudWxsO1xuXG4gIEBDb2x1bW4oeyB0eXBlOiAndmFyY2hhcicgfSlcbiAgZXh0cmFjdG9yOiBzdHJpbmc7XG5cbiAgQENvbHVtbih7IHR5cGU6ICd2YXJjaGFyJyB9KVxuICBzZXJpYWxpemVkOiBzdHJpbmc7XG59XG4iXX0=
@@ -0,0 +1,10 @@
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 './network/AbstractNetwork';
7
+ export * from './initializable';
8
+ export * from './utils';
9
+ export * from './AbstractErgoExtractorEntity';
10
+ //# 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,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,+BAA+B,CAAC"}
@@ -0,0 +1,10 @@
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 './network/AbstractNetwork';
7
+ export * from './initializable';
8
+ export * from './utils';
9
+ export * from './AbstractErgoExtractorEntity';
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZXJnby9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLCtCQUErQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9BYnN0cmFjdEVyZ29FeHRyYWN0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9BYnN0cmFjdEVyZ29FeHRyYWN0b3JBY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbmV0d29yay9FeHBsb3Jlck5ldHdvcmsnO1xuZXhwb3J0ICogZnJvbSAnLi9uZXR3b3JrL05vZGVOZXR3b3JrJztcbmV4cG9ydCAqIGZyb20gJy4vbmV0d29yay9BYnN0cmFjdE5ldHdvcmsnO1xuZXhwb3J0ICogZnJvbSAnLi9pbml0aWFsaXphYmxlJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9BYnN0cmFjdEVyZ29FeHRyYWN0b3JFbnRpdHknO1xuIl19