@rosen-bridge/watcher-data-extractor 2.1.4 → 2.1.5
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/dist/migrations/index.d.ts +2 -2
- package/dist/migrations/index.d.ts.map +1 -1
- package/package.json +3 -3
- package/dist/actions/EventTriggerDB.d.ts +0 -33
- package/dist/actions/EventTriggerDB.d.ts.map +0 -1
- package/dist/actions/EventTriggerDB.js +0 -145
- package/dist/actions/commitmentDB.d.ts +0 -32
- package/dist/actions/commitmentDB.d.ts.map +0 -1
- package/dist/actions/commitmentDB.js +0 -129
- package/dist/actions/permitDB.d.ts +0 -39
- package/dist/actions/permitDB.d.ts.map +0 -1
- package/dist/actions/permitDB.js +0 -164
- package/dist/migrations/postgres/1683776413304-migration.d.ts +0 -7
- package/dist/migrations/postgres/1683776413304-migration.d.ts.map +0 -1
- package/dist/migrations/postgres/1683776413304-migration.js +0 -81
- package/dist/migrations/postgres/initMigration1671716035915.d.ts +0 -7
- package/dist/migrations/postgres/initMigration1671716035915.d.ts.map +0 -1
- package/dist/migrations/postgres/initMigration1671716035915.js +0 -61
- package/dist/migrations/postgres/migration1673422203223.d.ts +0 -7
- package/dist/migrations/postgres/migration1673422203223.d.ts.map +0 -1
- package/dist/migrations/postgres/migration1673422203223.js +0 -10
- package/dist/migrations/postgres/migration1676360759874.d.ts +0 -7
- package/dist/migrations/postgres/migration1676360759874.d.ts.map +0 -1
- package/dist/migrations/postgres/migration1676360759874.js +0 -14
- package/dist/migrations/postgres/migration1680777406000.d.ts +0 -7
- package/dist/migrations/postgres/migration1680777406000.d.ts.map +0 -1
- package/dist/migrations/postgres/migration1680777406000.js +0 -10
- package/dist/migrations/sqlite/1683776215472-migration.d.ts +0 -7
- package/dist/migrations/sqlite/1683776215472-migration.d.ts.map +0 -1
- package/dist/migrations/sqlite/1683776215472-migration.js +0 -78
- package/dist/migrations/sqlite/initMigration1659787165000.d.ts +0 -7
- package/dist/migrations/sqlite/initMigration1659787165000.d.ts.map +0 -1
- package/dist/migrations/sqlite/initMigration1659787165000.js +0 -61
- package/dist/migrations/sqlite/migration1673422203210.d.ts +0 -7
- package/dist/migrations/sqlite/migration1673422203210.d.ts.map +0 -1
- package/dist/migrations/sqlite/migration1673422203210.js +0 -10
- package/dist/migrations/sqlite/migration1676360753347.d.ts +0 -7
- package/dist/migrations/sqlite/migration1676360753347.d.ts.map +0 -1
- package/dist/migrations/sqlite/migration1676360753347.js +0 -14
- package/dist/migrations/sqlite/migration1680777424623.d.ts +0 -7
- package/dist/migrations/sqlite/migration1680777424623.d.ts.map +0 -1
- package/dist/migrations/sqlite/migration1680777424623.js +0 -10
- package/dist/network/ergoNetworkApi.d.ts +0 -15
- package/dist/network/ergoNetworkApi.d.ts.map +0 -1
- package/dist/network/ergoNetworkApi.js +0 -27
- package/dist/network/parser.d.ts +0 -8
- package/dist/network/parser.d.ts.map +0 -1
- package/dist/network/parser.js +0 -5
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { migration1688554842087 } from './postgres/1688554842087-migration';
|
|
2
|
-
import {
|
|
2
|
+
import { migration1688555766601 } from './sqlite/1688555766601-migration';
|
|
3
3
|
export declare const migrations: {
|
|
4
|
-
sqlite: (typeof
|
|
4
|
+
sqlite: (typeof migration1688555766601)[];
|
|
5
5
|
postgres: (typeof migration1688554842087)[];
|
|
6
6
|
};
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/migrations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/migrations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAE5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAG1E,eAAO,MAAM,UAAU;;;CAGtB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rosen-bridge/watcher-data-extractor",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.5",
|
|
4
4
|
"description": "Extractor for rosen specific boxes on ergo blockchain",
|
|
5
5
|
"author": "Rosen Team",
|
|
6
6
|
"license": "GPL-3.0",
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
],
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@rosen-bridge/logger-interface": "^0.1.0",
|
|
23
|
-
"@rosen-bridge/scanner": "^2.1.
|
|
24
|
-
"@rosen-clients/ergo-explorer": "^1.0.
|
|
23
|
+
"@rosen-bridge/scanner": "^2.1.4",
|
|
24
|
+
"@rosen-clients/ergo-explorer": "^1.0.1",
|
|
25
25
|
"@types/lodash-es": "^4.17.6",
|
|
26
26
|
"blakejs": "^1.2.1",
|
|
27
27
|
"ergo-lib-wasm-nodejs": "^0.24.0-alpha-1f24f53",
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { DataSource } from 'typeorm';
|
|
2
|
-
import { BlockEntity } from '@rosen-bridge/scanner';
|
|
3
|
-
import { AbstractLogger } from '@rosen-bridge/logger-interface';
|
|
4
|
-
import { ExtractedEventTrigger } from '../interfaces/extractedEventTrigger';
|
|
5
|
-
declare class EventTriggerDB {
|
|
6
|
-
readonly logger: AbstractLogger;
|
|
7
|
-
private readonly datasource;
|
|
8
|
-
private readonly triggerEventRepository;
|
|
9
|
-
constructor(dataSource: DataSource, logger: AbstractLogger);
|
|
10
|
-
/**
|
|
11
|
-
* It stores list of eventTriggers in the dataSource with block id
|
|
12
|
-
* @param eventTriggers
|
|
13
|
-
* @param block
|
|
14
|
-
* @param extractor
|
|
15
|
-
*/
|
|
16
|
-
storeEventTriggers: (eventTriggers: Array<ExtractedEventTrigger>, block: BlockEntity, extractor: string) => Promise<boolean>;
|
|
17
|
-
/**
|
|
18
|
-
* update spendBlock Column of the commitments in the dataBase
|
|
19
|
-
* @param spendId
|
|
20
|
-
* @param block
|
|
21
|
-
* @param extractor
|
|
22
|
-
* @param txId
|
|
23
|
-
*/
|
|
24
|
-
spendEventTriggers: (spendId: Array<string>, block: BlockEntity, extractor: string, txId: string) => Promise<void>;
|
|
25
|
-
/**
|
|
26
|
-
* deleting all permits corresponding to the block(id) and extractor(id)
|
|
27
|
-
* @param block
|
|
28
|
-
* @param extractor
|
|
29
|
-
*/
|
|
30
|
-
deleteBlock: (block: string, extractor: string) => Promise<void>;
|
|
31
|
-
}
|
|
32
|
-
export default EventTriggerDB;
|
|
33
|
-
//# sourceMappingURL=EventTriggerDB.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EventTriggerDB.d.ts","sourceRoot":"","sources":["../../lib/actions/EventTriggerDB.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAkB,MAAM,SAAS,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAK5E,cAAM,cAAc;IAClB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAiC;gBAE5D,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc;IAM1D;;;;;OAKG;IACH,kBAAkB,kBACD,MAAM,qBAAqB,CAAC,SACpC,WAAW,aACP,MAAM,sBAqEjB;IAEF;;;;;;OAMG;IACH,kBAAkB,YACP,MAAM,MAAM,CAAC,SACf,WAAW,aACP,MAAM,QACX,MAAM,KACX,QAAQ,IAAI,CAAC,CA4Bd;IAEF;;;;OAIG;IACH,WAAW,UAAiB,MAAM,aAAa,MAAM,mBAsBnD;CACH;AAED,eAAe,cAAc,CAAC"}
|
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import { In } from 'typeorm';
|
|
2
|
-
import EventTriggerEntity from '../entities/EventTriggerEntity';
|
|
3
|
-
import eventTriggerEntity from '../entities/EventTriggerEntity';
|
|
4
|
-
import { chunk } from 'lodash-es';
|
|
5
|
-
import { dbIdChunkSize } from '../constants';
|
|
6
|
-
class EventTriggerDB {
|
|
7
|
-
logger;
|
|
8
|
-
datasource;
|
|
9
|
-
triggerEventRepository;
|
|
10
|
-
constructor(dataSource, logger) {
|
|
11
|
-
this.datasource = dataSource;
|
|
12
|
-
this.logger = logger;
|
|
13
|
-
this.triggerEventRepository = dataSource.getRepository(EventTriggerEntity);
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* It stores list of eventTriggers in the dataSource with block id
|
|
17
|
-
* @param eventTriggers
|
|
18
|
-
* @param block
|
|
19
|
-
* @param extractor
|
|
20
|
-
*/
|
|
21
|
-
storeEventTriggers = async (eventTriggers, block, extractor) => {
|
|
22
|
-
if (eventTriggers.length === 0)
|
|
23
|
-
return true;
|
|
24
|
-
const boxIds = eventTriggers.map((trigger) => trigger.boxId);
|
|
25
|
-
const savedTriggers = await this.triggerEventRepository.findBy({
|
|
26
|
-
boxId: In(boxIds),
|
|
27
|
-
extractor: extractor,
|
|
28
|
-
});
|
|
29
|
-
let success = true;
|
|
30
|
-
const queryRunner = this.datasource.createQueryRunner();
|
|
31
|
-
await queryRunner.connect();
|
|
32
|
-
await queryRunner.startTransaction();
|
|
33
|
-
try {
|
|
34
|
-
for (const trigger of eventTriggers) {
|
|
35
|
-
const saved = savedTriggers.some((entity) => {
|
|
36
|
-
return entity.boxId === trigger.boxId;
|
|
37
|
-
});
|
|
38
|
-
const entity = {
|
|
39
|
-
txId: trigger.txId,
|
|
40
|
-
eventId: trigger.eventId,
|
|
41
|
-
boxId: trigger.boxId,
|
|
42
|
-
boxSerialized: trigger.boxSerialized,
|
|
43
|
-
block: block.hash,
|
|
44
|
-
height: block.height,
|
|
45
|
-
extractor: extractor,
|
|
46
|
-
WIDs: trigger.WIDs,
|
|
47
|
-
amount: trigger.amount,
|
|
48
|
-
bridgeFee: trigger.bridgeFee,
|
|
49
|
-
fromAddress: trigger.fromAddress,
|
|
50
|
-
toAddress: trigger.toAddress,
|
|
51
|
-
fromChain: trigger.fromChain,
|
|
52
|
-
networkFee: trigger.networkFee,
|
|
53
|
-
sourceChainTokenId: trigger.sourceChainTokenId,
|
|
54
|
-
targetChainTokenId: trigger.targetChainTokenId,
|
|
55
|
-
sourceBlockId: trigger.sourceBlockId,
|
|
56
|
-
toChain: trigger.toChain,
|
|
57
|
-
sourceTxId: trigger.sourceTxId,
|
|
58
|
-
sourceChainHeight: trigger.sourceChainHeight,
|
|
59
|
-
};
|
|
60
|
-
if (!saved) {
|
|
61
|
-
this.logger.info(`Storing event trigger [${trigger.boxId}] for event [${trigger.eventId}] at height ${block.height} and extractor ${extractor}`);
|
|
62
|
-
await queryRunner.manager.insert(EventTriggerEntity, entity);
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
this.logger.info(`Updating event trigger ${trigger.boxId} for event [${trigger.eventId}] at height ${block.height} and extractor ${extractor}`);
|
|
66
|
-
await queryRunner.manager.update(EventTriggerEntity, {
|
|
67
|
-
boxId: trigger.boxId,
|
|
68
|
-
}, entity);
|
|
69
|
-
}
|
|
70
|
-
this.logger.debug(`Entity: ${JSON.stringify(entity)}`);
|
|
71
|
-
}
|
|
72
|
-
await queryRunner.commitTransaction();
|
|
73
|
-
}
|
|
74
|
-
catch (e) {
|
|
75
|
-
this.logger.error(`An error occurred during store eventTrigger action: ${e}`);
|
|
76
|
-
await queryRunner.rollbackTransaction();
|
|
77
|
-
success = false;
|
|
78
|
-
}
|
|
79
|
-
finally {
|
|
80
|
-
await queryRunner.release();
|
|
81
|
-
}
|
|
82
|
-
return success;
|
|
83
|
-
};
|
|
84
|
-
/**
|
|
85
|
-
* update spendBlock Column of the commitments in the dataBase
|
|
86
|
-
* @param spendId
|
|
87
|
-
* @param block
|
|
88
|
-
* @param extractor
|
|
89
|
-
* @param txId
|
|
90
|
-
*/
|
|
91
|
-
spendEventTriggers = async (spendId, block, extractor, txId) => {
|
|
92
|
-
const spendIdChunks = chunk(spendId, dbIdChunkSize);
|
|
93
|
-
for (const spendIdChunk of spendIdChunks) {
|
|
94
|
-
const updateResult = await this.datasource
|
|
95
|
-
.createQueryBuilder()
|
|
96
|
-
.update(eventTriggerEntity)
|
|
97
|
-
.set({
|
|
98
|
-
spendBlock: block.hash,
|
|
99
|
-
spendHeight: block.height,
|
|
100
|
-
spendTxId: txId,
|
|
101
|
-
})
|
|
102
|
-
.where({ boxId: In(spendIdChunk) })
|
|
103
|
-
.andWhere({ extractor: extractor })
|
|
104
|
-
.execute();
|
|
105
|
-
if (updateResult.affected && updateResult.affected > 0) {
|
|
106
|
-
const spentRows = await this.triggerEventRepository.findBy({
|
|
107
|
-
boxId: In(spendIdChunk),
|
|
108
|
-
spendBlock: block.hash,
|
|
109
|
-
});
|
|
110
|
-
for (const row of spentRows) {
|
|
111
|
-
this.logger.info(`Spent trigger [${row.boxId}] of event [${row.eventId}] at height ${block.height}`);
|
|
112
|
-
this.logger.debug(`Spent trigger: [${JSON.stringify(row)}]`);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
};
|
|
117
|
-
/**
|
|
118
|
-
* deleting all permits corresponding to the block(id) and extractor(id)
|
|
119
|
-
* @param block
|
|
120
|
-
* @param extractor
|
|
121
|
-
*/
|
|
122
|
-
deleteBlock = async (block, extractor) => {
|
|
123
|
-
this.logger.info(`Deleting event triggers at block ${block} and extractor ${extractor}`);
|
|
124
|
-
await this.datasource
|
|
125
|
-
.createQueryBuilder()
|
|
126
|
-
.delete()
|
|
127
|
-
.from(EventTriggerEntity)
|
|
128
|
-
.where('extractor = :extractor AND block = :block', {
|
|
129
|
-
block: block,
|
|
130
|
-
extractor: extractor,
|
|
131
|
-
})
|
|
132
|
-
.execute();
|
|
133
|
-
//TODO: should handled null value in spendBlockHeight
|
|
134
|
-
await this.datasource
|
|
135
|
-
.createQueryBuilder()
|
|
136
|
-
.update(EventTriggerEntity)
|
|
137
|
-
.set({ spendBlock: undefined, spendHeight: 0 })
|
|
138
|
-
.where('spendBlock = :block AND block = :block', {
|
|
139
|
-
block: block,
|
|
140
|
-
})
|
|
141
|
-
.execute();
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
export default EventTriggerDB;
|
|
145
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnRUcmlnZ2VyREIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvYWN0aW9ucy9FdmVudFRyaWdnZXJEQi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsRUFBRSxFQUFjLE1BQU0sU0FBUyxDQUFDO0FBQ3JELE9BQU8sa0JBQWtCLE1BQU0sZ0NBQWdDLENBQUM7QUFJaEUsT0FBTyxrQkFBa0IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0MsTUFBTSxjQUFjO0lBQ1QsTUFBTSxDQUFpQjtJQUNmLFVBQVUsQ0FBYTtJQUN2QixzQkFBc0IsQ0FBaUM7SUFFeEUsWUFBWSxVQUFzQixFQUFFLE1BQXNCO1FBQ3hELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsa0JBQWtCLEdBQUcsS0FBSyxFQUN4QixhQUEyQyxFQUMzQyxLQUFrQixFQUNsQixTQUFpQixFQUNqQixFQUFFO1FBQ0YsSUFBSSxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUM1QyxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0QsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDO1lBQzdELEtBQUssRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2pCLFNBQVMsRUFB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QUFDLEtBQUssZUFBZSxHQUFHLENBQUMsT0FBTyxlQUFlLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FDbkYsQ0FBQztvQkFDRixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQzlEO2FBQ0Y7U0FDRjtJQUNILENBQUMsQ0FBQztJQUVGOzs7O09BSUc7SUFDSCxXQUFXLEdBQUcsS0FBSyxFQUFFLEtBQWEsRUFBRSxTQUFpQixFQUFFLEVBQUU7UUFDdkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2Qsb0NBQW9DLEtBQUssa0JBQWtCLFNBQVMsRUFBRSxDQUN2RSxDQUFDO1FBQ0YsTUFBTSxJQUFJLENBQUMsVUFBVTthQUNsQixrQkFBa0IsRUFBRTthQUNwQixNQUFNLEVBQUU7YUFDUixJQUFJLENBQUMsa0JBQWtCLENBQUM7YUFDeEIsS0FBSyxDQUFDLDJDQUEyQyxFQUFFO1lBQ2xELEtBQUssRUFBRSxLQUFLO1lBQ1osU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQzthQUNELE9BQU8sRUFBRSxDQUFDO1FBQ2IscURBQXFEO1FBQ3JELE1BQU0sSUFBSSxDQUFDLFVBQVU7YUFDbEIsa0JBQWtCLEVBQUU7YUFDcEIsTUFBTSxDQUFDLGtCQUFrQixDQUFDO2FBQzFCLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDO2FBQzlDLEtBQUssQ0FBQyx3Q0FBd0MsRUFBRTtZQUMvQyxLQUFLLEVBQUUsS0FBSztTQUNiLENBQUM7YUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNmLENBQUMsQ0FBQztDQUNIO0FBRUQsZUFBZSxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRhU291cmNlLCBJbiwgUmVwb3NpdG9yeSB9IGZyb20gJ3R5cGVvcm0nO1xuaW1wb3J0IEV2ZW50VHJpZ2dlckVudGl0eSBmcm9tICcuLi9lbnRpdGllcy9FdmVudFRyaWdnZXJFbnRpdHknO1xuaW1wb3J0IHsgQmxvY2tFbnRpdHkgfSBmcm9tICdAcm9zZW4tYnJpZGdlL3NjYW5uZXInO1xuaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2xvZ2dlci1pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRXh0cmFjdGVkRXZlbnRUcmlnZ2VyIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9leHRyYWN0ZWRFdmVudFRyaWdnZXInO1xuaW1wb3J0IGV2ZW50VHJpZ2dlckVudGl0eSBmcm9tICcuLi9lbnRpdGllcy9FdmVudFRyaWdnZXJFbnRpdHknO1xuaW1wb3J0IHsgY2h1bmsgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgZGJJZENodW5rU2l6ZSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmNsYXNzIEV2ZW50VHJpZ2dlckRCIHtcbiAgcmVhZG9ubHkgbG9nZ2VyOiBBYnN0cmFjdExvZ2dlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBkYXRhc291cmNlOiBEYXRhU291cmNlO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyaWdnZXJFdmVudFJlcG9zaXRvcnk6IFJlcG9zaXRvcnk8RXZlbnRUcmlnZ2VyRW50aXR5PjtcblxuICBjb25zdHJ1Y3RvcihkYXRhU291cmNlOiBEYXRhU291cmNlLCBsb2dnZXI6IEFic3RyYWN0TG9nZ2VyKSB7XG4gICAgdGhpcy5kYXRhc291cmNlID0gZGF0YVNvdXJjZTtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgICB0aGlzLnRyaWdnZXJFdmVudFJlcG9zaXRvcnkgPSBkYXRhU291cmNlLmdldFJlcG9zaXRvcnkoRXZlbnRUcmlnZ2VyRW50aXR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCBzdG9yZXMgbGlzdCBvZiBldmVudFRyaWdnZXJzIGluIHRoZSBkYXRhU291cmNlIHdpdGggYmxvY2sgaWRcbiAgICogQHBhcmFtIGV2ZW50VHJpZ2dlcnNcbiAgICogQHBhcmFtIGJsb2NrXG4gICAqIEBwYXJhbSBleHRyYWN0b3JcbiAgICovXG4gIHN0b3JlRXZlbnRUcmlnZ2VycyA9IGFzeW5jIChcbiAgICBldmVudFRyaWdnZXJzOiBBcnJheTxFeHRyYWN0ZWRFdmVudFRyaWdnZXI+LFxuICAgIGJsb2NrOiBCbG9ja0VudGl0eSxcbiAgICBleHRyYWN0b3I6IHN0cmluZ1xuICApID0+IHtcbiAgICBpZiAoZXZlbnRUcmlnZ2Vycy5sZW5ndGggPT09IDApIHJldHVybiB0cnVlO1xuICAgIGNvbnN0IGJveElkcyA9IGV2ZW50VHJpZ2dlcnMubWFwKCh0cmlnZ2VyKSA9PiB0cmlnZ2VyLmJveElkKTtcbiAgICBjb25zdCBzYXZlZFRyaWdnZXJzID0gYXdhaXQgdGhpcy50cmlnZ2VyRXZlbnRSZXBvc2l0b3J5LmZpbmRCeSh7XG4gICAgICBib3hJZDogSW4oYm94SWRzKSxcbiAgICAgIGV4dHJhY3RvcjogZXh0cmFjdG9yLFxuICAgIH0pO1xuICAgIGxldCBzdWNjZXNzID0gdHJ1ZTtcbiAgICBjb25zdCBxdWVyeVJ1bm5lciA9IHRoaXMuZGF0YXNvdXJjZS5jcmVhdGVRdWVyeVJ1bm5lcigpO1xuICAgIGF3YWl0IHF1ZXJ5UnVubmVyLmNvbm5lY3QoKTtcbiAgICBhd2FpdCBxdWVyeVJ1bm5lci5zdGFydFRyYW5zYWN0aW9uKCk7XG4gICAgdHJ5IHtcbiAgICAgIGZvciAoY29uc3QgdHJpZ2dlciBvZiBldmVudFRyaWdnZXJzKSB7XG4gICAgICAgIGNvbnN0IHNhdmVkID0gc2F2ZWRUcmlnZ2Vycy5zb21lKChlbnRpdHkpID0+IHtcbiAgICAgICAgICByZXR1cm4gZW50aXR5LmJveElkID09PSB0cmlnZ2VyLmJveElkO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW50aXR5ID0ge1xuICAgICAgICAgIHR4SWQ6IHRyaWdnZXIudHhJZCxcbiAgICAgICAgICBldmVudElkOiB0cmlnZ2VyLmV2ZW50SWQsXG4gICAgICAgICAgYm94SWQ6IHRyaWdnZXIuYm94SWQsXG4gICAgICAgICAgYm94U2VyaWFsaXplZDogdHJpZ2dlci5ib3hTZXJpYWxpemVkLFxuICAgICAgICAgIGJsb2NrOiBibG9jay5oYXNoLFxuICAgICAgICAgIGhlaWdodDogYmxvY2suaGVpZ2h0LFxuICAgICAgICAgIGV4dHJhY3RvcjogZXh0cmFjdG9yLFxuICAgICAgICAgIFdJRHM6IHRyaWdnZXIuV0lEcyxcbiAgICAgICAgICBhbW91bnQ6IHRyaWdnZXIuYW1vdW50LFxuICAgICAgICAgIGJyaWRnZUZlZTogdHJpZ2dlci5icmlkZ2VGZWUsXG4gICAgICAgICAgZnJvbUFkZHJlc3M6IHRyaWdnZXIuZnJvbUFkZHJlc3MsXG4gICAgICAgICAgdG9BZGRyZXNzOiB0cmlnZ2VyLnRvQWRkcmVzcyxcbiAgICAgICAgICBmcm9tQ2hhaW46IHRyaWdnZXIuZnJvbUNoYWluLFxuICAgICAgICAgIG5ldHdvcmtGZWU6IHRyaWdnZXIubmV0d29ya0ZlZSxcbiAgICAgICAgICBzb3VyY2VDaGFpblRva2VuSWQ6IHRyaWdnZXIuc291cmNlQ2hhaW5Ub2tlbklkLFxuICAgICAgICAgIHRhcmdldENoYWluVG9rZW5JZDogdHJpZ2dlci50YXJnZXRDaGFpblRva2VuSWQsXG4gICAgICAgICAgc291cmNlQmxvY2tJZDogdHJpZ2dlci5zb3VyY2VCbG9ja0lkLFxuICAgICAgICAgIHRvQ2hhaW46IHRyaWdnZXIudG9DaGFpbixcbiAgICAgICAgICBzb3VyY2VUeElkOiB0cmlnZ2VyLnNvdXJjZVR4SWQsXG4gICAgICAgICAgc291cmNlQ2hhaW5IZWlnaHQ6IHRyaWdnZXIuc291cmNlQ2hhaW5IZWlnaHQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICghc2F2ZWQpIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgYFN0b3JpbmcgZXZlbnQgdHJpZ2dlciBbJHt0cmlnZ2VyLmJveElkfV0gZm9yIGV2ZW50IFske3RyaWdnZXIuZXZlbnRJZH1dIGF0IGhlaWdodCAke2Jsb2NrLmhlaWdodH0gYW5kIGV4dHJhY3RvciAke2V4dHJhY3Rvcn1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhd2FpdCBxdWVyeVJ1bm5lci5tYW5hZ2VyLmluc2VydChFdmVudFRyaWdnZXJFbnRpdHksIGVudGl0eSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIGBVcGRhdGluZyBldmVudCB0cmlnZ2VyICR7dHJpZ2dlci5ib3hJZH0gZm9yIGV2ZW50IFske3RyaWdnZXIuZXZlbnRJZH1dIGF0IGhlaWdodCAke2Jsb2NrLmhlaWdodH0gYW5kIGV4dHJhY3RvciAke2V4dHJhY3Rvcn1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhd2FpdCBxdWVyeVJ1bm5lci5tYW5hZ2VyLnVwZGF0ZShcbiAgICAgICAgICAgIEV2ZW50VHJpZ2dlckVudGl0eSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYm94SWQ6IHRyaWdnZXIuYm94SWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW50aXR5XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgRW50aXR5OiAke0pTT04uc3RyaW5naWZ5KGVudGl0eSl9YCk7XG4gICAgICB9XG4gICAgICBhd2FpdCBxdWVyeVJ1bm5lci5jb21taXRUcmFuc2FjdGlvbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICBgQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHN0b3JlIGV2ZW50VHJpZ2dlciBhY3Rpb246ICR7ZX1gXG4gICAgICApO1xuICAgICAgYXdhaXQgcXVlcnlSdW5uZXIucm9sbGJhY2tUcmFuc2FjdGlvbigpO1xuICAgICAgc3VjY2VzcyA9IGZhbHNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBxdWVyeVJ1bm5lci5yZWxlYXNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9O1xuXG4gIC8qKlxuICAgKiB1cGRhdGUgc3BlbmRCbG9jayBDb2x1bW4gb2YgdGhlIGNvbW1pdG1lbnRzIGluIHRoZSBkYXRhQmFzZVxuICAgKiBAcGFyYW0gc3BlbmRJZFxuICAgKiBAcGFyYW0gYmxvY2tcbiAgICogQHBhcmFtIGV4dHJhY3RvclxuICAgKiBAcGFyYW0gdHhJZFxuICAgKi9cbiAgc3BlbmRFdmVudFRyaWdnZXJzID0gYXN5bmMgKFxuICAgIHNwZW5kSWQ6IEFycmF5PHN0cmluZz4sXG4gICAgYmxvY2s6IEJsb2NrRW50aXR5LFxuICAgIGV4dHJhY3Rvcjogc3RyaW5nLFxuICAgIHR4SWQ6IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCBzcGVuZElkQ2h1bmtzID0gY2h1bmsoc3BlbmRJZCwgZGJJZENodW5rU2l6ZSk7XG4gICAgZm9yIChjb25zdCBzcGVuZElkQ2h1bmsgb2Ygc3BlbmRJZENodW5rcykge1xuICAgICAgY29uc3QgdXBkYXRlUmVzdWx0ID0gYXdhaXQgdGhpcy5kYXRhc291cmNlXG4gICAgICAgIC5jcmVhdGVRdWVyeUJ1aWxkZXIoKVxuICAgICAgICAudXBkYXRlKGV2ZW50VHJpZ2dlckVudGl0eSlcbiAgICAgICAgLnNldCh7XG4gICAgICAgICAgc3BlbmRCbG9jazogYmxvY2suaGFzaCxcbiAgICAgICAgICBzcGVuZEhlaWdodDogYmxvY2suaGVpZ2h0LFxuICAgICAgICAgIHNwZW5kVHhJZDogdHhJZCxcbiAgICAgICAgfSlcbiAgICAgICAgLndoZXJlKHsgYm94SWQ6IEluKHNwZW5kSWRDaHVuaykgfSlcbiAgICAgICAgLmFuZFdoZXJlKHsgZXh0cmFjdG9yOiBleHRyYWN0b3IgfSlcbiAgICAgICAgLmV4ZWN1dGUoKTtcblxuICAgICAgaWYgKHVwZGF0ZVJlc3VsdC5hZmZlY3RlZCAmJiB1cGRhdGVSZXN1bHQuYWZmZWN0ZWQgPiAwKSB7XG4gICAgICAgIGNvbnN0IHNwZW50Um93cyA9IGF3YWl0IHRoaXMudHJpZ2dlckV2ZW50UmVwb3NpdG9yeS5maW5kQnkoe1xuICAgICAgICAgIGJveElkOiBJbihzcGVuZElkQ2h1bmspLFxuICAgICAgICAgIHNwZW5kQmxvY2s6IGJsb2NrLmhhc2gsXG4gICAgICAgIH0pO1xuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiBzcGVudFJvd3MpIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgYFNwZW50IHRyaWdnZXIgWyR7cm93LmJveElkfV0gb2YgZXZlbnQgWyR7cm93LmV2ZW50SWR9XSBhdCBoZWlnaHQgJHtibG9jay5oZWlnaHR9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYFNwZW50IHRyaWdnZXI6IFske0pTT04uc3RyaW5naWZ5KHJvdyl9XWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBkZWxldGluZyBhbGwgcGVybWl0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBibG9jayhpZCkgYW5kIGV4dHJhY3RvcihpZClcbiAgICogQHBhcmFtIGJsb2NrXG4gICAqIEBwYXJhbSBleHRyYWN0b3JcbiAgICovXG4gIGRlbGV0ZUJsb2NrID0gYXN5bmMgKGJsb2NrOiBzdHJpbmcsIGV4dHJhY3Rvcjogc3RyaW5nKSA9PiB7XG4gICAgdGhpcy5sb2dnZXIuaW5mbyhcbiAgICAgIGBEZWxldGluZyBldmVudCB0cmlnZ2VycyBhdCBibG9jayAke2Jsb2NrfSBhbmQgZXh0cmFjdG9yICR7ZXh0cmFjdG9yfWBcbiAgICApO1xuICAgIGF3YWl0IHRoaXMuZGF0YXNvdXJjZVxuICAgICAgLmNyZWF0ZVF1ZXJ5QnVpbGRlcigpXG4gICAgICAuZGVsZXRlKClcbiAgICAgIC5mcm9tKEV2ZW50VHJpZ2dlckVudGl0eSlcbiAgICAgIC53aGVyZSgnZXh0cmFjdG9yID0gOmV4dHJhY3RvciBBTkQgYmxvY2sgPSA6YmxvY2snLCB7XG4gICAgICAgIGJsb2NrOiBibG9jayxcbiAgICAgICAgZXh0cmFjdG9yOiBleHRyYWN0b3IsXG4gICAgICB9KVxuICAgICAgLmV4ZWN1dGUoKTtcbiAgICAvL1RPRE86IHNob3VsZCBoYW5kbGVkIG51bGwgdmFsdWUgaW4gc3BlbmRCbG9ja0hlaWdodFxuICAgIGF3YWl0IHRoaXMuZGF0YXNvdXJjZVxuICAgICAgLmNyZWF0ZVF1ZXJ5QnVpbGRlcigpXG4gICAgICAudXBkYXRlKEV2ZW50VHJpZ2dlckVudGl0eSlcbiAgICAgIC5zZXQoeyBzcGVuZEJsb2NrOiB1bmRlZmluZWQsIHNwZW5kSGVpZ2h0OiAwIH0pXG4gICAgICAud2hlcmUoJ3NwZW5kQmxvY2sgPSA6YmxvY2sgQU5EIGJsb2NrID0gOmJsb2NrJywge1xuICAgICAgICBibG9jazogYmxvY2ssXG4gICAgICB9KVxuICAgICAgLmV4ZWN1dGUoKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRXZlbnRUcmlnZ2VyREI7XG4iXX0=
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { DataSource } from 'typeorm';
|
|
2
|
-
import { extractedCommitment } from '../interfaces/extractedCommitment';
|
|
3
|
-
import { BlockEntity } from '@rosen-bridge/scanner';
|
|
4
|
-
import { AbstractLogger } from '@rosen-bridge/logger-interface';
|
|
5
|
-
declare class CommitmentEntityAction {
|
|
6
|
-
readonly logger: AbstractLogger;
|
|
7
|
-
private readonly datasource;
|
|
8
|
-
private readonly commitmentRepository;
|
|
9
|
-
constructor(dataSource: DataSource, logger: AbstractLogger);
|
|
10
|
-
/**
|
|
11
|
-
* It stores list of observations in the dataSource with block id
|
|
12
|
-
* @param commitments
|
|
13
|
-
* @param block
|
|
14
|
-
* @param extractor
|
|
15
|
-
*/
|
|
16
|
-
storeCommitments: (commitments: Array<extractedCommitment>, block: BlockEntity, extractor: string) => Promise<boolean>;
|
|
17
|
-
/**
|
|
18
|
-
* update spendBlock Column of the commitments in the dataBase
|
|
19
|
-
* @param spendId
|
|
20
|
-
* @param block
|
|
21
|
-
* @param extractor
|
|
22
|
-
*/
|
|
23
|
-
spendCommitments: (spendId: Array<string>, block: BlockEntity, extractor: string) => Promise<void>;
|
|
24
|
-
/**
|
|
25
|
-
* deleting all permits corresponding to the block(id) and extractor(id)
|
|
26
|
-
* @param block
|
|
27
|
-
* @param extractor
|
|
28
|
-
*/
|
|
29
|
-
deleteBlockCommitment: (block: string, extractor: string) => Promise<void>;
|
|
30
|
-
}
|
|
31
|
-
export default CommitmentEntityAction;
|
|
32
|
-
//# sourceMappingURL=commitmentDB.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commitmentDB.d.ts","sourceRoot":"","sources":["../../lib/actions/commitmentDB.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAkB,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAIhE,cAAM,sBAAsB;IAC1B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA+B;gBAExD,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc;IAM1D;;;;;OAKG;IACH,gBAAgB,gBACD,MAAM,mBAAmB,CAAC,SAChC,WAAW,aACP,MAAM,KAChB,QAAQ,OAAO,CAAC,CA0DjB;IAEF;;;;;OAKG;IACH,gBAAgB,YACL,MAAM,MAAM,CAAC,SACf,WAAW,aACP,MAAM,KAChB,QAAQ,IAAI,CAAC,CAwBd;IAEF;;;;OAIG;IACH,qBAAqB,UAAiB,MAAM,aAAa,MAAM,mBAsB7D;CACH;AAED,eAAe,sBAAsB,CAAC"}
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
import { In } from 'typeorm';
|
|
2
|
-
import CommitmentEntity from '../entities/CommitmentEntity';
|
|
3
|
-
import { chunk } from 'lodash-es';
|
|
4
|
-
import { dbIdChunkSize } from '../constants';
|
|
5
|
-
class CommitmentEntityAction {
|
|
6
|
-
logger;
|
|
7
|
-
datasource;
|
|
8
|
-
commitmentRepository;
|
|
9
|
-
constructor(dataSource, logger) {
|
|
10
|
-
this.datasource = dataSource;
|
|
11
|
-
this.logger = logger;
|
|
12
|
-
this.commitmentRepository = dataSource.getRepository(CommitmentEntity);
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* It stores list of observations in the dataSource with block id
|
|
16
|
-
* @param commitments
|
|
17
|
-
* @param block
|
|
18
|
-
* @param extractor
|
|
19
|
-
*/
|
|
20
|
-
storeCommitments = async (commitments, block, extractor) => {
|
|
21
|
-
if (commitments.length === 0)
|
|
22
|
-
return true;
|
|
23
|
-
const boxIds = commitments.map((commitment) => commitment.boxId);
|
|
24
|
-
const savedCommitments = await this.commitmentRepository.findBy({
|
|
25
|
-
boxId: In(boxIds),
|
|
26
|
-
extractor: extractor,
|
|
27
|
-
});
|
|
28
|
-
let success = true;
|
|
29
|
-
const queryRunner = this.datasource.createQueryRunner();
|
|
30
|
-
await queryRunner.connect();
|
|
31
|
-
await queryRunner.startTransaction();
|
|
32
|
-
try {
|
|
33
|
-
for (const commitment of commitments) {
|
|
34
|
-
const saved = savedCommitments.some((entity) => {
|
|
35
|
-
return entity.boxId === commitment.boxId;
|
|
36
|
-
});
|
|
37
|
-
const entity = {
|
|
38
|
-
txId: commitment.txId,
|
|
39
|
-
commitment: commitment.commitment,
|
|
40
|
-
eventId: commitment.eventId,
|
|
41
|
-
boxId: commitment.boxId,
|
|
42
|
-
WID: commitment.WID,
|
|
43
|
-
extractor: extractor,
|
|
44
|
-
block: block.hash,
|
|
45
|
-
height: block.height,
|
|
46
|
-
boxSerialized: commitment.boxSerialized,
|
|
47
|
-
rwtCount: commitment.rwtCount,
|
|
48
|
-
};
|
|
49
|
-
if (!saved) {
|
|
50
|
-
this.logger.info(`Saving commitment [${commitment.boxId}] for event [${commitment.eventId}] from watcher [${commitment.WID}] at height ${block.height} and extractor ${extractor}`);
|
|
51
|
-
await queryRunner.manager.insert(CommitmentEntity, entity);
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
this.logger.info(`Updating commitment [${commitment.boxId}] for event [${commitment.eventId}] from watcher [${commitment.WID}] at height ${block.height} and extractor ${extractor}`);
|
|
55
|
-
await queryRunner.manager.update(CommitmentEntity, {
|
|
56
|
-
boxId: commitment.boxId,
|
|
57
|
-
}, entity);
|
|
58
|
-
}
|
|
59
|
-
this.logger.debug(`Entity: ${JSON.stringify(entity)}`);
|
|
60
|
-
}
|
|
61
|
-
await queryRunner.commitTransaction();
|
|
62
|
-
}
|
|
63
|
-
catch (e) {
|
|
64
|
-
this.logger.error(`An error occurred during store commitments action: ${e}`);
|
|
65
|
-
await queryRunner.rollbackTransaction();
|
|
66
|
-
success = false;
|
|
67
|
-
}
|
|
68
|
-
finally {
|
|
69
|
-
await queryRunner.release();
|
|
70
|
-
}
|
|
71
|
-
return success;
|
|
72
|
-
};
|
|
73
|
-
/**
|
|
74
|
-
* update spendBlock Column of the commitments in the dataBase
|
|
75
|
-
* @param spendId
|
|
76
|
-
* @param block
|
|
77
|
-
* @param extractor
|
|
78
|
-
*/
|
|
79
|
-
spendCommitments = async (spendId, block, extractor) => {
|
|
80
|
-
const spendIdChunks = chunk(spendId, dbIdChunkSize);
|
|
81
|
-
for (const spendIdChunk of spendIdChunks) {
|
|
82
|
-
const updateResult = await this.datasource
|
|
83
|
-
.createQueryBuilder()
|
|
84
|
-
.update(CommitmentEntity)
|
|
85
|
-
.set({ spendBlock: block.hash, spendHeight: block.height })
|
|
86
|
-
.where({ boxId: In(spendIdChunk) })
|
|
87
|
-
.andWhere({ extractor: extractor })
|
|
88
|
-
.execute();
|
|
89
|
-
if (updateResult.affected && updateResult.affected > 0) {
|
|
90
|
-
const spentRows = await this.commitmentRepository.findBy({
|
|
91
|
-
boxId: In(spendIdChunk),
|
|
92
|
-
spendBlock: block.hash,
|
|
93
|
-
});
|
|
94
|
-
for (const row of spentRows) {
|
|
95
|
-
this.logger.info(`Spent commitment [${row.boxId}] for event [${row.eventId}] at height ${block.height}`);
|
|
96
|
-
this.logger.debug(`Spent commitment [${JSON.stringify(row)}]`);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
|
-
/**
|
|
102
|
-
* deleting all permits corresponding to the block(id) and extractor(id)
|
|
103
|
-
* @param block
|
|
104
|
-
* @param extractor
|
|
105
|
-
*/
|
|
106
|
-
deleteBlockCommitment = async (block, extractor) => {
|
|
107
|
-
this.logger.info(`Deleting commitments of block [${block}] and extractor ${extractor}`);
|
|
108
|
-
await this.datasource
|
|
109
|
-
.createQueryBuilder()
|
|
110
|
-
.delete()
|
|
111
|
-
.from(CommitmentEntity)
|
|
112
|
-
.where('extractor = :extractor AND block = :block', {
|
|
113
|
-
block: block,
|
|
114
|
-
extractor: extractor,
|
|
115
|
-
})
|
|
116
|
-
.execute();
|
|
117
|
-
//TODO: should handled null value in spendBlockHeight
|
|
118
|
-
await this.datasource
|
|
119
|
-
.createQueryBuilder()
|
|
120
|
-
.update(CommitmentEntity)
|
|
121
|
-
.set({ spendBlock: undefined, spendHeight: 0 })
|
|
122
|
-
.where('spendBlock = :block AND block = :block', {
|
|
123
|
-
block: block,
|
|
124
|
-
})
|
|
125
|
-
.execute();
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
export default CommitmentEntityAction;
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWl0bWVudERCLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2FjdGlvbnMvY29tbWl0bWVudERCLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxFQUFFLEVBQWMsTUFBTSxTQUFTLENBQUM7QUFFckQsT0FBTyxnQkFBZ0IsTUFBTSw4QkFBOEIsQ0FBQztBQUc1RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0MsTUFBTSxzQkFBc0I7SUFDakIsTUFBTSxDQUFpQjtJQUNmLFVBQVUsQ0FBYTtJQUN2QixvQkFBb0IsQ0FBK0I7SUFFcEUsWUFBWSxVQUFzQixFQUFFLE1BQXNCO1FBQ3hELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsZ0JBQWdCLEdBQUcsS0FBSyxFQUN0QixXQUF1QyxFQUN2QyxLQUFrQixFQUNsQixTQUFpQixFQUNDLEVBQUU7UUFDcEIsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakUsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUM7WUFDOUQsS0FBSyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDakIsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxP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QUNsQixrQkFBa0IsRUFBRTthQUNwQixNQUFNLEVBQUU7YUFDUixJQUFJLENBQUMsZ0JBQWdCLENBQUM7YUFDdEIsS0FBSyxDQUFDLDJDQUEyQyxFQUFFO1lBQ2xELEtBQUssRUFBRSxLQUFLO1lBQ1osU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQzthQUNELE9BQU8sRUFBRSxDQUFDO1FBQ2IscURBQXFEO1FBQ3JELE1BQU0sSUFBSSxDQUFDLFVBQVU7YUFDbEIsa0JBQWtCLEVBQUU7YUFDcEIsTUFBTSxDQUFDLGdCQUFnQixDQUFDO2FBQ3hCLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDO2FBQzlDLEtBQUssQ0FBQyx3Q0FBd0MsRUFBRTtZQUMvQyxLQUFLLEVBQUUsS0FBSztTQUNiLENBQUM7YUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNmLENBQUMsQ0FBQztDQUNIO0FBRUQsZUFBZSxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFTb3VyY2UsIEluLCBSZXBvc2l0b3J5IH0gZnJvbSAndHlwZW9ybSc7XG5pbXBvcnQgeyBleHRyYWN0ZWRDb21taXRtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9leHRyYWN0ZWRDb21taXRtZW50JztcbmltcG9ydCBDb21taXRtZW50RW50aXR5IGZyb20gJy4uL2VudGl0aWVzL0NvbW1pdG1lbnRFbnRpdHknO1xuaW1wb3J0IHsgQmxvY2tFbnRpdHkgfSBmcm9tICdAcm9zZW4tYnJpZGdlL3NjYW5uZXInO1xuaW1wb3J0IHsgQWJzdHJhY3RMb2dnZXIgfSBmcm9tICdAcm9zZW4tYnJpZGdlL2xvZ2dlci1pbnRlcmZhY2UnO1xuaW1wb3J0IHsgY2h1bmsgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgZGJJZENodW5rU2l6ZSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmNsYXNzIENvbW1pdG1lbnRFbnRpdHlBY3Rpb24ge1xuICByZWFkb25seSBsb2dnZXI6IEFic3RyYWN0TG9nZ2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGFzb3VyY2U6IERhdGFTb3VyY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29tbWl0bWVudFJlcG9zaXRvcnk6IFJlcG9zaXRvcnk8Q29tbWl0bWVudEVudGl0eT47XG5cbiAgY29uc3RydWN0b3IoZGF0YVNvdXJjZTogRGF0YVNvdXJjZSwgbG9nZ2VyOiBBYnN0cmFjdExvZ2dlcikge1xuICAgIHRoaXMuZGF0YXNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XG4gICAgdGhpcy5jb21taXRtZW50UmVwb3NpdG9yeSA9IGRhdGFTb3VyY2UuZ2V0UmVwb3NpdG9yeShDb21taXRtZW50RW50aXR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCBzdG9yZXMgbGlzdCBvZiBvYnNlcnZhdGlvbnMgaW4gdGhlIGRhdGFTb3VyY2Ugd2l0aCBibG9jayBpZFxuICAgKiBAcGFyYW0gY29tbWl0bWVudHNcbiAgICogQHBhcmFtIGJsb2NrXG4gICAqIEBwYXJhbSBleHRyYWN0b3JcbiAgICovXG4gIHN0b3JlQ29tbWl0bWVudHMgPSBhc3luYyAoXG4gICAgY29tbWl0bWVudHM6IEFycmF5PGV4dHJhY3RlZENvbW1pdG1lbnQ+LFxuICAgIGJsb2NrOiBCbG9ja0VudGl0eSxcbiAgICBleHRyYWN0b3I6IHN0cmluZ1xuICApOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgICBpZiAoY29tbWl0bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICBjb25zdCBib3hJZHMgPSBjb21taXRtZW50cy5tYXAoKGNvbW1pdG1lbnQpID0+IGNvbW1pdG1lbnQuYm94SWQpO1xuICAgIGNvbnN0IHNhdmVkQ29tbWl0bWVudHMgPSBhd2FpdCB0aGlzLmNvbW1pdG1lbnRSZXBvc2l0b3J5LmZpbmRCeSh7XG4gICAgICBib3hJZDogSW4oYm94SWRzKSxcbiAgICAgIGV4dHJhY3RvcjogZXh0cmFjdG9yLFxuICAgIH0pO1xuICAgIGxldCBzdWNjZXNzID0gdHJ1ZTtcbiAgICBjb25zdCBxdWVyeVJ1bm5lciA9IHRoaXMuZGF0YXNvdXJjZS5jcmVhdGVRdWVyeVJ1bm5lcigpO1xuICAgIGF3YWl0IHF1ZXJ5UnVubmVyLmNvbm5lY3QoKTtcbiAgICBhd2FpdCBxdWVyeVJ1bm5lci5zdGFydFRyYW5zYWN0aW9uKCk7XG4gICAgdHJ5IHtcbiAgICAgIGZvciAoY29uc3QgY29tbWl0bWVudCBvZiBjb21taXRtZW50cykge1xuICAgICAgICBjb25zdCBzYXZlZCA9IHNhdmVkQ29tbWl0bWVudHMuc29tZSgoZW50aXR5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVudGl0eS5ib3hJZCA9PT0gY29tbWl0bWVudC5ib3hJZDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IHtcbiAgICAgICAgICB0eElkOiBjb21taXRtZW50LnR4SWQsXG4gICAgICAgICAgY29tbWl0bWVudDogY29tbWl0bWVudC5jb21taXRtZW50LFxuICAgICAgICAgIGV2ZW50SWQ6IGNvbW1pdG1lbnQuZXZlbnRJZCxcbiAgICAgICAgICBib3hJZDogY29tbWl0bWVudC5ib3hJZCxcbiAgICAgICAgICBXSUQ6IGNvbW1pdG1lbnQuV0lELFxuICAgICAgICAgIGV4dHJhY3RvcjogZXh0cmFjdG9yLFxuICAgICAgICAgIGJsb2NrOiBibG9jay5oYXNoLFxuICAgICAgICAgIGhlaWdodDogYmxvY2suaGVpZ2h0LFxuICAgICAgICAgIGJveFNlcmlhbGl6ZWQ6IGNvbW1pdG1lbnQuYm94U2VyaWFsaXplZCxcbiAgICAgICAgICByd3RDb3VudDogY29tbWl0bWVudC5yd3RDb3VudCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFzYXZlZCkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oXG4gICAgICAgICAgICBgU2F2aW5nIGNvbW1pdG1lbnQgWyR7Y29tbWl0bWVudC5ib3hJZH1dIGZvciBldmVudCBbJHtjb21taXRtZW50LmV2ZW50SWR9XSBmcm9tIHdhdGNoZXIgWyR7Y29tbWl0bWVudC5XSUR9XSBhdCBoZWlnaHQgJHtibG9jay5oZWlnaHR9IGFuZCBleHRyYWN0b3IgJHtleHRyYWN0b3J9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgcXVlcnlSdW5uZXIubWFuYWdlci5pbnNlcnQoQ29tbWl0bWVudEVudGl0eSwgZW50aXR5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgYFVwZGF0aW5nIGNvbW1pdG1lbnQgWyR7Y29tbWl0bWVudC5ib3hJZH1dIGZvciBldmVudCBbJHtjb21taXRtZW50LmV2ZW50SWR9XSBmcm9tIHdhdGNoZXIgWyR7Y29tbWl0bWVudC5XSUR9XSBhdCBoZWlnaHQgJHtibG9jay5oZWlnaHR9IGFuZCBleHRyYWN0b3IgJHtleHRyYWN0b3J9YFxuICAgICAgICAgICk7XG4gICAgICAgICAgYXdhaXQgcXVlcnlSdW5uZXIubWFuYWdlci51cGRhdGUoXG4gICAgICAgICAgICBDb21taXRtZW50RW50aXR5LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBib3hJZDogY29tbWl0bWVudC5ib3hJZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbnRpdHlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBFbnRpdHk6ICR7SlNPTi5zdHJpbmdpZnkoZW50aXR5KX1gKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHF1ZXJ5UnVubmVyLmNvbW1pdFRyYW5zYWN0aW9uKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXG4gICAgICAgIGBBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgc3RvcmUgY29tbWl0bWVudHMgYWN0aW9uOiAke2V9YFxuICAgICAgKTtcbiAgICAgIGF3YWl0IHF1ZXJ5UnVubmVyLnJvbGxiYWNrVHJhbnNhY3Rpb24oKTtcbiAgICAgIHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgcXVlcnlSdW5uZXIucmVsZWFzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfTtcblxuICAvKipcbiAgICogdXBkYXRlIHNwZW5kQmxvY2sgQ29sdW1uIG9mIHRoZSBjb21taXRtZW50cyBpbiB0aGUgZGF0YUJhc2VcbiAgICogQHBhcmFtIHNwZW5kSWRcbiAgICogQHBhcmFtIGJsb2NrXG4gICAqIEBwYXJhbSBleHRyYWN0b3JcbiAgICovXG4gIHNwZW5kQ29tbWl0bWVudHMgPSBhc3luYyAoXG4gICAgc3BlbmRJZDogQXJyYXk8c3RyaW5nPixcbiAgICBibG9jazogQmxvY2tFbnRpdHksXG4gICAgZXh0cmFjdG9yOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3Qgc3BlbmRJZENodW5rcyA9IGNodW5rKHNwZW5kSWQsIGRiSWRDaHVua1NpemUpO1xuICAgIGZvciAoY29uc3Qgc3BlbmRJZENodW5rIG9mIHNwZW5kSWRDaHVua3MpIHtcbiAgICAgIGNvbnN0IHVwZGF0ZVJlc3VsdCA9IGF3YWl0IHRoaXMuZGF0YXNvdXJjZVxuICAgICAgICAuY3JlYXRlUXVlcnlCdWlsZGVyKClcbiAgICAgICAgLnVwZGF0ZShDb21taXRtZW50RW50aXR5KVxuICAgICAgICAuc2V0KHsgc3BlbmRCbG9jazogYmxvY2suaGFzaCwgc3BlbmRIZWlnaHQ6IGJsb2NrLmhlaWdodCB9KVxuICAgICAgICAud2hlcmUoeyBib3hJZDogSW4oc3BlbmRJZENodW5rKSB9KVxuICAgICAgICAuYW5kV2hlcmUoeyBleHRyYWN0b3I6IGV4dHJhY3RvciB9KVxuICAgICAgICAuZXhlY3V0ZSgpO1xuXG4gICAgICBpZiAodXBkYXRlUmVzdWx0LmFmZmVjdGVkICYmIHVwZGF0ZVJlc3VsdC5hZmZlY3RlZCA+IDApIHtcbiAgICAgICAgY29uc3Qgc3BlbnRSb3dzID0gYXdhaXQgdGhpcy5jb21taXRtZW50UmVwb3NpdG9yeS5maW5kQnkoe1xuICAgICAgICAgIGJveElkOiBJbihzcGVuZElkQ2h1bmspLFxuICAgICAgICAgIHNwZW5kQmxvY2s6IGJsb2NrLmhhc2gsXG4gICAgICAgIH0pO1xuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiBzcGVudFJvd3MpIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKFxuICAgICAgICAgICAgYFNwZW50IGNvbW1pdG1lbnQgWyR7cm93LmJveElkfV0gZm9yIGV2ZW50IFske3Jvdy5ldmVudElkfV0gYXQgaGVpZ2h0ICR7YmxvY2suaGVpZ2h0fWBcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBTcGVudCBjb21taXRtZW50IFske0pTT04uc3RyaW5naWZ5KHJvdyl9XWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBkZWxldGluZyBhbGwgcGVybWl0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBibG9jayhpZCkgYW5kIGV4dHJhY3RvcihpZClcbiAgICogQHBhcmFtIGJsb2NrXG4gICAqIEBwYXJhbSBleHRyYWN0b3JcbiAgICovXG4gIGRlbGV0ZUJsb2NrQ29tbWl0bWVudCA9IGFzeW5jIChibG9jazogc3RyaW5nLCBleHRyYWN0b3I6IHN0cmluZykgPT4ge1xuICAgIHRoaXMubG9nZ2VyLmluZm8oXG4gICAgICBgRGVsZXRpbmcgY29tbWl0bWVudHMgb2YgYmxvY2sgWyR7YmxvY2t9XSBhbmQgZXh0cmFjdG9yICR7ZXh0cmFjdG9yfWBcbiAgICApO1xuICAgIGF3YWl0IHRoaXMuZGF0YXNvdXJjZVxuICAgICAgLmNyZWF0ZVF1ZXJ5QnVpbGRlcigpXG4gICAgICAuZGVsZXRlKClcbiAgICAgIC5mcm9tKENvbW1pdG1lbnRFbnRpdHkpXG4gICAgICAud2hlcmUoJ2V4dHJhY3RvciA9IDpleHRyYWN0b3IgQU5EIGJsb2NrID0gOmJsb2NrJywge1xuICAgICAgICBibG9jazogYmxvY2ssXG4gICAgICAgIGV4dHJhY3RvcjogZXh0cmFjdG9yLFxuICAgICAgfSlcbiAgICAgIC5leGVjdXRlKCk7XG4gICAgLy9UT0RPOiBzaG91bGQgaGFuZGxlZCBudWxsIHZhbHVlIGluIHNwZW5kQmxvY2tIZWlnaHRcbiAgICBhd2FpdCB0aGlzLmRhdGFzb3VyY2VcbiAgICAgIC5jcmVhdGVRdWVyeUJ1aWxkZXIoKVxuICAgICAgLnVwZGF0ZShDb21taXRtZW50RW50aXR5KVxuICAgICAgLnNldCh7IHNwZW5kQmxvY2s6IHVuZGVmaW5lZCwgc3BlbmRIZWlnaHQ6IDAgfSlcbiAgICAgIC53aGVyZSgnc3BlbmRCbG9jayA9IDpibG9jayBBTkQgYmxvY2sgPSA6YmxvY2snLCB7XG4gICAgICAgIGJsb2NrOiBibG9jayxcbiAgICAgIH0pXG4gICAgICAuZXhlY3V0ZSgpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb21taXRtZW50RW50aXR5QWN0aW9uO1xuIl19
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { DataSource } from 'typeorm';
|
|
2
|
-
import { ExtractedPermit } from '../interfaces/extractedPermit';
|
|
3
|
-
import { BlockEntity } from '@rosen-bridge/scanner';
|
|
4
|
-
import { AbstractLogger } from '@rosen-bridge/logger-interface';
|
|
5
|
-
declare class PermitEntityAction {
|
|
6
|
-
readonly logger: AbstractLogger;
|
|
7
|
-
private readonly datasource;
|
|
8
|
-
private readonly permitRepository;
|
|
9
|
-
constructor(dataSource: DataSource, logger: AbstractLogger);
|
|
10
|
-
/**
|
|
11
|
-
* stores initial permit boxes in the database
|
|
12
|
-
* @param permits
|
|
13
|
-
* @param initialHeight
|
|
14
|
-
* @param extractor
|
|
15
|
-
*/
|
|
16
|
-
storeInitialPermits: (permits: Array<ExtractedPermit>, initialHeight: number, extractor: string) => Promise<boolean>;
|
|
17
|
-
/**
|
|
18
|
-
* It stores list of permits in the dataSource with block id
|
|
19
|
-
* @param permits
|
|
20
|
-
* @param block
|
|
21
|
-
* @param extractor
|
|
22
|
-
*/
|
|
23
|
-
storePermits: (permits: Array<ExtractedPermit>, block: BlockEntity, extractor: string) => Promise<boolean>;
|
|
24
|
-
/**
|
|
25
|
-
* update spendBlock Column of the permits in the dataBase
|
|
26
|
-
* @param spendId
|
|
27
|
-
* @param block
|
|
28
|
-
* @param extractor
|
|
29
|
-
*/
|
|
30
|
-
spendPermits: (spendId: Array<string>, block: BlockEntity, extractor: string) => Promise<void>;
|
|
31
|
-
/**
|
|
32
|
-
* deleting all permits corresponding to the block(id) and extractor(id)
|
|
33
|
-
* @param block
|
|
34
|
-
* @param extractor
|
|
35
|
-
*/
|
|
36
|
-
deleteBlock: (block: string, extractor: string) => Promise<void>;
|
|
37
|
-
}
|
|
38
|
-
export default PermitEntityAction;
|
|
39
|
-
//# sourceMappingURL=permitDB.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"permitDB.d.ts","sourceRoot":"","sources":["../../lib/actions/permitDB.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA4B,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAKhE,cAAM,kBAAkB;IACtB,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA2B;gBAEhD,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc;IAM1D;;;;;OAKG;IACH,mBAAmB,YACR,MAAM,eAAe,CAAC,iBAChB,MAAM,aACV,MAAM,KAChB,QAAQ,OAAO,CAAC,CAqCjB;IAEF;;;;;OAKG;IACH,YAAY,YACD,MAAM,eAAe,CAAC,SACxB,WAAW,aACP,MAAM,sBAqDjB;IAEF;;;;;OAKG;IACH,YAAY,YACD,MAAM,MAAM,CAAC,SACf,WAAW,aACP,MAAM,KAChB,QAAQ,IAAI,CAAC,CAuBd;IAEF;;;;OAIG;IAEH,WAAW,UAAiB,MAAM,aAAa,MAAM,KAAG,QAAQ,IAAI,CAAC,CAsBnE;CACH;AAED,eAAe,kBAAkB,CAAC"}
|