@rosen-bridge/abstract-extractor 2.1.2 → 3.0.0-7b38188a
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/abstractExtractor.d.ts +24 -12
- package/dist/abstractExtractor.d.ts.map +1 -1
- package/dist/abstractExtractor.js +1 -1
- package/dist/ergo/database/actions/abstractErgoAction.d.ts +83 -0
- package/dist/ergo/database/actions/abstractErgoAction.d.ts.map +1 -0
- package/dist/ergo/database/actions/abstractErgoAction.js +167 -0
- package/dist/ergo/database/actions/abstractErgoBoxAction.d.ts +31 -0
- package/dist/ergo/database/actions/abstractErgoBoxAction.d.ts.map +1 -0
- package/dist/ergo/database/actions/abstractErgoBoxAction.js +70 -0
- package/dist/ergo/database/entities/abstractErgoBoxEntity.d.ts +18 -0
- package/dist/ergo/database/entities/abstractErgoBoxEntity.d.ts.map +1 -0
- package/dist/ergo/database/entities/abstractErgoBoxEntity.js +36 -0
- package/dist/ergo/database/entities/abstractErgoEntity.d.ts +26 -0
- package/dist/ergo/database/entities/abstractErgoEntity.d.ts.map +1 -0
- package/dist/ergo/database/entities/abstractErgoEntity.js +64 -0
- package/dist/ergo/database/index.d.ts +5 -0
- package/dist/ergo/database/index.d.ts.map +1 -0
- package/dist/ergo/database/index.js +5 -0
- package/dist/ergo/extractors/abstractErgoBoxExtractor.d.ts +67 -0
- package/dist/ergo/extractors/abstractErgoBoxExtractor.d.ts.map +1 -0
- package/dist/ergo/extractors/abstractErgoBoxExtractor.js +106 -0
- package/dist/ergo/extractors/abstractErgoExtractor.d.ts +53 -0
- package/dist/ergo/extractors/abstractErgoExtractor.d.ts.map +1 -0
- package/dist/ergo/extractors/abstractErgoExtractor.js +92 -0
- package/dist/ergo/extractors/abstractErgoTxExtractor.d.ts +54 -0
- package/dist/ergo/extractors/abstractErgoTxExtractor.d.ts.map +1 -0
- package/dist/ergo/extractors/abstractErgoTxExtractor.js +76 -0
- package/dist/ergo/extractors/index.d.ts +4 -0
- package/dist/ergo/extractors/index.d.ts.map +1 -0
- package/dist/ergo/extractors/index.js +4 -0
- package/dist/ergo/index.d.ts +5 -7
- package/dist/ergo/index.d.ts.map +1 -1
- package/dist/ergo/index.js +6 -8
- package/dist/ergo/initializers/constants.d.ts +4 -0
- package/dist/ergo/initializers/constants.d.ts.map +1 -0
- package/dist/ergo/initializers/constants.js +4 -0
- package/dist/ergo/initializers/ergoBoxInitializer.d.ts +36 -0
- package/dist/ergo/initializers/ergoBoxInitializer.d.ts.map +1 -0
- package/dist/ergo/initializers/ergoBoxInitializer.js +84 -0
- package/dist/ergo/initializers/ergoInitializer.d.ts +39 -0
- package/dist/ergo/initializers/ergoInitializer.d.ts.map +1 -0
- package/dist/ergo/initializers/ergoInitializer.js +80 -0
- package/dist/ergo/initializers/index.d.ts +4 -0
- package/dist/ergo/initializers/index.d.ts.map +1 -0
- package/dist/ergo/initializers/index.js +4 -0
- package/dist/ergo/initializers/strategies/explorerInitializationStrategy.d.ts +59 -0
- package/dist/ergo/initializers/strategies/explorerInitializationStrategy.d.ts.map +1 -0
- package/dist/ergo/initializers/strategies/explorerInitializationStrategy.js +161 -0
- package/dist/ergo/initializers/strategies/index.d.ts +4 -0
- package/dist/ergo/initializers/strategies/index.d.ts.map +1 -0
- package/dist/ergo/initializers/strategies/index.js +4 -0
- package/dist/ergo/initializers/strategies/nodeInitializationStrategy.d.ts +30 -0
- package/dist/ergo/initializers/strategies/nodeInitializationStrategy.d.ts.map +1 -0
- package/dist/ergo/initializers/strategies/nodeInitializationStrategy.js +78 -0
- package/dist/ergo/initializers/strategies/workerManager.d.ts +79 -0
- package/dist/ergo/initializers/strategies/workerManager.d.ts.map +1 -0
- package/dist/ergo/initializers/strategies/workerManager.js +182 -0
- package/dist/ergo/interfaces.d.ts +31 -17
- package/dist/ergo/interfaces.d.ts.map +1 -1
- package/dist/ergo/interfaces.js +1 -1
- package/dist/ergo/networks/explorerNetwork.d.ts +52 -0
- package/dist/ergo/networks/explorerNetwork.d.ts.map +1 -0
- package/dist/ergo/networks/explorerNetwork.js +127 -0
- package/dist/ergo/networks/index.d.ts +3 -0
- package/dist/ergo/networks/index.d.ts.map +1 -0
- package/dist/ergo/networks/index.js +3 -0
- package/dist/ergo/networks/nodeNetwork.d.ts +28 -0
- package/dist/ergo/networks/nodeNetwork.d.ts.map +1 -0
- package/dist/ergo/networks/nodeNetwork.js +59 -0
- package/dist/ergo/utils.d.ts +15 -0
- package/dist/ergo/utils.d.ts.map +1 -1
- package/dist/ergo/utils.js +34 -1
- package/package.json +8 -5
- package/dist/ergo/abstractErgoExtractor.d.ts +0 -80
- package/dist/ergo/abstractErgoExtractor.d.ts.map +0 -1
- package/dist/ergo/abstractErgoExtractor.js +0 -142
- package/dist/ergo/abstractErgoExtractorAction.d.ts +0 -89
- package/dist/ergo/abstractErgoExtractorAction.d.ts.map +0 -1
- package/dist/ergo/abstractErgoExtractorAction.js +0 -219
- package/dist/ergo/abstractErgoExtractorEntity.d.ts +0 -11
- package/dist/ergo/abstractErgoExtractorEntity.d.ts.map +0 -1
- package/dist/ergo/abstractErgoExtractorEntity.js +0 -57
- package/dist/ergo/initializable/abstractInitializable.d.ts +0 -48
- package/dist/ergo/initializable/abstractInitializable.d.ts.map +0 -1
- package/dist/ergo/initializable/abstractInitializable.js +0 -162
- package/dist/ergo/initializable/abstractInitializableAction.d.ts +0 -14
- package/dist/ergo/initializable/abstractInitializableAction.d.ts.map +0 -1
- package/dist/ergo/initializable/abstractInitializableAction.js +0 -16
- package/dist/ergo/initializable/index.d.ts +0 -3
- package/dist/ergo/initializable/index.d.ts.map +0 -1
- package/dist/ergo/initializable/index.js +0 -3
- package/dist/ergo/network/abstractNetwork.d.ts +0 -26
- package/dist/ergo/network/abstractNetwork.d.ts.map +0 -1
- package/dist/ergo/network/abstractNetwork.js +0 -3
- package/dist/ergo/network/explorerNetwork.d.ts +0 -74
- package/dist/ergo/network/explorerNetwork.d.ts.map +0 -1
- package/dist/ergo/network/explorerNetwork.js +0 -185
- package/dist/ergo/network/nodeNetwork.d.ts +0 -60
- package/dist/ergo/network/nodeNetwork.d.ts.map +0 -1
- package/dist/ergo/network/nodeNetwork.js +0 -131
|
@@ -0,0 +1,64 @@
|
|
|
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
|
+
/**
|
|
12
|
+
* Abstract base entity for storing extracted blockchain data.
|
|
13
|
+
*
|
|
14
|
+
* This entity serves as the foundation for all extracted data storage,
|
|
15
|
+
* supporting both box-based and transaction-based extraction patterns.
|
|
16
|
+
* The identifier field can represent different types of blockchain data:
|
|
17
|
+
* - For box-based extractors: boxId (UTXO identifier)
|
|
18
|
+
* - For transaction-based extractors: txId (transaction identifier)
|
|
19
|
+
* - For general extractors: any unique blockchain data identifier
|
|
20
|
+
*/
|
|
21
|
+
let AbstractErgoEntity = class AbstractErgoEntity {
|
|
22
|
+
id;
|
|
23
|
+
block;
|
|
24
|
+
height;
|
|
25
|
+
extractor;
|
|
26
|
+
/**
|
|
27
|
+
* Unique identifier for the entity in the blockchain.
|
|
28
|
+
* This can be:
|
|
29
|
+
* - boxId for UTXO-based data (box extractors)
|
|
30
|
+
* - txId for transaction-based data (general extractors)
|
|
31
|
+
* - Any unique blockchain data identifier for custom extractors
|
|
32
|
+
*/
|
|
33
|
+
identifier;
|
|
34
|
+
serialized;
|
|
35
|
+
};
|
|
36
|
+
__decorate([
|
|
37
|
+
PrimaryGeneratedColumn(),
|
|
38
|
+
__metadata("design:type", Number)
|
|
39
|
+
], AbstractErgoEntity.prototype, "id", void 0);
|
|
40
|
+
__decorate([
|
|
41
|
+
Column({ type: 'varchar' }),
|
|
42
|
+
__metadata("design:type", String)
|
|
43
|
+
], AbstractErgoEntity.prototype, "block", void 0);
|
|
44
|
+
__decorate([
|
|
45
|
+
Column({ type: 'int' }),
|
|
46
|
+
__metadata("design:type", Number)
|
|
47
|
+
], AbstractErgoEntity.prototype, "height", void 0);
|
|
48
|
+
__decorate([
|
|
49
|
+
Column({ type: 'varchar' }),
|
|
50
|
+
__metadata("design:type", String)
|
|
51
|
+
], AbstractErgoEntity.prototype, "extractor", void 0);
|
|
52
|
+
__decorate([
|
|
53
|
+
Column({ type: 'varchar' }),
|
|
54
|
+
__metadata("design:type", String)
|
|
55
|
+
], AbstractErgoEntity.prototype, "identifier", void 0);
|
|
56
|
+
__decorate([
|
|
57
|
+
Column({ type: 'varchar' }),
|
|
58
|
+
__metadata("design:type", String)
|
|
59
|
+
], AbstractErgoEntity.prototype, "serialized", void 0);
|
|
60
|
+
AbstractErgoEntity = __decorate([
|
|
61
|
+
Unique(['identifier', 'extractor'])
|
|
62
|
+
], AbstractErgoEntity);
|
|
63
|
+
export { AbstractErgoEntity };
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RFcmdvRW50aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2VyZ28vZGF0YWJhc2UvZW50aXRpZXMvYWJzdHJhY3RFcmdvRW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxNQUFNLEVBQ04sc0JBQXNCLEVBQ3RCLE1BQU0sR0FDUCxNQUFNLGdDQUFnQyxDQUFDO0FBRXhDOzs7Ozs7Ozs7R0FTRztBQUVJLElBQWUsa0JBQWtCLEdBQWpDLE1BQWUsa0JBQWtCO0lBRXRDLEVBQUUsQ0FBUztJQUdYLEtBQUssQ0FBUztJQUdkLE1BQU0sQ0FBUztJQUdmLFNBQVMsQ0FBUztJQUVsQjs7Ozs7O09BTUc7SUFFSCxVQUFVLENBQVM7SUFHbkIsVUFBVSxDQUFTO0NBQ3BCLENBQUE7QUF2QkM7SUFEQyxzQkFBc0IsRUFBRTs7OENBQ2Q7QUFHWDtJQURDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQzs7aURBQ2Q7QUFHZDtJQURDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQzs7a0RBQ1Q7QUFHZjtJQURDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQzs7cURBQ1Y7QUFVbEI7SUFEQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7O3NEQUNUO0FBR25CO0lBREMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDOztzREFDVDtBQXhCQyxrQkFBa0I7SUFEdkMsTUFBTSxDQUFDLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0dBQ2Qsa0JBQWtCLENBeUJ2QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbHVtbixcbiAgUHJpbWFyeUdlbmVyYXRlZENvbHVtbixcbiAgVW5pcXVlLFxufSBmcm9tICdAcm9zZW4tYnJpZGdlL2V4dGVuZGVkLXR5cGVvcm0nO1xuXG4vKipcbiAqIEFic3RyYWN0IGJhc2UgZW50aXR5IGZvciBzdG9yaW5nIGV4dHJhY3RlZCBibG9ja2NoYWluIGRhdGEuXG4gKlxuICogVGhpcyBlbnRpdHkgc2VydmVzIGFzIHRoZSBmb3VuZGF0aW9uIGZvciBhbGwgZXh0cmFjdGVkIGRhdGEgc3RvcmFnZSxcbiAqIHN1cHBvcnRpbmcgYm90aCBib3gtYmFzZWQgYW5kIHRyYW5zYWN0aW9uLWJhc2VkIGV4dHJhY3Rpb24gcGF0dGVybnMuXG4gKiBUaGUgaWRlbnRpZmllciBmaWVsZCBjYW4gcmVwcmVzZW50IGRpZmZlcmVudCB0eXBlcyBvZiBibG9ja2NoYWluIGRhdGE6XG4gKiAtIEZvciBib3gtYmFzZWQgZXh0cmFjdG9yczogYm94SWQgKFVUWE8gaWRlbnRpZmllcilcbiAqIC0gRm9yIHRyYW5zYWN0aW9uLWJhc2VkIGV4dHJhY3RvcnM6IHR4SWQgKHRyYW5zYWN0aW9uIGlkZW50aWZpZXIpXG4gKiAtIEZvciBnZW5lcmFsIGV4dHJhY3RvcnM6IGFueSB1bmlxdWUgYmxvY2tjaGFpbiBkYXRhIGlkZW50aWZpZXJcbiAqL1xuQFVuaXF1ZShbJ2lkZW50aWZpZXInLCAnZXh0cmFjdG9yJ10pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RFcmdvRW50aXR5IHtcbiAgQFByaW1hcnlHZW5lcmF0ZWRDb2x1bW4oKVxuICBpZDogbnVtYmVyO1xuXG4gIEBDb2x1bW4oeyB0eXBlOiAndmFyY2hhcicgfSlcbiAgYmxvY2s6IHN0cmluZztcblxuICBAQ29sdW1uKHsgdHlwZTogJ2ludCcgfSlcbiAgaGVpZ2h0OiBudW1iZXI7XG5cbiAgQENvbHVtbih7IHR5cGU6ICd2YXJjaGFyJyB9KVxuICBleHRyYWN0b3I6IHN0cmluZztcblxuICAvKipcbiAgICogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBlbnRpdHkgaW4gdGhlIGJsb2NrY2hhaW4uXG4gICAqIFRoaXMgY2FuIGJlOlxuICAgKiAtIGJveElkIGZvciBVVFhPLWJhc2VkIGRhdGEgKGJveCBleHRyYWN0b3JzKVxuICAgKiAtIHR4SWQgZm9yIHRyYW5zYWN0aW9uLWJhc2VkIGRhdGEgKGdlbmVyYWwgZXh0cmFjdG9ycylcbiAgICogLSBBbnkgdW5pcXVlIGJsb2NrY2hhaW4gZGF0YSBpZGVudGlmaWVyIGZvciBjdXN0b20gZXh0cmFjdG9yc1xuICAgKi9cbiAgQENvbHVtbih7IHR5cGU6ICd2YXJjaGFyJyB9KVxuICBpZGVudGlmaWVyOiBzdHJpbmc7XG5cbiAgQENvbHVtbih7IHR5cGU6ICd2YXJjaGFyJyB9KVxuICBzZXJpYWxpemVkOiBzdHJpbmc7XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/ergo/database/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iCAAiC,CAAC;AAChD,cAAc,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './entities/abstractErgoBoxEntity';
|
|
2
|
+
export * from './entities/abstractErgoEntity';
|
|
3
|
+
export * from './actions/abstractErgoBoxAction';
|
|
4
|
+
export * from './actions/abstractErgoAction';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZXJnby9kYXRhYmFzZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDhCQUE4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9lbnRpdGllcy9hYnN0cmFjdEVyZ29Cb3hFbnRpdHknO1xuZXhwb3J0ICogZnJvbSAnLi9lbnRpdGllcy9hYnN0cmFjdEVyZ29FbnRpdHknO1xuZXhwb3J0ICogZnJvbSAnLi9hY3Rpb25zL2Fic3RyYWN0RXJnb0JveEFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2FjdGlvbnMvYWJzdHJhY3RFcmdvQWN0aW9uJztcbiJdfQ==
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
2
|
+
import { Transaction, BlockInfo, OutputBox, InputExtension } from '@rosen-bridge/scanner-interfaces';
|
|
3
|
+
import { AbstractErgoBoxEntity, AbstractErgoBoxAction } from '../database';
|
|
4
|
+
import { AbstractEntityData, TxExtra, InitializeOptions } from '../interfaces';
|
|
5
|
+
import { AbstractErgoExtractor } from './abstractErgoExtractor';
|
|
6
|
+
/**
|
|
7
|
+
* Abstract Ergo Box Extractor class for box-based data extraction.
|
|
8
|
+
*
|
|
9
|
+
* This class extends the AbstractErgoExtractor class and provides
|
|
10
|
+
* functionality for extracting box-based data from the blockchain.
|
|
11
|
+
*
|
|
12
|
+
* It overrides the `initializeData` method to use the box-based initializer.
|
|
13
|
+
* It implements the `processTransactions` method to use the box-based data extraction.
|
|
14
|
+
*
|
|
15
|
+
* Triggers `Insert` callback on new data insertion.
|
|
16
|
+
* Triggers a new callback type `Spend` for each spent box.
|
|
17
|
+
*
|
|
18
|
+
* @template ExtractedData - The type of data extracted from blockchain
|
|
19
|
+
* @template ExtractorEntity - The database entity type for storing extracted data
|
|
20
|
+
*/
|
|
21
|
+
export declare abstract class AbstractErgoBoxExtractor<ExtractedData extends AbstractEntityData, ExtractorEntity extends AbstractErgoBoxEntity> extends AbstractErgoExtractor<ExtractedData, ExtractorEntity> {
|
|
22
|
+
protected abstract actions: AbstractErgoBoxAction<ExtractedData, ExtractorEntity>;
|
|
23
|
+
constructor(initializeOptions?: InitializeOptions, logger?: AbstractLogger);
|
|
24
|
+
/**
|
|
25
|
+
* extract box data to proper format (not including spending information)
|
|
26
|
+
* @param box
|
|
27
|
+
* @param inputExtensions all input box extensions in transaction
|
|
28
|
+
* @return extracted data in proper format
|
|
29
|
+
*/
|
|
30
|
+
abstract extractBoxData: (box: OutputBox, inputExtensions: InputExtension[], txExtra?: TxExtra) => ExtractedData | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* check proper data format in the box
|
|
33
|
+
* @param box
|
|
34
|
+
* @return true if the box has the required data and false otherwise
|
|
35
|
+
*/
|
|
36
|
+
abstract hasBoxData: (box: OutputBox) => boolean;
|
|
37
|
+
/**
|
|
38
|
+
* extract transaction extra information
|
|
39
|
+
* override this function if there is extra needed information
|
|
40
|
+
* @param tx
|
|
41
|
+
* @returns
|
|
42
|
+
*/
|
|
43
|
+
getTransactionExtraData: (tx: Transaction) => TxExtra;
|
|
44
|
+
/**
|
|
45
|
+
* create spend info array for the transaction
|
|
46
|
+
* @param tx
|
|
47
|
+
* @returns spend info array of the transaction
|
|
48
|
+
*/
|
|
49
|
+
getTransactionSpendInfo: (tx: Transaction) => {
|
|
50
|
+
txId: string;
|
|
51
|
+
boxId: string;
|
|
52
|
+
index: number;
|
|
53
|
+
}[];
|
|
54
|
+
/**
|
|
55
|
+
* process a list of transactions in a block and store required information
|
|
56
|
+
* @param txs list of transactions in the block
|
|
57
|
+
* @param block
|
|
58
|
+
* @return true if the process is completed successfully and false otherwise
|
|
59
|
+
*/
|
|
60
|
+
processTransactions: (txs: Transaction[], block: BlockInfo) => Promise<boolean>;
|
|
61
|
+
/**
|
|
62
|
+
* initialize extractor database with data created below the initial height
|
|
63
|
+
* @param initialBlock
|
|
64
|
+
*/
|
|
65
|
+
initializeData: (initialBlock: BlockInfo) => Promise<void>;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=abstractErgoBoxExtractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abstractErgoBoxExtractor.d.ts","sourceRoot":"","sources":["../../../lib/ergo/extractors/abstractErgoBoxExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EACL,WAAW,EACX,SAAS,EACT,SAAS,EACT,cAAc,EACf,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAE3E,OAAO,EACL,kBAAkB,EAGlB,OAAO,EACP,iBAAiB,EAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE;;;;;;;;;;;;;;GAcG;AACH,8BAAsB,wBAAwB,CAC5C,aAAa,SAAS,kBAAkB,EACxC,eAAe,SAAS,qBAAqB,CAC7C,SAAQ,qBAAqB,CAAC,aAAa,EAAE,eAAe,CAAC;IAC7D,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAC/C,aAAa,EACb,eAAe,CAChB,CAAC;gBAEU,iBAAiB,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,cAAc;IAI1E;;;;;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,UAAU,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,OAAO,CAAC;IAEjD;;;;;OAKG;IACH,uBAAuB,GACrB,IAAI,WAAW,KACd,OAAO,CAER;IAEF;;;;OAIG;IACH,uBAAuB,GAAI,IAAI,WAAW;;;;QAQxC;IAEF;;;;;OAKG;IACH,mBAAmB,GACjB,KAAK,WAAW,EAAE,EAClB,OAAO,SAAS,KACf,OAAO,CAAC,OAAO,CAAC,CA2DjB;IAEF;;;OAGG;IACH,cAAc,GAAU,cAAc,SAAS,KAAG,OAAO,CAAC,IAAI,CAAC,CAgB7D;CACH"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import JsonBigInt from '@rosen-bridge/json-bigint';
|
|
2
|
+
import { ErgoBoxInitializer } from '../initializers';
|
|
3
|
+
import { CallbackType, } from '../interfaces';
|
|
4
|
+
import { AbstractErgoExtractor } from './abstractErgoExtractor';
|
|
5
|
+
/**
|
|
6
|
+
* Abstract Ergo Box Extractor class for box-based data extraction.
|
|
7
|
+
*
|
|
8
|
+
* This class extends the AbstractErgoExtractor class and provides
|
|
9
|
+
* functionality for extracting box-based data from the blockchain.
|
|
10
|
+
*
|
|
11
|
+
* It overrides the `initializeData` method to use the box-based initializer.
|
|
12
|
+
* It implements the `processTransactions` method to use the box-based data extraction.
|
|
13
|
+
*
|
|
14
|
+
* Triggers `Insert` callback on new data insertion.
|
|
15
|
+
* Triggers a new callback type `Spend` for each spent box.
|
|
16
|
+
*
|
|
17
|
+
* @template ExtractedData - The type of data extracted from blockchain
|
|
18
|
+
* @template ExtractorEntity - The database entity type for storing extracted data
|
|
19
|
+
*/
|
|
20
|
+
export class AbstractErgoBoxExtractor extends AbstractErgoExtractor {
|
|
21
|
+
constructor(initializeOptions, logger) {
|
|
22
|
+
super(initializeOptions, logger);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* extract transaction extra information
|
|
26
|
+
* override this function if there is extra needed information
|
|
27
|
+
* @param tx
|
|
28
|
+
* @returns
|
|
29
|
+
*/
|
|
30
|
+
getTransactionExtraData = (tx) => {
|
|
31
|
+
return {};
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* create spend info array for the transaction
|
|
35
|
+
* @param tx
|
|
36
|
+
* @returns spend info array of the transaction
|
|
37
|
+
*/
|
|
38
|
+
getTransactionSpendInfo = (tx) => {
|
|
39
|
+
let boxIndex = 1;
|
|
40
|
+
const spendInfoArray = [];
|
|
41
|
+
for (const input of tx.inputs) {
|
|
42
|
+
spendInfoArray.push({ txId: tx.id, boxId: input.boxId, index: boxIndex });
|
|
43
|
+
boxIndex += 1;
|
|
44
|
+
}
|
|
45
|
+
return spendInfoArray;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* process a list of transactions in a block and store required information
|
|
49
|
+
* @param txs list of transactions in the block
|
|
50
|
+
* @param block
|
|
51
|
+
* @return true if the process is completed successfully and false otherwise
|
|
52
|
+
*/
|
|
53
|
+
processTransactions = async (txs, block) => {
|
|
54
|
+
try {
|
|
55
|
+
const boxes = [];
|
|
56
|
+
const spentInfos = [];
|
|
57
|
+
for (const tx of txs) {
|
|
58
|
+
const inputExtensions = tx.inputs.map((input) => input.extension || {});
|
|
59
|
+
for (const output of tx.outputs) {
|
|
60
|
+
if (!this.hasBoxData(output)) {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
this.logger.debug(`Trying to extract data from box ${output.boxId}`);
|
|
64
|
+
const extractedData = this.extractBoxData(output, inputExtensions, this.getTransactionExtraData(tx));
|
|
65
|
+
if (extractedData) {
|
|
66
|
+
this.logger.debug(`Extracted data ${JsonBigInt.stringify(extractedData)} from box ${output.boxId}`);
|
|
67
|
+
boxes.push(extractedData);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
spentInfos.push(...this.getTransactionSpendInfo(tx));
|
|
71
|
+
}
|
|
72
|
+
if (boxes.length > 0) {
|
|
73
|
+
if (!(await this.actions.storeEntities(boxes, block, this.getId()))) {
|
|
74
|
+
this.logger.warn(`Data insertion failed for ${this.getId()} at the block ${block.height}`);
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
this.triggerCallbacks(CallbackType.Insert, boxes);
|
|
78
|
+
}
|
|
79
|
+
const spentData = await this.actions.updateSpendingInfo(spentInfos, block, this.getId());
|
|
80
|
+
if (spentData.length > 0) {
|
|
81
|
+
this.triggerCallbacks(CallbackType.Spend, spentData);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (e) {
|
|
85
|
+
this.logger.error(`Processing transactions failed for ${this.getId()} at the block ${block.height} with error: ${e}`);
|
|
86
|
+
if (e instanceof Error && e.stack) {
|
|
87
|
+
this.logger.error(`error stack: ${e.stack}`);
|
|
88
|
+
}
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
return true;
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* initialize extractor database with data created below the initial height
|
|
95
|
+
* @param initialBlock
|
|
96
|
+
*/
|
|
97
|
+
initializeData = async (initialBlock) => {
|
|
98
|
+
if (this.initializeOptions && this.initializeOptions.active) {
|
|
99
|
+
const initializer = new ErgoBoxInitializer(this.initializeOptions.type, this.initializeOptions.url, this.initializeOptions.address, this.getId(), this.hasBoxData, this.processTransactions, this.actions, this.initializeOptions.maxParallelRequests, this.logger.child('ErgoBoxInitializer'));
|
|
100
|
+
await initializer.initializeData(initialBlock);
|
|
101
|
+
}
|
|
102
|
+
else
|
|
103
|
+
this.logger.info(`Initializiation for [${this.getId()}] is turned off`);
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RFcmdvQm94RXh0cmFjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2VyZ28vZXh0cmFjdG9ycy9hYnN0cmFjdEVyZ29Cb3hFeHRyYWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxVQUFVLE1BQU0sMkJBQTJCLENBQUM7QUFTbkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUdMLFlBQVksR0FHYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVoRTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sT0FBZ0Isd0JBR3BCLFNBQVEscUJBQXFEO0lBTTdELFlBQVksaUJBQXFDLEVBQUUsTUFBdUI7UUFDeEUsS0FBSyxDQUFDLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFxQkQ7Ozs7O09BS0c7SUFDSCx1QkFBdUIsR0FBRyxDQUN4QixFQUFlLEVBQ04sRUFBRTtRQUNYLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQyxDQUFDO0lBRUY7Ozs7T0FJRztJQUNILHVCQUF1QixHQUFHLENBQUMsRUFBZSxFQUFFLEVBQUU7UUFDNUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUMxQixLQUFLLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM5QixjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDMUUsUUFBUSxJQUFJLENBQUMsQ0FBQztRQUNoQixDQUFDO1FBQ0QsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQyxDQUFDO0lBRUY7Ozs7O09BS0c7SUFDSCxtQkFBbUIsR0FBRyxLQUFLLEVBQ3pCLEdBQWtCLEVBQ2xCLEtBQWdCLEVBQ0UsRUFBRTtRQUNwQixJQUFJLENBQUM7WUFDSCxNQUFNLEtBQUssR0FBeUIsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sVUFBVSxHQUFxQixFQUFFLENBQUM7WUFDeEMsS0FBSyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDckIsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ3hFLEtBQUssTUFBTSxNQUFNLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUM3QixTQUFTO29CQUNYLENBQUM7b0JBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO29CQUNyRSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUN2QyxNQUFNLEVBQ04sZUFBZSxFQUNmLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsQ0FDakMsQ0FBQztvQkFDRixJQUFJLGFBQWEsRUFBRSxDQUFDO3dCQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZixrQkFBa0IsVUFBVSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsYUFDbkQsTUFBTSxDQUFDLEtBQ1QsRUFBRSxDQUNILENBQUM7d0JBQ0YsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDNUIsQ0FBQztnQkFDSCxDQUFDO2dCQUNELFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN2RCxDQUFDO1lBRUQsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNwRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZCw2QkFBNkIsSUFBSSxDQUFDLEtBQUssRUFBRSxpQkFDdkMsS0FBSyxDQUFDLE1BQ1IsRUFBRSxDQUNILENBQUM7b0JBQ0YsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQztnQkFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwRCxDQUFDO1lBQ0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUNyRCxVQUFVLEVBQ1YsS0FBSyxFQUNMLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FDYixDQUFDO1lBQ0YsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN2RCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZixzQ0FBc0MsSUFBSSxDQUFDLEtBQUssRUFBRSxpQkFDaEQsS0FBSyxDQUFDLE1BQ1IsZ0JBQWdCLENBQUMsRUFBRSxDQUNwQixDQUFDO1lBQ0YsSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUMsQ0FBQztJQUVGOzs7T0FHRztJQUNILGNBQWMsR0FBRyxLQUFLLEVBQUUsWUFBdUIsRUFBaUIsRUFBRTtRQUNoRSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDNUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxrQkFBa0IsQ0FDeEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFDM0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFDOUIsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUNaLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLG1CQUFtQixFQUN4QixJQUFJLENBQUMsT0FBTyxFQUNaLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsRUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FDeEMsQ0FBQztZQUNGLE1BQU0sV0FBVyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNqRCxDQUFDOztZQUNDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHdCQUF3QixJQUFJLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDNUUsQ0FBQyxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdExvZ2dlciB9IGZyb20gJ0Byb3Nlbi1icmlkZ2UvYWJzdHJhY3QtbG9nZ2VyJztcbmltcG9ydCBKc29uQmlnSW50IGZyb20gJ0Byb3Nlbi1icmlkZ2UvanNvbi1iaWdpbnQnO1xuaW1wb3J0IHtcbiAgVHJhbnNhY3Rpb24sXG4gIEJsb2NrSW5mbyxcbiAgT3V0cHV0Qm94LFxuICBJbnB1dEV4dGVuc2lvbixcbn0gZnJvbSAnQHJvc2VuLWJyaWRnZS9zY2FubmVyLWludGVyZmFjZXMnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdEVyZ29Cb3hFbnRpdHksIEFic3RyYWN0RXJnb0JveEFjdGlvbiB9IGZyb20gJy4uL2RhdGFiYXNlJztcbmltcG9ydCB7IEVyZ29Cb3hJbml0aWFsaXplciB9IGZyb20gJy4uL2luaXRpYWxpemVycyc7XG5pbXBvcnQge1xuICBBYnN0cmFjdEVudGl0eURhdGEsXG4gIFNwZW5kSW5mbyxcbiAgQ2FsbGJhY2tUeXBlLFxuICBUeEV4dHJhLFxuICBJbml0aWFsaXplT3B0aW9ucyxcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBYnN0cmFjdEVyZ29FeHRyYWN0b3IgfSBmcm9tICcuL2Fic3RyYWN0RXJnb0V4dHJhY3Rvcic7XG5cbi8qKlxuICogQWJzdHJhY3QgRXJnbyBCb3ggRXh0cmFjdG9yIGNsYXNzIGZvciBib3gtYmFzZWQgZGF0YSBleHRyYWN0aW9uLlxuICpcbiAqIFRoaXMgY2xhc3MgZXh0ZW5kcyB0aGUgQWJzdHJhY3RFcmdvRXh0cmFjdG9yIGNsYXNzIGFuZCBwcm92aWRlc1xuICogZnVuY3Rpb25hbGl0eSBmb3IgZXh0cmFjdGluZyBib3gtYmFzZWQgZGF0YSBmcm9tIHRoZSBibG9ja2NoYWluLlxuICpcbiAqIEl0IG92ZXJyaWRlcyB0aGUgYGluaXRpYWxpemVEYXRhYCBtZXRob2QgdG8gdXNlIHRoZSBib3gtYmFzZWQgaW5pdGlhbGl6ZXIuXG4gKiBJdCBpbXBsZW1lbnRzIHRoZSBgcHJvY2Vzc1RyYW5zYWN0aW9uc2AgbWV0aG9kIHRvIHVzZSB0aGUgYm94LWJhc2VkIGRhdGEgZXh0cmFjdGlvbi5cbiAqXG4gKiBUcmlnZ2VycyBgSW5zZXJ0YCBjYWxsYmFjayBvbiBuZXcgZGF0YSBpbnNlcnRpb24uXG4gKiBUcmlnZ2VycyBhIG5ldyBjYWxsYmFjayB0eXBlIGBTcGVuZGAgZm9yIGVhY2ggc3BlbnQgYm94LlxuICpcbiAqIEB0ZW1wbGF0ZSBFeHRyYWN0ZWREYXRhIC0gVGhlIHR5cGUgb2YgZGF0YSBleHRyYWN0ZWQgZnJvbSBibG9ja2NoYWluXG4gKiBAdGVtcGxhdGUgRXh0cmFjdG9yRW50aXR5IC0gVGhlIGRhdGFiYXNlIGVudGl0eSB0eXBlIGZvciBzdG9yaW5nIGV4dHJhY3RlZCBkYXRhXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdEVyZ29Cb3hFeHRyYWN0b3I8XG4gIEV4dHJhY3RlZERhdGEgZXh0ZW5kcyBBYnN0cmFjdEVudGl0eURhdGEsXG4gIEV4dHJhY3RvckVudGl0eSBleHRlbmRzIEFic3RyYWN0RXJnb0JveEVudGl0eSxcbj4gZXh0ZW5kcyBBYnN0cmFjdEVyZ29FeHRyYWN0b3I8RXh0cmFjdGVkRGF0YSwgRXh0cmFjdG9yRW50aXR5PiB7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBhY3Rpb25zOiBBYnN0cmFjdEVyZ29Cb3hBY3Rpb248XG4gICAgRXh0cmFjdGVkRGF0YSxcbiAgICBFeHRyYWN0b3JFbnRpdHlcbiAgPjtcblxuICBjb25zdHJ1Y3Rvcihpbml0aWFsaXplT3B0aW9ucz86IEluaXRpYWxpemVPcHRpb25zLCBsb2dnZXI/OiBBYnN0cmFjdExvZ2dlcikge1xuICAgIHN1cGVyKGluaXRpYWxpemVPcHRpb25zLCBsb2dnZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGV4dHJhY3QgYm94IGRhdGEgdG8gcHJvcGVyIGZvcm1hdCAobm90IGluY2x1ZGluZyBzcGVuZGluZyBpbmZvcm1hdGlvbilcbiAgICogQHBhcmFtIGJveFxuICAgKiBAcGFyYW0gaW5wdXRFeHRlbnNpb25zIGFsbCBpbnB1dCBib3ggZXh0ZW5zaW9ucyBpbiB0cmFuc2FjdGlvblxuICAgKiBAcmV0dXJuIGV4dHJhY3RlZCBkYXRhIGluIHByb3BlciBmb3JtYXRcbiAgICovXG4gIGFic3RyYWN0IGV4dHJhY3RCb3hEYXRhOiAoXG4gICAgYm94OiBPdXRwdXRCb3gsXG4gICAgaW5wdXRFeHRlbnNpb25zOiBJbnB1dEV4dGVuc2lvbltdLFxuICAgIHR4RXh0cmE/OiBUeEV4dHJhLFxuICApID0+IEV4dHJhY3RlZERhdGEgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIGNoZWNrIHByb3BlciBkYXRhIGZvcm1hdCBpbiB0aGUgYm94XG4gICAqIEBwYXJhbSBib3hcbiAgICogQHJldHVybiB0cnVlIGlmIHRoZSBib3ggaGFzIHRoZSByZXF1aXJlZCBkYXRhIGFuZCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGFic3RyYWN0IGhhc0JveERhdGE6IChib3g6IE91dHB1dEJveCkgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogZXh0cmFjdCB0cmFuc2FjdGlvbiBleHRyYSBpbmZvcm1hdGlvblxuICAgKiBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIGlmIHRoZXJlIGlzIGV4dHJhIG5lZWRlZCBpbmZvcm1hdGlvblxuICAgKiBAcGFyYW0gdHhcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldFRyYW5zYWN0aW9uRXh0cmFEYXRhID0gKFxuICAgIHR4OiBUcmFuc2FjdGlvbiwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgKTogVHhFeHRyYSA9PiB7XG4gICAgcmV0dXJuIHt9O1xuICB9O1xuXG4gIC8qKlxuICAgKiBjcmVhdGUgc3BlbmQgaW5mbyBhcnJheSBmb3IgdGhlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB0eFxuICAgKiBAcmV0dXJucyBzcGVuZCBpbmZvIGFycmF5IG9mIHRoZSB0cmFuc2FjdGlvblxuICAgKi9cbiAgZ2V0VHJhbnNhY3Rpb25TcGVuZEluZm8gPSAodHg6IFRyYW5zYWN0aW9uKSA9PiB7XG4gICAgbGV0IGJveEluZGV4ID0gMTtcbiAgICBjb25zdCBzcGVuZEluZm9BcnJheSA9IFtdO1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgdHguaW5wdXRzKSB7XG4gICAgICBzcGVuZEluZm9BcnJheS5wdXNoKHsgdHhJZDogdHguaWQsIGJveElkOiBpbnB1dC5ib3hJZCwgaW5kZXg6IGJveEluZGV4IH0pO1xuICAgICAgYm94SW5kZXggKz0gMTtcbiAgICB9XG4gICAgcmV0dXJuIHNwZW5kSW5mb0FycmF5O1xuICB9O1xuXG4gIC8qKlxuICAgKiBwcm9jZXNzIGEgbGlzdCBvZiB0cmFuc2FjdGlvbnMgaW4gYSBibG9jayBhbmQgc3RvcmUgcmVxdWlyZWQgaW5mb3JtYXRpb25cbiAgICogQHBhcmFtIHR4cyBsaXN0IG9mIHRyYW5zYWN0aW9ucyBpbiB0aGUgYmxvY2tcbiAgICogQHBhcmFtIGJsb2NrXG4gICAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcHJvY2VzcyBpcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IGFuZCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHByb2Nlc3NUcmFuc2FjdGlvbnMgPSBhc3luYyAoXG4gICAgdHhzOiBUcmFuc2FjdGlvbltdLFxuICAgIGJsb2NrOiBCbG9ja0luZm8sXG4gICk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBib3hlczogQXJyYXk8RXh0cmFjdGVkRGF0YT4gPSBbXTtcbiAgICAgIGNvbnN0IHNwZW50SW5mb3M6IEFycmF5PFNwZW5kSW5mbz4gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdHggb2YgdHhzKSB7XG4gICAgICAgIGNvbnN0IGlucHV0RXh0ZW5zaW9ucyA9IHR4LmlucHV0cy5tYXAoKGlucHV0KSA9PiBpbnB1dC5leHRlbnNpb24gfHwge30pO1xuICAgICAgICBmb3IgKGNvbnN0IG91dHB1dCBvZiB0eC5vdXRwdXRzKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmhhc0JveERhdGEob3V0cHV0KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBUcnlpbmcgdG8gZXh0cmFjdCBkYXRhIGZyb20gYm94ICR7b3V0cHV0LmJveElkfWApO1xuICAgICAgICAgIGNvbnN0IGV4dHJhY3RlZERhdGEgPSB0aGlzLmV4dHJhY3RCb3hEYXRhKFxuICAgICAgICAgICAgb3V0cHV0LFxuICAgICAgICAgICAgaW5wdXRFeHRlbnNpb25zLFxuICAgICAgICAgICAgdGhpcy5nZXRUcmFuc2FjdGlvbkV4dHJhRGF0YSh0eCksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoZXh0cmFjdGVkRGF0YSkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgICAgIGBFeHRyYWN0ZWQgZGF0YSAke0pzb25CaWdJbnQuc3RyaW5naWZ5KGV4dHJhY3RlZERhdGEpfSBmcm9tIGJveCAke1xuICAgICAgICAgICAgICAgIG91dHB1dC5ib3hJZFxuICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBib3hlcy5wdXNoKGV4dHJhY3RlZERhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzcGVudEluZm9zLnB1c2goLi4udGhpcy5nZXRUcmFuc2FjdGlvblNwZW5kSW5mbyh0eCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYm94ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoIShhd2FpdCB0aGlzLmFjdGlvbnMuc3RvcmVFbnRpdGllcyhib3hlcywgYmxvY2ssIHRoaXMuZ2V0SWQoKSkpKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcbiAgICAgICAgICAgIGBEYXRhIGluc2VydGlvbiBmYWlsZWQgZm9yICR7dGhpcy5nZXRJZCgpfSBhdCB0aGUgYmxvY2sgJHtcbiAgICAgICAgICAgICAgYmxvY2suaGVpZ2h0XG4gICAgICAgICAgICB9YCxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRyaWdnZXJDYWxsYmFja3MoQ2FsbGJhY2tUeXBlLkluc2VydCwgYm94ZXMpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3BlbnREYXRhID0gYXdhaXQgdGhpcy5hY3Rpb25zLnVwZGF0ZVNwZW5kaW5nSW5mbyhcbiAgICAgICAgc3BlbnRJbmZvcyxcbiAgICAgICAgYmxvY2ssXG4gICAgICAgIHRoaXMuZ2V0SWQoKSxcbiAgICAgICk7XG4gICAgICBpZiAoc3BlbnREYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyQ2FsbGJhY2tzKENhbGxiYWNrVHlwZS5TcGVuZCwgc3BlbnREYXRhKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihcbiAgICAgICAgYFByb2Nlc3NpbmcgdHJhbnNhY3Rpb25zIGZhaWxlZCBmb3IgJHt0aGlzLmdldElkKCl9IGF0IHRoZSBibG9jayAke1xuICAgICAgICAgIGJsb2NrLmhlaWdodFxuICAgICAgICB9IHdpdGggZXJyb3I6ICR7ZX1gLFxuICAgICAgKTtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5zdGFjaykge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihgZXJyb3Igc3RhY2s6ICR7ZS5zdGFja31gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgLyoqXG4gICAqIGluaXRpYWxpemUgZXh0cmFjdG9yIGRhdGFiYXNlIHdpdGggZGF0YSBjcmVhdGVkIGJlbG93IHRoZSBpbml0aWFsIGhlaWdodFxuICAgKiBAcGFyYW0gaW5pdGlhbEJsb2NrXG4gICAqL1xuICBpbml0aWFsaXplRGF0YSA9IGFzeW5jIChpbml0aWFsQmxvY2s6IEJsb2NrSW5mbyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmICh0aGlzLmluaXRpYWxpemVPcHRpb25zICYmIHRoaXMuaW5pdGlhbGl6ZU9wdGlvbnMuYWN0aXZlKSB7XG4gICAgICBjb25zdCBpbml0aWFsaXplciA9IG5ldyBFcmdvQm94SW5pdGlhbGl6ZXIoXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZU9wdGlvbnMudHlwZSxcbiAgICAgICAgdGhpcy5pbml0aWFsaXplT3B0aW9ucy51cmwsXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZU9wdGlvbnMuYWRkcmVzcyxcbiAgICAgICAgdGhpcy5nZXRJZCgpLFxuICAgICAgICB0aGlzLmhhc0JveERhdGEsXG4gICAgICAgIHRoaXMucHJvY2Vzc1RyYW5zYWN0aW9ucyxcbiAgICAgICAgdGhpcy5hY3Rpb25zLFxuICAgICAgICB0aGlzLmluaXRpYWxpemVPcHRpb25zLm1heFBhcmFsbGVsUmVxdWVzdHMsXG4gICAgICAgIHRoaXMubG9nZ2VyLmNoaWxkKCdFcmdvQm94SW5pdGlhbGl6ZXInKSxcbiAgICAgICk7XG4gICAgICBhd2FpdCBpbml0aWFsaXplci5pbml0aWFsaXplRGF0YShpbml0aWFsQmxvY2spO1xuICAgIH0gZWxzZVxuICAgICAgdGhpcy5sb2dnZXIuaW5mbyhgSW5pdGlhbGl6aWF0aW9uIGZvciBbJHt0aGlzLmdldElkKCl9XSBpcyB0dXJuZWQgb2ZmYCk7XG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
2
|
+
import { Transaction } from '@rosen-bridge/scanner-interfaces';
|
|
3
|
+
import { AbstractExtractor } from '../../abstractExtractor';
|
|
4
|
+
import { AbstractErgoEntity, AbstractErgoAction } from '../database';
|
|
5
|
+
import { AbstractEntityData, CallbackType, CallbackMap, CallbackDataMap, InitializeOptions } from '../interfaces';
|
|
6
|
+
/**
|
|
7
|
+
* Abstract Ergo-specific extractor that provides common functionality for all Ergo extractors.
|
|
8
|
+
*
|
|
9
|
+
* It provides callback support and blockchain fork handle for all ergo extractors.
|
|
10
|
+
*
|
|
11
|
+
* It triggers callbacks for the `Update` and `Delete` actions on a forked block.
|
|
12
|
+
*
|
|
13
|
+
* @template ExtractedData - The type of data extracted from blockchain
|
|
14
|
+
* @template ExtractorEntity - The database entity type for storing extracted data
|
|
15
|
+
*/
|
|
16
|
+
export declare abstract class AbstractErgoExtractor<ExtractedData extends AbstractEntityData, ExtractorEntity extends AbstractErgoEntity> extends AbstractExtractor<Transaction> {
|
|
17
|
+
protected initializeOptions?: InitializeOptions | undefined;
|
|
18
|
+
protected logger: AbstractLogger;
|
|
19
|
+
protected abstract actions: AbstractErgoAction<ExtractedData, ExtractorEntity>;
|
|
20
|
+
protected callbacks: {
|
|
21
|
+
[K in CallbackType]: Map<string, CallbackMap<ExtractedData>[K]>;
|
|
22
|
+
};
|
|
23
|
+
private callbackMutex;
|
|
24
|
+
constructor(initializeOptions?: InitializeOptions | undefined, logger?: AbstractLogger);
|
|
25
|
+
/**
|
|
26
|
+
* hook a new callback on a callback type
|
|
27
|
+
* @param type
|
|
28
|
+
* @param id
|
|
29
|
+
* @param callback
|
|
30
|
+
* @returns callback registered id
|
|
31
|
+
*/
|
|
32
|
+
hook: <T extends CallbackType>(type: T, callback: CallbackMap<ExtractedData>[T]) => Promise<string>;
|
|
33
|
+
/**
|
|
34
|
+
* unhook a callback on a type
|
|
35
|
+
* returns false if there is no registered callback with the id
|
|
36
|
+
* @param type
|
|
37
|
+
* @param id
|
|
38
|
+
* @returns success status
|
|
39
|
+
*/
|
|
40
|
+
unhook: (type: CallbackType, id: string) => Promise<boolean>;
|
|
41
|
+
/**
|
|
42
|
+
* trigger all callbacks registered on a specific type with the provided data
|
|
43
|
+
* @param type
|
|
44
|
+
* @param data
|
|
45
|
+
*/
|
|
46
|
+
protected triggerCallbacks<T extends CallbackType>(type: T, data: CallbackDataMap<ExtractedData>[T]): void;
|
|
47
|
+
/**
|
|
48
|
+
* fork one block and remove all stored information for this block
|
|
49
|
+
* @param hash block hash
|
|
50
|
+
*/
|
|
51
|
+
forkBlock: (hash: string) => Promise<void>;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=abstractErgoExtractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abstractErgoExtractor.d.ts","sourceRoot":"","sources":["../../../lib/ergo/extractors/abstractErgoExtractor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,eAAe,EACf,iBAAiB,EAClB,MAAM,eAAe,CAAC;AAEvB;;;;;;;;;GASG;AACH,8BAAsB,qBAAqB,CACzC,aAAa,SAAS,kBAAkB,EACxC,eAAe,SAAS,kBAAkB,CAC1C,SAAQ,iBAAiB,CAAC,WAAW,CAAC;IAgBpC,SAAS,CAAC,iBAAiB,CAAC,EAAE,iBAAiB;IAC/C,SAAS,CAAC,MAAM,EAAE,cAAc;IAhBlC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAC5C,aAAa,EACb,eAAe,CAChB,CAAC;IACF,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;gBAGxB,iBAAiB,CAAC,EAAE,iBAAiB,YAAA,EACrC,MAAM,GAAE,cAAkC;IAKtD;;;;;;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;IAaP;;;OAGG;IACH,SAAS,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAM7C;CACH"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { Mutex } from 'await-semaphore';
|
|
2
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
3
|
+
import { DummyLogger } from '@rosen-bridge/abstract-logger';
|
|
4
|
+
import { AbstractExtractor } from '../../abstractExtractor';
|
|
5
|
+
import { CallbackType, } from '../interfaces';
|
|
6
|
+
/**
|
|
7
|
+
* Abstract Ergo-specific extractor that provides common functionality for all Ergo extractors.
|
|
8
|
+
*
|
|
9
|
+
* It provides callback support and blockchain fork handle for all ergo extractors.
|
|
10
|
+
*
|
|
11
|
+
* It triggers callbacks for the `Update` and `Delete` actions on a forked block.
|
|
12
|
+
*
|
|
13
|
+
* @template ExtractedData - The type of data extracted from blockchain
|
|
14
|
+
* @template ExtractorEntity - The database entity type for storing extracted data
|
|
15
|
+
*/
|
|
16
|
+
export class AbstractErgoExtractor extends AbstractExtractor {
|
|
17
|
+
initializeOptions;
|
|
18
|
+
logger;
|
|
19
|
+
callbacks = {
|
|
20
|
+
[CallbackType.Update]: new Map(),
|
|
21
|
+
[CallbackType.Insert]: new Map(),
|
|
22
|
+
[CallbackType.Delete]: new Map(),
|
|
23
|
+
[CallbackType.Spend]: new Map(),
|
|
24
|
+
};
|
|
25
|
+
callbackMutex = new Mutex();
|
|
26
|
+
constructor(initializeOptions, logger = new DummyLogger()) {
|
|
27
|
+
super();
|
|
28
|
+
this.initializeOptions = initializeOptions;
|
|
29
|
+
this.logger = logger;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* hook a new callback on a callback type
|
|
33
|
+
* @param type
|
|
34
|
+
* @param id
|
|
35
|
+
* @param callback
|
|
36
|
+
* @returns callback registered id
|
|
37
|
+
*/
|
|
38
|
+
hook = async (type, callback) => {
|
|
39
|
+
const release = await this.callbackMutex.acquire();
|
|
40
|
+
const callbackMap = this.callbacks[type];
|
|
41
|
+
const id = uuidv4();
|
|
42
|
+
callbackMap.set(id, callback);
|
|
43
|
+
release();
|
|
44
|
+
return id;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* unhook a callback on a type
|
|
48
|
+
* returns false if there is no registered callback with the id
|
|
49
|
+
* @param type
|
|
50
|
+
* @param id
|
|
51
|
+
* @returns success status
|
|
52
|
+
*/
|
|
53
|
+
unhook = async (type, id) => {
|
|
54
|
+
const release = await this.callbackMutex.acquire();
|
|
55
|
+
const callbackMap = this.callbacks[type];
|
|
56
|
+
if (!callbackMap.has(id)) {
|
|
57
|
+
this.logger.warn(`Callback with Id [${id}] is not registered for type [${type}].`);
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
callbackMap.delete(id);
|
|
61
|
+
release();
|
|
62
|
+
return true;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* trigger all callbacks registered on a specific type with the provided data
|
|
66
|
+
* @param type
|
|
67
|
+
* @param data
|
|
68
|
+
*/
|
|
69
|
+
triggerCallbacks(type, data) {
|
|
70
|
+
const callbackMap = this.callbacks[type];
|
|
71
|
+
callbackMap.forEach((callback) => {
|
|
72
|
+
try {
|
|
73
|
+
callback(data);
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
this.logger.warn(`callback failed for ${type} action on data [${data}] with error: ${e}`);
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* fork one block and remove all stored information for this block
|
|
82
|
+
* @param hash block hash
|
|
83
|
+
*/
|
|
84
|
+
forkBlock = async (hash) => {
|
|
85
|
+
const result = await this.actions.deleteBlockData(hash, this.getId());
|
|
86
|
+
if (result.deletedData.length > 0)
|
|
87
|
+
this.triggerCallbacks(CallbackType.Delete, result.deletedData);
|
|
88
|
+
if (result.updatedData.length > 0)
|
|
89
|
+
this.triggerCallbacks(CallbackType.Update, result.updatedData);
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RFcmdvRXh0cmFjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL2VyZ28vZXh0cmFjdG9ycy9hYnN0cmFjdEVyZ29FeHRyYWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFBa0IsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHNUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFNUQsT0FBTyxFQUVMLFlBQVksR0FJYixNQUFNLGVBQWUsQ0FBQztBQUV2Qjs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLE9BQWdCLHFCQUdwQixTQUFRLGlCQUE4QjtJQWdCMUI7SUFDQTtJQVpGLFNBQVMsR0FFZjtRQUNGLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksR0FBRyxFQUFFO1FBQ2hDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksR0FBRyxFQUFFO1FBQ2hDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksR0FBRyxFQUFFO1FBQ2hDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksR0FBRyxFQUFFO0tBQ2hDLENBQUM7SUFDTSxhQUFhLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUVwQyxZQUNZLGlCQUFxQyxFQUNyQyxTQUF5QixJQUFJLFdBQVcsRUFBRTtRQUVwRCxLQUFLLEVBQUUsQ0FBQztRQUhFLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBb0I7UUFDckMsV0FBTSxHQUFOLE1BQU0sQ0FBb0M7SUFHdEQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILElBQUksR0FBRyxLQUFLLEVBQ1YsSUFBTyxFQUNQLFFBQXVDLEVBQ3RCLEVBQUU7UUFDbkIsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25ELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsTUFBTSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDcEIsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDOUIsT0FBTyxFQUFFLENBQUM7UUFDVixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUMsQ0FBQztJQUVGOzs7Ozs7T0FNRztJQUNILE1BQU0sR0FBRyxLQUFLLEVBQUUsSUFBa0IsRUFBRSxFQUFVLEVBQW9CLEVBQUU7UUFDbEUsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25ELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDZCxxQkFBcUIsRUFBRSxpQ0FBaUMsSUFBSSxJQUFJLENBQ2pFLENBQUM7WUFDRixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZCLE9BQU8sRUFBRSxDQUFDO1FBQ1YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7SUFFRjs7OztPQUlHO0lBQ08sZ0JBQWdCLENBQ3hCLElBQU8sRUFDUCxJQUF1QztRQUV2QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUMvQixJQUFJLENBQUM7Z0JBQ0gsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pCLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNkLHVCQUF1QixJQUFJLG9CQUFvQixJQUFJLGlCQUFpQixDQUFDLEVBQUUsQ0FDeEUsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFTLEdBQUcsS0FBSyxFQUFFLElBQVksRUFBaUIsRUFBRTtRQUNoRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN0RSxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDL0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pFLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUMvQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkUsQ0FBQyxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNdXRleCB9IGZyb20gJ2F3YWl0LXNlbWFwaG9yZSc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcblxuaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIsIER1bW15TG9nZ2VyIH0gZnJvbSAnQHJvc2VuLWJyaWRnZS9hYnN0cmFjdC1sb2dnZXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICdAcm9zZW4tYnJpZGdlL3NjYW5uZXItaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7IEFic3RyYWN0RXh0cmFjdG9yIH0gZnJvbSAnLi4vLi4vYWJzdHJhY3RFeHRyYWN0b3InO1xuaW1wb3J0IHsgQWJzdHJhY3RFcmdvRW50aXR5LCBBYnN0cmFjdEVyZ29BY3Rpb24gfSBmcm9tICcuLi9kYXRhYmFzZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdEVudGl0eURhdGEsXG4gIENhbGxiYWNrVHlwZSxcbiAgQ2FsbGJhY2tNYXAsXG4gIENhbGxiYWNrRGF0YU1hcCxcbiAgSW5pdGlhbGl6ZU9wdGlvbnMsXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG4vKipcbiAqIEFic3RyYWN0IEVyZ28tc3BlY2lmaWMgZXh0cmFjdG9yIHRoYXQgcHJvdmlkZXMgY29tbW9uIGZ1bmN0aW9uYWxpdHkgZm9yIGFsbCBFcmdvIGV4dHJhY3RvcnMuXG4gKlxuICogSXQgcHJvdmlkZXMgY2FsbGJhY2sgc3VwcG9ydCBhbmQgYmxvY2tjaGFpbiBmb3JrIGhhbmRsZSBmb3IgYWxsIGVyZ28gZXh0cmFjdG9ycy5cbiAqXG4gKiBJdCB0cmlnZ2VycyBjYWxsYmFja3MgZm9yIHRoZSBgVXBkYXRlYCBhbmQgYERlbGV0ZWAgYWN0aW9ucyBvbiBhIGZvcmtlZCBibG9jay5cbiAqXG4gKiBAdGVtcGxhdGUgRXh0cmFjdGVkRGF0YSAtIFRoZSB0eXBlIG9mIGRhdGEgZXh0cmFjdGVkIGZyb20gYmxvY2tjaGFpblxuICogQHRlbXBsYXRlIEV4dHJhY3RvckVudGl0eSAtIFRoZSBkYXRhYmFzZSBlbnRpdHkgdHlwZSBmb3Igc3RvcmluZyBleHRyYWN0ZWQgZGF0YVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RFcmdvRXh0cmFjdG9yPFxuICBFeHRyYWN0ZWREYXRhIGV4dGVuZHMgQWJzdHJhY3RFbnRpdHlEYXRhLFxuICBFeHRyYWN0b3JFbnRpdHkgZXh0ZW5kcyBBYnN0cmFjdEVyZ29FbnRpdHksXG4+IGV4dGVuZHMgQWJzdHJhY3RFeHRyYWN0b3I8VHJhbnNhY3Rpb24+IHtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGFjdGlvbnM6IEFic3RyYWN0RXJnb0FjdGlvbjxcbiAgICBFeHRyYWN0ZWREYXRhLFxuICAgIEV4dHJhY3RvckVudGl0eVxuICA+O1xuICBwcm90ZWN0ZWQgY2FsbGJhY2tzOiB7XG4gICAgW0sgaW4gQ2FsbGJhY2tUeXBlXTogTWFwPHN0cmluZywgQ2FsbGJhY2tNYXA8RXh0cmFjdGVkRGF0YT5bS10+O1xuICB9ID0ge1xuICAgIFtDYWxsYmFja1R5cGUuVXBkYXRlXTogbmV3IE1hcCgpLFxuICAgIFtDYWxsYmFja1R5cGUuSW5zZXJ0XTogbmV3IE1hcCgpLFxuICAgIFtDYWxsYmFja1R5cGUuRGVsZXRlXTogbmV3IE1hcCgpLFxuICAgIFtDYWxsYmFja1R5cGUuU3BlbmRdOiBuZXcgTWFwKCksXG4gIH07XG4gIHByaXZhdGUgY2FsbGJhY2tNdXRleCA9IG5ldyBNdXRleCgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBpbml0aWFsaXplT3B0aW9ucz86IEluaXRpYWxpemVPcHRpb25zLFxuICAgIHByb3RlY3RlZCBsb2dnZXI6IEFic3RyYWN0TG9nZ2VyID0gbmV3IER1bW15TG9nZ2VyKCksXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogaG9vayBhIG5ldyBjYWxsYmFjayBvbiBhIGNhbGxiYWNrIHR5cGVcbiAgICogQHBhcmFtIHR5cGVcbiAgICogQHBhcmFtIGlkXG4gICAqIEBwYXJhbSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyBjYWxsYmFjayByZWdpc3RlcmVkIGlkXG4gICAqL1xuICBob29rID0gYXN5bmMgPFQgZXh0ZW5kcyBDYWxsYmFja1R5cGU+KFxuICAgIHR5cGU6IFQsXG4gICAgY2FsbGJhY2s6IENhbGxiYWNrTWFwPEV4dHJhY3RlZERhdGE+W1RdLFxuICApOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICAgIGNvbnN0IHJlbGVhc2UgPSBhd2FpdCB0aGlzLmNhbGxiYWNrTXV0ZXguYWNxdWlyZSgpO1xuICAgIGNvbnN0IGNhbGxiYWNrTWFwID0gdGhpcy5jYWxsYmFja3NbdHlwZV07XG4gICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICBjYWxsYmFja01hcC5zZXQoaWQsIGNhbGxiYWNrKTtcbiAgICByZWxlYXNlKCk7XG4gICAgcmV0dXJuIGlkO1xuICB9O1xuXG4gIC8qKlxuICAgKiB1bmhvb2sgYSBjYWxsYmFjayBvbiBhIHR5cGVcbiAgICogcmV0dXJucyBmYWxzZSBpZiB0aGVyZSBpcyBubyByZWdpc3RlcmVkIGNhbGxiYWNrIHdpdGggdGhlIGlkXG4gICAqIEBwYXJhbSB0eXBlXG4gICAqIEBwYXJhbSBpZFxuICAgKiBAcmV0dXJucyBzdWNjZXNzIHN0YXR1c1xuICAgKi9cbiAgdW5ob29rID0gYXN5bmMgKHR5cGU6IENhbGxiYWNrVHlwZSwgaWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIGNvbnN0IHJlbGVhc2UgPSBhd2FpdCB0aGlzLmNhbGxiYWNrTXV0ZXguYWNxdWlyZSgpO1xuICAgIGNvbnN0IGNhbGxiYWNrTWFwID0gdGhpcy5jYWxsYmFja3NbdHlwZV07XG4gICAgaWYgKCFjYWxsYmFja01hcC5oYXMoaWQpKSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKFxuICAgICAgICBgQ2FsbGJhY2sgd2l0aCBJZCBbJHtpZH1dIGlzIG5vdCByZWdpc3RlcmVkIGZvciB0eXBlIFske3R5cGV9XS5gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY2FsbGJhY2tNYXAuZGVsZXRlKGlkKTtcbiAgICByZWxlYXNlKCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgLyoqXG4gICAqIHRyaWdnZXIgYWxsIGNhbGxiYWNrcyByZWdpc3RlcmVkIG9uIGEgc3BlY2lmaWMgdHlwZSB3aXRoIHRoZSBwcm92aWRlZCBkYXRhXG4gICAqIEBwYXJhbSB0eXBlXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqL1xuICBwcm90ZWN0ZWQgdHJpZ2dlckNhbGxiYWNrczxUIGV4dGVuZHMgQ2FsbGJhY2tUeXBlPihcbiAgICB0eXBlOiBULFxuICAgIGRhdGE6IENhbGxiYWNrRGF0YU1hcDxFeHRyYWN0ZWREYXRhPltUXSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY2FsbGJhY2tNYXAgPSB0aGlzLmNhbGxiYWNrc1t0eXBlXTtcbiAgICBjYWxsYmFja01hcC5mb3JFYWNoKChjYWxsYmFjaykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXG4gICAgICAgICAgYGNhbGxiYWNrIGZhaWxlZCBmb3IgJHt0eXBlfSBhY3Rpb24gb24gZGF0YSBbJHtkYXRhfV0gd2l0aCBlcnJvcjogJHtlfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogZm9yayBvbmUgYmxvY2sgYW5kIHJlbW92ZSBhbGwgc3RvcmVkIGluZm9ybWF0aW9uIGZvciB0aGlzIGJsb2NrXG4gICAqIEBwYXJhbSBoYXNoIGJsb2NrIGhhc2hcbiAgICovXG4gIGZvcmtCbG9jayA9IGFzeW5jIChoYXNoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFjdGlvbnMuZGVsZXRlQmxvY2tEYXRhKGhhc2gsIHRoaXMuZ2V0SWQoKSk7XG4gICAgaWYgKHJlc3VsdC5kZWxldGVkRGF0YS5sZW5ndGggPiAwKVxuICAgICAgdGhpcy50cmlnZ2VyQ2FsbGJhY2tzKENhbGxiYWNrVHlwZS5EZWxldGUsIHJlc3VsdC5kZWxldGVkRGF0YSk7XG4gICAgaWYgKHJlc3VsdC51cGRhdGVkRGF0YS5sZW5ndGggPiAwKVxuICAgICAgdGhpcy50cmlnZ2VyQ2FsbGJhY2tzKENhbGxiYWNrVHlwZS5VcGRhdGUsIHJlc3VsdC51cGRhdGVkRGF0YSk7XG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { AbstractLogger } from '@rosen-bridge/abstract-logger';
|
|
2
|
+
import { BlockInfo, Transaction } from '@rosen-bridge/scanner-interfaces';
|
|
3
|
+
import { AbstractErgoEntity } from '../database';
|
|
4
|
+
import { AbstractEntityData, InitializeOptions } from '../interfaces';
|
|
5
|
+
import { AbstractErgoExtractor } from './abstractErgoExtractor';
|
|
6
|
+
/**
|
|
7
|
+
* Abstract Ergo Tx Extractor class for tx-based data extraction.
|
|
8
|
+
*
|
|
9
|
+
* This class extends the AbstractErgoExtractor class and provides
|
|
10
|
+
* functionality for extracting tx-based data from the blockchain.
|
|
11
|
+
*
|
|
12
|
+
* It implements the `initializeData` method with ergo initializers.
|
|
13
|
+
* It implements the `processTransactions` method to extract and
|
|
14
|
+
* store data from transactions.
|
|
15
|
+
*
|
|
16
|
+
* Triggers `Insert` callback on new data insertion.
|
|
17
|
+
*
|
|
18
|
+
* @template ExtractedData - The type of data extracted from blockchain
|
|
19
|
+
* @template ExtractorEntity - The database entity type for storing extracted data
|
|
20
|
+
*/
|
|
21
|
+
export declare abstract class AbstractErgoTxExtractor<ExtractedData extends AbstractEntityData, ExtractorEntity extends AbstractErgoEntity> extends AbstractErgoExtractor<ExtractedData, ExtractorEntity> {
|
|
22
|
+
constructor(initializeOptions?: InitializeOptions, logger?: AbstractLogger);
|
|
23
|
+
/**
|
|
24
|
+
* Extract transaction data to proper format (not including spending information).
|
|
25
|
+
* This method should be overridden by subclasses that need transaction-based extraction.
|
|
26
|
+
* @param tx - The transaction to extract data from
|
|
27
|
+
* @returns extracted data in proper format or undefined if no data should be extracted
|
|
28
|
+
* @throws Error if not overridden by subclass
|
|
29
|
+
*/
|
|
30
|
+
abstract extractTxData: (tx: Transaction) => ExtractedData | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* Check if the transaction has the required data format.
|
|
33
|
+
* This method should be overridden by subclasses that need transaction-based extraction.
|
|
34
|
+
* @param tx - The transaction to check
|
|
35
|
+
* @returns true if the transaction has the required data and false otherwise
|
|
36
|
+
* @throws Error if not overridden by subclass
|
|
37
|
+
*/
|
|
38
|
+
abstract hasTxData: (tx: Transaction) => boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Process a list of transactions in a block and store required information.
|
|
41
|
+
* This method can be overridden by subclasses for custom transaction processing,
|
|
42
|
+
* or they can override extractTxData and hasTxData methods instead.
|
|
43
|
+
* @param txs - List of transactions in the block
|
|
44
|
+
* @param block - Block information
|
|
45
|
+
* @returns true if the process is completed successfully and false otherwise
|
|
46
|
+
*/
|
|
47
|
+
processTransactions: (txs: Transaction[], block: BlockInfo) => Promise<boolean>;
|
|
48
|
+
/**
|
|
49
|
+
* initialize extractor database with data created below the initial height
|
|
50
|
+
* @param initialBlock
|
|
51
|
+
*/
|
|
52
|
+
initializeData: (initialBlock: BlockInfo) => Promise<void>;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=abstractErgoTxExtractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abstractErgoTxExtractor.d.ts","sourceRoot":"","sources":["../../../lib/ergo/extractors/abstractErgoTxExtractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAE1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EACL,kBAAkB,EAElB,iBAAiB,EAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE;;;;;;;;;;;;;;GAcG;AACH,8BAAsB,uBAAuB,CAC3C,aAAa,SAAS,kBAAkB,EACxC,eAAe,SAAS,kBAAkB,CAC1C,SAAQ,qBAAqB,CAAC,aAAa,EAAE,eAAe,CAAC;gBACjD,iBAAiB,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,cAAc;IAI1E;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,aAAa,GAAG,SAAS,CAAC;IAEvE;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC;IAEjD;;;;;;;OAOG;IACH,mBAAmB,GACjB,KAAK,WAAW,EAAE,EAClB,OAAO,SAAS,KACf,OAAO,CAAC,OAAO,CAAC,CA0CjB;IAEF;;;OAGG;IACH,cAAc,GAAU,cAAc,SAAS,KAAG,OAAO,CAAC,IAAI,CAAC,CAe7D;CACH"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import JsonBigInt from '@rosen-bridge/json-bigint';
|
|
2
|
+
import { ErgoInitializer } from '../initializers';
|
|
3
|
+
import { CallbackType, } from '../interfaces';
|
|
4
|
+
import { AbstractErgoExtractor } from './abstractErgoExtractor';
|
|
5
|
+
/**
|
|
6
|
+
* Abstract Ergo Tx Extractor class for tx-based data extraction.
|
|
7
|
+
*
|
|
8
|
+
* This class extends the AbstractErgoExtractor class and provides
|
|
9
|
+
* functionality for extracting tx-based data from the blockchain.
|
|
10
|
+
*
|
|
11
|
+
* It implements the `initializeData` method with ergo initializers.
|
|
12
|
+
* It implements the `processTransactions` method to extract and
|
|
13
|
+
* store data from transactions.
|
|
14
|
+
*
|
|
15
|
+
* Triggers `Insert` callback on new data insertion.
|
|
16
|
+
*
|
|
17
|
+
* @template ExtractedData - The type of data extracted from blockchain
|
|
18
|
+
* @template ExtractorEntity - The database entity type for storing extracted data
|
|
19
|
+
*/
|
|
20
|
+
export class AbstractErgoTxExtractor extends AbstractErgoExtractor {
|
|
21
|
+
constructor(initializeOptions, logger) {
|
|
22
|
+
super(initializeOptions, logger);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Process a list of transactions in a block and store required information.
|
|
26
|
+
* This method can be overridden by subclasses for custom transaction processing,
|
|
27
|
+
* or they can override extractTxData and hasTxData methods instead.
|
|
28
|
+
* @param txs - List of transactions in the block
|
|
29
|
+
* @param block - Block information
|
|
30
|
+
* @returns true if the process is completed successfully and false otherwise
|
|
31
|
+
*/
|
|
32
|
+
processTransactions = async (txs, block) => {
|
|
33
|
+
try {
|
|
34
|
+
const txsData = [];
|
|
35
|
+
for (const tx of txs) {
|
|
36
|
+
if (!this.hasTxData(tx)) {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
this.logger.debug(`Trying to extract data from tx [${tx.id}]`);
|
|
40
|
+
const extractedData = this.extractTxData(tx);
|
|
41
|
+
if (extractedData) {
|
|
42
|
+
this.logger.debug(`Extracted data ${JsonBigInt.stringify(extractedData)} from tx ${tx.id}`);
|
|
43
|
+
txsData.push(extractedData);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (txsData.length > 0) {
|
|
47
|
+
if (!(await this.actions.storeEntities(txsData, block, this.getId()))) {
|
|
48
|
+
this.logger.warn(`Data insertion failed for ${this.getId()} at the block ${block.height}`);
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
this.triggerCallbacks(CallbackType.Insert, txsData);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
this.logger.error(`Processing transactions failed for ${this.getId()} at the block ${block.height} with error: ${e}`);
|
|
56
|
+
if (e instanceof Error && e.stack) {
|
|
57
|
+
this.logger.debug(`error stack: ${e.stack}`);
|
|
58
|
+
}
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
return true;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* initialize extractor database with data created below the initial height
|
|
65
|
+
* @param initialBlock
|
|
66
|
+
*/
|
|
67
|
+
initializeData = async (initialBlock) => {
|
|
68
|
+
if (this.initializeOptions && this.initializeOptions.active) {
|
|
69
|
+
const initializer = new ErgoInitializer(this.initializeOptions.type, this.initializeOptions.url, this.initializeOptions.address, this.getId(), this.processTransactions, this.actions, this.initializeOptions.maxParallelRequests, this.logger.child('ErgoInitializer'));
|
|
70
|
+
await initializer.initializeData(initialBlock);
|
|
71
|
+
}
|
|
72
|
+
else
|
|
73
|
+
this.logger.info(`Initializiation for [${this.getId()}] is turned off`);
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RFcmdvVHhFeHRyYWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZXJnby9leHRyYWN0b3JzL2Fic3RyYWN0RXJnb1R4RXh0cmFjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sVUFBVSxNQUFNLDJCQUEyQixDQUFDO0FBSW5ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBRUwsWUFBWSxHQUViLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWhFOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxPQUFnQix1QkFHcEIsU0FBUSxxQkFBcUQ7SUFDN0QsWUFBWSxpQkFBcUMsRUFBRSxNQUF1QjtRQUN4RSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQW9CRDs7Ozs7OztPQU9HO0lBQ0gsbUJBQW1CLEdBQUcsS0FBSyxFQUN6QixHQUFrQixFQUNsQixLQUFnQixFQUNFLEVBQUU7UUFDcEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQXlCLEVBQUUsQ0FBQztZQUN6QyxLQUFLLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUN4QixTQUFTO2dCQUNYLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUMvRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLGFBQWEsRUFBRSxDQUFDO29CQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDZixrQkFBa0IsVUFBVSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsWUFDbkQsRUFBRSxDQUFDLEVBQ0wsRUFBRSxDQUNILENBQUM7b0JBQ0YsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDOUIsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ3RFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNkLDZCQUE2QixJQUFJLENBQUMsS0FBSyxFQUFFLGlCQUN2QyxLQUFLLENBQUMsTUFDUixFQUFFLENBQ0gsQ0FBQztvQkFDRixPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO2dCQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3RELENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUNmLHNDQUFzQyxJQUFJLENBQUMsS0FBSyxFQUFFLGlCQUNoRCxLQUFLLENBQUMsTUFDUixnQkFBZ0IsQ0FBQyxFQUFFLENBQ3BCLENBQUM7WUFDRixJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDL0MsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0lBRUY7OztPQUdHO0lBQ0gsY0FBYyxHQUFHLEtBQUssRUFBRSxZQUF1QixFQUFpQixFQUFFO1FBQ2hFLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM1RCxNQUFNLFdBQVcsR0FBRyxJQUFJLGVBQWUsQ0FDckMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFDM0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFDOUIsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUNaLElBQUksQ0FBQyxtQkFBbUIsRUFDeEIsSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLEVBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQ3JDLENBQUM7WUFDRixNQUFNLFdBQVcsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDakQsQ0FBQzs7WUFDQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsSUFBSSxDQUFDLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQzVFLENBQUMsQ0FBQztDQUNIIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2Fic3RyYWN0LWxvZ2dlcic7XG5pbXBvcnQgSnNvbkJpZ0ludCBmcm9tICdAcm9zZW4tYnJpZGdlL2pzb24tYmlnaW50JztcbmltcG9ydCB7IEJsb2NrSW5mbywgVHJhbnNhY3Rpb24gfSBmcm9tICdAcm9zZW4tYnJpZGdlL3NjYW5uZXItaW50ZXJmYWNlcyc7XG5cbmltcG9ydCB7IEFic3RyYWN0RXJnb0VudGl0eSB9IGZyb20gJy4uL2RhdGFiYXNlJztcbmltcG9ydCB7IEVyZ29Jbml0aWFsaXplciB9IGZyb20gJy4uL2luaXRpYWxpemVycyc7XG5pbXBvcnQge1xuICBBYnN0cmFjdEVudGl0eURhdGEsXG4gIENhbGxiYWNrVHlwZSxcbiAgSW5pdGlhbGl6ZU9wdGlvbnMsXG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RFcmdvRXh0cmFjdG9yIH0gZnJvbSAnLi9hYnN0cmFjdEVyZ29FeHRyYWN0b3InO1xuXG4vKipcbiAqIEFic3RyYWN0IEVyZ28gVHggRXh0cmFjdG9yIGNsYXNzIGZvciB0eC1iYXNlZCBkYXRhIGV4dHJhY3Rpb24uXG4gKlxuICogVGhpcyBjbGFzcyBleHRlbmRzIHRoZSBBYnN0cmFjdEVyZ29FeHRyYWN0b3IgY2xhc3MgYW5kIHByb3ZpZGVzXG4gKiBmdW5jdGlvbmFsaXR5IGZvciBleHRyYWN0aW5nIHR4LWJhc2VkIGRhdGEgZnJvbSB0aGUgYmxvY2tjaGFpbi5cbiAqXG4gKiBJdCBpbXBsZW1lbnRzIHRoZSBgaW5pdGlhbGl6ZURhdGFgIG1ldGhvZCB3aXRoIGVyZ28gaW5pdGlhbGl6ZXJzLlxuICogSXQgaW1wbGVtZW50cyB0aGUgYHByb2Nlc3NUcmFuc2FjdGlvbnNgIG1ldGhvZCB0byBleHRyYWN0IGFuZFxuICogc3RvcmUgZGF0YSBmcm9tIHRyYW5zYWN0aW9ucy5cbiAqXG4gKiBUcmlnZ2VycyBgSW5zZXJ0YCBjYWxsYmFjayBvbiBuZXcgZGF0YSBpbnNlcnRpb24uXG4gKlxuICogQHRlbXBsYXRlIEV4dHJhY3RlZERhdGEgLSBUaGUgdHlwZSBvZiBkYXRhIGV4dHJhY3RlZCBmcm9tIGJsb2NrY2hhaW5cbiAqIEB0ZW1wbGF0ZSBFeHRyYWN0b3JFbnRpdHkgLSBUaGUgZGF0YWJhc2UgZW50aXR5IHR5cGUgZm9yIHN0b3JpbmcgZXh0cmFjdGVkIGRhdGFcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0RXJnb1R4RXh0cmFjdG9yPFxuICBFeHRyYWN0ZWREYXRhIGV4dGVuZHMgQWJzdHJhY3RFbnRpdHlEYXRhLFxuICBFeHRyYWN0b3JFbnRpdHkgZXh0ZW5kcyBBYnN0cmFjdEVyZ29FbnRpdHksXG4+IGV4dGVuZHMgQWJzdHJhY3RFcmdvRXh0cmFjdG9yPEV4dHJhY3RlZERhdGEsIEV4dHJhY3RvckVudGl0eT4ge1xuICBjb25zdHJ1Y3Rvcihpbml0aWFsaXplT3B0aW9ucz86IEluaXRpYWxpemVPcHRpb25zLCBsb2dnZXI/OiBBYnN0cmFjdExvZ2dlcikge1xuICAgIHN1cGVyKGluaXRpYWxpemVPcHRpb25zLCBsb2dnZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgdHJhbnNhY3Rpb24gZGF0YSB0byBwcm9wZXIgZm9ybWF0IChub3QgaW5jbHVkaW5nIHNwZW5kaW5nIGluZm9ybWF0aW9uKS5cbiAgICogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3NlcyB0aGF0IG5lZWQgdHJhbnNhY3Rpb24tYmFzZWQgZXh0cmFjdGlvbi5cbiAgICogQHBhcmFtIHR4IC0gVGhlIHRyYW5zYWN0aW9uIHRvIGV4dHJhY3QgZGF0YSBmcm9tXG4gICAqIEByZXR1cm5zIGV4dHJhY3RlZCBkYXRhIGluIHByb3BlciBmb3JtYXQgb3IgdW5kZWZpbmVkIGlmIG5vIGRhdGEgc2hvdWxkIGJlIGV4dHJhY3RlZFxuICAgKiBAdGhyb3dzIEVycm9yIGlmIG5vdCBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzXG4gICAqL1xuICBhYnN0cmFjdCBleHRyYWN0VHhEYXRhOiAodHg6IFRyYW5zYWN0aW9uKSA9PiBFeHRyYWN0ZWREYXRhIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgdHJhbnNhY3Rpb24gaGFzIHRoZSByZXF1aXJlZCBkYXRhIGZvcm1hdC5cbiAgICogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3NlcyB0aGF0IG5lZWQgdHJhbnNhY3Rpb24tYmFzZWQgZXh0cmFjdGlvbi5cbiAgICogQHBhcmFtIHR4IC0gVGhlIHRyYW5zYWN0aW9uIHRvIGNoZWNrXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHRyYW5zYWN0aW9uIGhhcyB0aGUgcmVxdWlyZWQgZGF0YSBhbmQgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgbm90IG92ZXJyaWRkZW4gYnkgc3ViY2xhc3NcbiAgICovXG4gIGFic3RyYWN0IGhhc1R4RGF0YTogKHR4OiBUcmFuc2FjdGlvbikgPT4gYm9vbGVhbjtcblxuICAvKipcbiAgICogUHJvY2VzcyBhIGxpc3Qgb2YgdHJhbnNhY3Rpb25zIGluIGEgYmxvY2sgYW5kIHN0b3JlIHJlcXVpcmVkIGluZm9ybWF0aW9uLlxuICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzIGZvciBjdXN0b20gdHJhbnNhY3Rpb24gcHJvY2Vzc2luZyxcbiAgICogb3IgdGhleSBjYW4gb3ZlcnJpZGUgZXh0cmFjdFR4RGF0YSBhbmQgaGFzVHhEYXRhIG1ldGhvZHMgaW5zdGVhZC5cbiAgICogQHBhcmFtIHR4cyAtIExpc3Qgb2YgdHJhbnNhY3Rpb25zIGluIHRoZSBibG9ja1xuICAgKiBAcGFyYW0gYmxvY2sgLSBCbG9jayBpbmZvcm1hdGlvblxuICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBwcm9jZXNzIGlzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgYW5kIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcHJvY2Vzc1RyYW5zYWN0aW9ucyA9IGFzeW5jIChcbiAgICB0eHM6IFRyYW5zYWN0aW9uW10sXG4gICAgYmxvY2s6IEJsb2NrSW5mbyxcbiAgKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHR4c0RhdGE6IEFycmF5PEV4dHJhY3RlZERhdGE+ID0gW107XG4gICAgICBmb3IgKGNvbnN0IHR4IG9mIHR4cykge1xuICAgICAgICBpZiAoIXRoaXMuaGFzVHhEYXRhKHR4KSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBUcnlpbmcgdG8gZXh0cmFjdCBkYXRhIGZyb20gdHggWyR7dHguaWR9XWApO1xuICAgICAgICBjb25zdCBleHRyYWN0ZWREYXRhID0gdGhpcy5leHRyYWN0VHhEYXRhKHR4KTtcbiAgICAgICAgaWYgKGV4dHJhY3RlZERhdGEpIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAgIGBFeHRyYWN0ZWQgZGF0YSAke0pzb25CaWdJbnQuc3RyaW5naWZ5KGV4dHJhY3RlZERhdGEpfSBmcm9tIHR4ICR7XG4gICAgICAgICAgICAgIHR4LmlkXG4gICAgICAgICAgICB9YCxcbiAgICAgICAgICApO1xuICAgICAgICAgIHR4c0RhdGEucHVzaChleHRyYWN0ZWREYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHhzRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmICghKGF3YWl0IHRoaXMuYWN0aW9ucy5zdG9yZUVudGl0aWVzKHR4c0RhdGEsIGJsb2NrLCB0aGlzLmdldElkKCkpKSkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oXG4gICAgICAgICAgICBgRGF0YSBpbnNlcnRpb24gZmFpbGVkIGZvciAke3RoaXMuZ2V0SWQoKX0gYXQgdGhlIGJsb2NrICR7XG4gICAgICAgICAgICAgIGJsb2NrLmhlaWdodFxuICAgICAgICAgICAgfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50cmlnZ2VyQ2FsbGJhY2tzKENhbGxiYWNrVHlwZS5JbnNlcnQsIHR4c0RhdGEpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICBgUHJvY2Vzc2luZyB0cmFuc2FjdGlvbnMgZmFpbGVkIGZvciAke3RoaXMuZ2V0SWQoKX0gYXQgdGhlIGJsb2NrICR7XG4gICAgICAgICAgYmxvY2suaGVpZ2h0XG4gICAgICAgIH0gd2l0aCBlcnJvcjogJHtlfWAsXG4gICAgICApO1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLnN0YWNrKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBlcnJvciBzdGFjazogJHtlLnN0YWNrfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvKipcbiAgICogaW5pdGlhbGl6ZSBleHRyYWN0b3IgZGF0YWJhc2Ugd2l0aCBkYXRhIGNyZWF0ZWQgYmVsb3cgdGhlIGluaXRpYWwgaGVpZ2h0XG4gICAqIEBwYXJhbSBpbml0aWFsQmxvY2tcbiAgICovXG4gIGluaXRpYWxpemVEYXRhID0gYXN5bmMgKGluaXRpYWxCbG9jazogQmxvY2tJbmZvKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZU9wdGlvbnMgJiYgdGhpcy5pbml0aWFsaXplT3B0aW9ucy5hY3RpdmUpIHtcbiAgICAgIGNvbnN0IGluaXRpYWxpemVyID0gbmV3IEVyZ29Jbml0aWFsaXplcihcbiAgICAgICAgdGhpcy5pbml0aWFsaXplT3B0aW9ucy50eXBlLFxuICAgICAgICB0aGlzLmluaXRpYWxpemVPcHRpb25zLnVybCxcbiAgICAgICAgdGhpcy5pbml0aWFsaXplT3B0aW9ucy5hZGRyZXNzLFxuICAgICAgICB0aGlzLmdldElkKCksXG4gICAgICAgIHRoaXMucHJvY2Vzc1RyYW5zYWN0aW9ucyxcbiAgICAgICAgdGhpcy5hY3Rpb25zLFxuICAgICAgICB0aGlzLmluaXRpYWxpemVPcHRpb25zLm1heFBhcmFsbGVsUmVxdWVzdHMsXG4gICAgICAgIHRoaXMubG9nZ2VyLmNoaWxkKCdFcmdvSW5pdGlhbGl6ZXInKSxcbiAgICAgICk7XG4gICAgICBhd2FpdCBpbml0aWFsaXplci5pbml0aWFsaXplRGF0YShpbml0aWFsQmxvY2spO1xuICAgIH0gZWxzZVxuICAgICAgdGhpcy5sb2dnZXIuaW5mbyhgSW5pdGlhbGl6aWF0aW9uIGZvciBbJHt0aGlzLmdldElkKCl9XSBpcyB0dXJuZWQgb2ZmYCk7XG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/ergo/extractors/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from './abstractErgoExtractor';
|
|
2
|
+
export * from './abstractErgoBoxExtractor';
|
|
3
|
+
export * from './abstractErgoTxExtractor';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9saWIvZXJnby9leHRyYWN0b3JzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hYnN0cmFjdEVyZ29FeHRyYWN0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9hYnN0cmFjdEVyZ29Cb3hFeHRyYWN0b3InO1xuZXhwb3J0ICogZnJvbSAnLi9hYnN0cmFjdEVyZ29UeEV4dHJhY3Rvcic7XG4iXX0=
|