@subql/node-ethereum 2.12.6-1 → 2.12.6-2
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 +11 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/configure/NodeConfig.d.ts +21 -0
- package/dist/configure/NodeConfig.js +31 -0
- package/dist/configure/NodeConfig.js.map +1 -0
- package/dist/configure/SubqueryProject.d.ts +21 -29
- package/dist/configure/SubqueryProject.js +48 -72
- package/dist/configure/SubqueryProject.js.map +1 -1
- package/dist/configure/configure.module.d.ts +2 -2
- package/dist/configure/configure.module.js +19 -89
- package/dist/configure/configure.module.js.map +1 -1
- package/dist/ethereum/api.connection.d.ts +7 -7
- package/dist/ethereum/api.connection.js +4 -4
- package/dist/ethereum/api.connection.js.map +1 -1
- package/dist/ethereum/api.ethereum.d.ts +14 -8
- package/dist/ethereum/api.ethereum.js +24 -13
- package/dist/ethereum/api.ethereum.js.map +1 -1
- package/dist/ethereum/api.ethereum.test.js +29 -32
- package/dist/ethereum/api.ethereum.test.js.map +1 -1
- package/dist/ethereum/api.service.ethereum.d.ts +9 -7
- package/dist/ethereum/api.service.ethereum.js +56 -64
- package/dist/ethereum/api.service.ethereum.js.map +1 -1
- package/dist/ethereum/api.service.ethereum.test.js +8 -13
- package/dist/ethereum/api.service.ethereum.test.js.map +1 -1
- package/dist/ethereum/block.ethereum.d.ts +6 -15
- package/dist/ethereum/block.ethereum.js +52 -79
- package/dist/ethereum/block.ethereum.js.map +1 -1
- package/dist/ethereum/ethers/celo/celo-json-rpc-batch-provider.spec.js +3 -6
- package/dist/ethereum/ethers/celo/celo-json-rpc-batch-provider.spec.js.map +1 -1
- package/dist/ethereum/ethers/celo/celo-json-rpc-provider.spec.js +3 -6
- package/dist/ethereum/ethers/celo/celo-json-rpc-provider.spec.js.map +1 -1
- package/dist/ethereum/ethers/celo/celo-ws-provider.spec.js +3 -6
- package/dist/ethereum/ethers/celo/celo-ws-provider.spec.js.map +1 -1
- package/dist/indexer/blockDispatcher/block-dispatcher.service.d.ts +7 -7
- package/dist/indexer/blockDispatcher/block-dispatcher.service.js +7 -6
- package/dist/indexer/blockDispatcher/block-dispatcher.service.js.map +1 -1
- package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.d.ts +4 -4
- package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js +9 -18
- package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js.map +1 -1
- package/dist/indexer/dictionary.service.d.ts +3 -3
- package/dist/indexer/dictionary.service.js +7 -5
- package/dist/indexer/dictionary.service.js.map +1 -1
- package/dist/indexer/dynamic-ds.service.d.ts +3 -3
- package/dist/indexer/dynamic-ds.service.js.map +1 -1
- package/dist/indexer/fetch.module.js +8 -10
- package/dist/indexer/fetch.module.js.map +1 -1
- package/dist/indexer/fetch.service.d.ts +10 -10
- package/dist/indexer/fetch.service.js +22 -43
- package/dist/indexer/fetch.service.js.map +1 -1
- package/dist/indexer/fetch.service.spec.js +25 -45
- package/dist/indexer/fetch.service.spec.js.map +1 -1
- package/dist/indexer/indexer.manager.d.ts +10 -12
- package/dist/indexer/indexer.manager.js +20 -30
- package/dist/indexer/indexer.manager.js.map +1 -1
- package/dist/indexer/project.service.d.ts +8 -6
- package/dist/indexer/project.service.js +19 -12
- package/dist/indexer/project.service.js.map +1 -1
- package/dist/indexer/project.service.test.d.ts +1 -0
- package/dist/indexer/project.service.test.js +26 -0
- package/dist/indexer/project.service.test.js.map +1 -0
- package/dist/indexer/sandbox.service.d.ts +1 -1
- package/dist/indexer/sandbox.service.js +1 -0
- package/dist/indexer/sandbox.service.js.map +1 -1
- package/dist/indexer/types.d.ts +2 -11
- package/dist/indexer/types.js +0 -6
- package/dist/indexer/types.js.map +1 -1
- package/dist/indexer/unfinalizedBlocks.service.d.ts +4 -4
- package/dist/indexer/unfinalizedBlocks.service.js +25 -1
- package/dist/indexer/unfinalizedBlocks.service.js.map +1 -1
- package/dist/indexer/worker/worker.d.ts +4 -28
- package/dist/indexer/worker/worker.js +8 -71
- package/dist/indexer/worker/worker.js.map +1 -1
- package/dist/indexer/worker/worker.module.js +2 -2
- package/dist/indexer/worker/worker.module.js.map +1 -1
- package/dist/indexer/worker/worker.service.d.ts +11 -13
- package/dist/indexer/worker/worker.service.js +14 -56
- package/dist/indexer/worker/worker.service.js.map +1 -1
- package/dist/indexer/worker/worker.unfinalizedBlocks.service.d.ts +4 -8
- package/dist/indexer/worker/worker.unfinalizedBlocks.service.js +8 -7
- package/dist/indexer/worker/worker.unfinalizedBlocks.service.js.map +1 -1
- package/dist/indexer/worker-fetch.module.d.ts +2 -0
- package/dist/indexer/{indexer.module.js → worker-fetch.module.js} +10 -33
- package/dist/indexer/worker-fetch.module.js.map +1 -0
- package/dist/init.js +1 -1
- package/dist/init.js.map +1 -1
- package/dist/main.js +4 -8
- package/dist/main.js.map +1 -1
- package/dist/subcommands/reindex.init.js +1 -2
- package/dist/subcommands/reindex.init.js.map +1 -1
- package/dist/subcommands/reindex.module.js +10 -6
- package/dist/subcommands/reindex.module.js.map +1 -1
- package/dist/subcommands/testing.init.js +2 -4
- package/dist/subcommands/testing.init.js.map +1 -1
- package/dist/subcommands/testing.module.js +3 -8
- package/dist/subcommands/testing.module.js.map +1 -1
- package/dist/subcommands/testing.service.d.ts +8 -5
- package/dist/subcommands/testing.service.js +3 -8
- package/dist/subcommands/testing.service.js.map +1 -1
- package/dist/utils/project.d.ts +5 -4
- package/dist/utils/project.js +17 -1
- package/dist/utils/project.js.map +1 -1
- package/dist/yargs.d.ts +7 -90
- package/dist/yargs.js +9 -112
- package/dist/yargs.js.map +1 -1
- package/package.json +8 -8
- package/dist/indexer/indexer.module.d.ts +0 -2
- package/dist/indexer/indexer.module.js.map +0 -1
- package/dist/subcommands/mmrMigrate.init.d.ts +0 -2
- package/dist/subcommands/mmrMigrate.init.js +0 -28
- package/dist/subcommands/mmrMigrate.init.js.map +0 -1
- package/dist/subcommands/mmrMigrate.module.d.ts +0 -2
- package/dist/subcommands/mmrMigrate.module.js +0 -28
- package/dist/subcommands/mmrMigrate.module.js.map +0 -1
- package/dist/subcommands/mmrRegenerate.init.d.ts +0 -1
- package/dist/subcommands/mmrRegenerate.init.js +0 -28
- package/dist/subcommands/mmrRegenerate.init.js.map +0 -1
- package/dist/subcommands/mmrRegenerate.module.d.ts +0 -2
- package/dist/subcommands/mmrRegenerate.module.js +0 -30
- package/dist/subcommands/mmrRegenerate.module.js.map +0 -1
- package/dist/subcommands/reindex.service.d.ts +0 -11
- package/dist/subcommands/reindex.service.js +0 -46
- package/dist/subcommands/reindex.service.js.map +0 -1
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { OnApplicationShutdown } from '@nestjs/common';
|
|
2
2
|
import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
3
|
-
import { NodeConfig, SmartBatchService, StoreCacheService, StoreService, IProjectService, PoiService, BlockDispatcher, ProcessBlockResponse, ApiService } from '@subql/node-core';
|
|
4
|
-
import {
|
|
5
|
-
import { SubqlProjectDs, SubqueryProject } from '../../configure/SubqueryProject';
|
|
3
|
+
import { NodeConfig, SmartBatchService, StoreCacheService, StoreService, IProjectService, PoiService, BlockDispatcher, ProcessBlockResponse, ApiService, IProjectUpgradeService } from '@subql/node-core';
|
|
4
|
+
import { EthereumProjectDs, SubqueryProject } from '../../configure/SubqueryProject';
|
|
6
5
|
import { DynamicDsService } from '../dynamic-ds.service';
|
|
7
6
|
import { IndexerManager } from '../indexer.manager';
|
|
7
|
+
import { BlockContent } from '../types';
|
|
8
8
|
/**
|
|
9
9
|
* @description Intended to behave the same as WorkerBlockDispatcherService but doesn't use worker threads or any parallel processing
|
|
10
10
|
*/
|
|
11
|
-
export declare class BlockDispatcherService extends BlockDispatcher<
|
|
11
|
+
export declare class BlockDispatcherService extends BlockDispatcher<BlockContent, EthereumProjectDs> implements OnApplicationShutdown {
|
|
12
12
|
private indexerManager;
|
|
13
|
-
constructor(apiService: ApiService, nodeConfig: NodeConfig, indexerManager: IndexerManager, eventEmitter: EventEmitter2, projectService: IProjectService<
|
|
14
|
-
protected getBlockHeight(block:
|
|
15
|
-
protected indexBlock(block:
|
|
13
|
+
constructor(apiService: ApiService, nodeConfig: NodeConfig, indexerManager: IndexerManager, eventEmitter: EventEmitter2, projectService: IProjectService<EthereumProjectDs>, projectUpgradeService: IProjectUpgradeService, smartBatchService: SmartBatchService, storeService: StoreService, storeCacheService: StoreCacheService, poiService: PoiService, project: SubqueryProject, dynamicDsService: DynamicDsService);
|
|
14
|
+
protected getBlockHeight(block: BlockContent): number;
|
|
15
|
+
protected indexBlock(block: BlockContent): Promise<ProcessBlockResponse>;
|
|
16
16
|
}
|
|
@@ -25,25 +25,26 @@ const indexer_manager_1 = require("../indexer.manager");
|
|
|
25
25
|
* @description Intended to behave the same as WorkerBlockDispatcherService but doesn't use worker threads or any parallel processing
|
|
26
26
|
*/
|
|
27
27
|
let BlockDispatcherService = class BlockDispatcherService extends node_core_1.BlockDispatcher {
|
|
28
|
-
constructor(apiService, nodeConfig, indexerManager, eventEmitter, projectService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService) {
|
|
29
|
-
super(nodeConfig, eventEmitter, projectService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService, apiService.fetchBlocks.bind(apiService));
|
|
28
|
+
constructor(apiService, nodeConfig, indexerManager, eventEmitter, projectService, projectUpgradeService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService) {
|
|
29
|
+
super(nodeConfig, eventEmitter, projectService, projectUpgradeService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService, apiService.fetchBlocks.bind(apiService));
|
|
30
30
|
this.indexerManager = indexerManager;
|
|
31
31
|
}
|
|
32
32
|
getBlockHeight(block) {
|
|
33
|
-
return block.
|
|
33
|
+
return block.number;
|
|
34
34
|
}
|
|
35
35
|
async indexBlock(block) {
|
|
36
|
-
return this.indexerManager.indexBlock(block, await this.projectService.
|
|
36
|
+
return this.indexerManager.indexBlock(block, await this.projectService.getDataSources(this.getBlockHeight(block)));
|
|
37
37
|
}
|
|
38
38
|
};
|
|
39
39
|
BlockDispatcherService = __decorate([
|
|
40
40
|
(0, common_1.Injectable)(),
|
|
41
41
|
__param(4, (0, common_1.Inject)('IProjectService')),
|
|
42
|
-
__param(
|
|
42
|
+
__param(5, (0, common_1.Inject)('IProjectUpgradeService')),
|
|
43
|
+
__param(10, (0, common_1.Inject)('ISubqueryProject')),
|
|
43
44
|
__metadata("design:paramtypes", [node_core_1.ApiService,
|
|
44
45
|
node_core_1.NodeConfig,
|
|
45
46
|
indexer_manager_1.IndexerManager,
|
|
46
|
-
event_emitter_1.EventEmitter2, Object, node_core_1.SmartBatchService,
|
|
47
|
+
event_emitter_1.EventEmitter2, Object, Object, node_core_1.SmartBatchService,
|
|
47
48
|
node_core_1.StoreService,
|
|
48
49
|
node_core_1.StoreCacheService,
|
|
49
50
|
node_core_1.PoiService,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block-dispatcher.service.js","sourceRoot":"","sources":["../../../src/indexer/blockDispatcher/block-dispatcher.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,2CAA2E;AAC3E,yDAAsD;AACtD,
|
|
1
|
+
{"version":3,"file":"block-dispatcher.service.js","sourceRoot":"","sources":["../../../src/indexer/blockDispatcher/block-dispatcher.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,2CAA2E;AAC3E,yDAAsD;AACtD,gDAW0B;AAC1B,qEAGyC;AACzC,8DAAyD;AACzD,wDAAoD;AAGpD;;GAEG;AAEI,IAAM,sBAAsB,GAA5B,MAAM,sBACX,SAAQ,2BAAgD;IAGxD,YACE,UAAsB,EACtB,UAAsB,EACd,cAA8B,EACtC,YAA2B,EAE3B,cAAkD,EAElD,qBAA6C,EAC7C,iBAAoC,EACpC,YAA0B,EAC1B,iBAAoC,EACpC,UAAsB,EACM,OAAwB,EACpD,gBAAkC;QAElC,KAAK,CACH,UAAU,EACV,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,OAAO,EACP,gBAAgB,EAChB,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CACxC,CAAC;QAzBM,mBAAc,GAAd,cAAc,CAAgB;IA0BxC,CAAC;IAES,cAAc,CAAC,KAAmB;QAC1C,OAAO,KAAK,CAAC,MAAM,CAAC;IACtB,CAAC;IAES,KAAK,CAAC,UAAU,CACxB,KAAmB;QAEnB,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,CACnC,KAAK,EACL,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CACrE,CAAC;IACJ,CAAC;CACF,CAAA;AA/CY,sBAAsB;IADlC,IAAA,mBAAU,GAAE;IAUR,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;IAEzB,WAAA,IAAA,eAAM,EAAC,wBAAwB,CAAC,CAAA;IAMhC,YAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;qCAZf,sBAAU;QACV,sBAAU;QACE,gCAAc;QACxB,6BAAa,kBAKR,6BAAiB;QACtB,wBAAY;QACP,6BAAiB;QACxB,sBAAU;QACe,iCAAe;QAClC,qCAAgB;GAlBzB,sBAAsB,CA+ClC;AA/CY,wDAAsB","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Inject, Injectable, OnApplicationShutdown } from '@nestjs/common';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n NodeConfig,\n SmartBatchService,\n StoreCacheService,\n StoreService,\n IProjectService,\n PoiService,\n BlockDispatcher,\n ProcessBlockResponse,\n ApiService,\n IProjectUpgradeService,\n} from '@subql/node-core';\nimport {\n EthereumProjectDs,\n SubqueryProject,\n} from '../../configure/SubqueryProject';\nimport { DynamicDsService } from '../dynamic-ds.service';\nimport { IndexerManager } from '../indexer.manager';\nimport { BlockContent } from '../types';\n\n/**\n * @description Intended to behave the same as WorkerBlockDispatcherService but doesn't use worker threads or any parallel processing\n */\n@Injectable()\nexport class BlockDispatcherService\n extends BlockDispatcher<BlockContent, EthereumProjectDs>\n implements OnApplicationShutdown\n{\n constructor(\n apiService: ApiService,\n nodeConfig: NodeConfig,\n private indexerManager: IndexerManager,\n eventEmitter: EventEmitter2,\n @Inject('IProjectService')\n projectService: IProjectService<EthereumProjectDs>,\n @Inject('IProjectUpgradeService')\n projectUpgradeService: IProjectUpgradeService,\n smartBatchService: SmartBatchService,\n storeService: StoreService,\n storeCacheService: StoreCacheService,\n poiService: PoiService,\n @Inject('ISubqueryProject') project: SubqueryProject,\n dynamicDsService: DynamicDsService,\n ) {\n super(\n nodeConfig,\n eventEmitter,\n projectService,\n projectUpgradeService,\n smartBatchService,\n storeService,\n storeCacheService,\n poiService,\n project,\n dynamicDsService,\n apiService.fetchBlocks.bind(apiService),\n );\n }\n\n protected getBlockHeight(block: BlockContent): number {\n return block.number;\n }\n\n protected async indexBlock(\n block: BlockContent,\n ): Promise<ProcessBlockResponse> {\n return this.indexerManager.indexBlock(\n block,\n await this.projectService.getDataSources(this.getBlockHeight(block)),\n );\n }\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { OnApplicationShutdown } from '@nestjs/common';
|
|
2
2
|
import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
3
|
-
import { NodeConfig, SmartBatchService, StoreService, PoiService, StoreCacheService, IProjectService, WorkerBlockDispatcher, ConnectionPoolStateManager } from '@subql/node-core';
|
|
4
|
-
import {
|
|
3
|
+
import { NodeConfig, SmartBatchService, StoreService, PoiService, StoreCacheService, IProjectService, WorkerBlockDispatcher, ConnectionPoolStateManager, IProjectUpgradeService } from '@subql/node-core';
|
|
4
|
+
import { EthereumProjectDs, SubqueryProject } from '../../configure/SubqueryProject';
|
|
5
5
|
import { EthereumApiConnection } from '../../ethereum/api.connection';
|
|
6
6
|
import { DynamicDsService } from '../dynamic-ds.service';
|
|
7
7
|
import { UnfinalizedBlocksService } from '../unfinalizedBlocks.service';
|
|
@@ -9,8 +9,8 @@ import { IIndexerWorker } from '../worker/worker';
|
|
|
9
9
|
type IndexerWorker = IIndexerWorker & {
|
|
10
10
|
terminate: () => Promise<number>;
|
|
11
11
|
};
|
|
12
|
-
export declare class WorkerBlockDispatcherService extends WorkerBlockDispatcher<
|
|
13
|
-
constructor(nodeConfig: NodeConfig, eventEmitter: EventEmitter2, projectService: IProjectService<
|
|
12
|
+
export declare class WorkerBlockDispatcherService extends WorkerBlockDispatcher<EthereumProjectDs, IndexerWorker> implements OnApplicationShutdown {
|
|
13
|
+
constructor(nodeConfig: NodeConfig, eventEmitter: EventEmitter2, projectService: IProjectService<EthereumProjectDs>, projectUpgadeService: IProjectUpgradeService, smartBatchService: SmartBatchService, storeService: StoreService, storeCacheService: StoreCacheService, poiService: PoiService, project: SubqueryProject, dynamicDsService: DynamicDsService, unfinalizedBlocksSevice: UnfinalizedBlocksService, connectionPoolState: ConnectionPoolStateManager<EthereumApiConnection>);
|
|
14
14
|
protected fetchBlock(worker: IndexerWorker, height: number): Promise<void>;
|
|
15
15
|
}
|
|
16
16
|
export {};
|
|
@@ -25,28 +25,18 @@ const node_core_1 = require("@subql/node-core");
|
|
|
25
25
|
const SubqueryProject_1 = require("../../configure/SubqueryProject");
|
|
26
26
|
const dynamic_ds_service_1 = require("../dynamic-ds.service");
|
|
27
27
|
const unfinalizedBlocks_service_1 = require("../unfinalizedBlocks.service");
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
'initWorker',
|
|
32
|
-
'processBlock',
|
|
33
|
-
'fetchBlock',
|
|
34
|
-
'numFetchedBlocks',
|
|
35
|
-
'numFetchingBlocks',
|
|
36
|
-
'getStatus',
|
|
37
|
-
'getMemoryLeft',
|
|
38
|
-
'waitForWorkerBatchSize',
|
|
39
|
-
], Object.assign({ storeGet: store.get.bind(store), storeGetByField: store.getByField.bind(store), storeGetOneByField: store.getOneByField.bind(store), storeSet: store.set.bind(store), storeBulkCreate: store.bulkCreate.bind(store), storeBulkUpdate: store.bulkUpdate.bind(store), storeRemove: store.remove.bind(store), storeBulkRemove: store.bulkRemove.bind(store), dynamicDsCreateDynamicDatasource: dynamicDsService.createDynamicDatasource.bind(dynamicDsService), dynamicDsGetDynamicDatasources: dynamicDsService.getDynamicDatasources.bind(dynamicDsService), unfinalizedBlocksProcess: unfinalizedBlocksService.processUnfinalizedBlockHeader.bind(unfinalizedBlocksService) }, (0, node_core_1.connectionPoolStateHostFunctions)(connectionPoolState)), root);
|
|
40
|
-
await indexerWorker.initWorker();
|
|
28
|
+
async function createIndexerWorker(store, dynamicDsService, unfinalizedBlocksService, connectionPoolState, root, startHeight) {
|
|
29
|
+
const indexerWorker = node_core_1.Worker.create(path_1.default.resolve(__dirname, '../../../dist/indexer/worker/worker.js'), [...node_core_1.baseWorkerFunctions, 'initWorker'], Object.assign(Object.assign(Object.assign(Object.assign({}, (0, node_core_1.storeHostFunctions)(store)), (0, node_core_1.dynamicDsHostFunctions)(dynamicDsService)), { unfinalizedBlocksProcess: unfinalizedBlocksService.processUnfinalizedBlockHeader.bind(unfinalizedBlocksService) }), (0, node_core_1.connectionPoolStateHostFunctions)(connectionPoolState)), root);
|
|
30
|
+
await indexerWorker.initWorker(startHeight);
|
|
41
31
|
return indexerWorker;
|
|
42
32
|
}
|
|
43
33
|
let WorkerBlockDispatcherService = class WorkerBlockDispatcherService extends node_core_1.WorkerBlockDispatcher {
|
|
44
|
-
constructor(nodeConfig, eventEmitter, projectService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService, unfinalizedBlocksSevice, connectionPoolState) {
|
|
45
|
-
super(nodeConfig, eventEmitter, projectService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService, () => createIndexerWorker(storeService.getStore(), dynamicDsService, unfinalizedBlocksSevice, connectionPoolState, project.root));
|
|
34
|
+
constructor(nodeConfig, eventEmitter, projectService, projectUpgadeService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService, unfinalizedBlocksSevice, connectionPoolState) {
|
|
35
|
+
super(nodeConfig, eventEmitter, projectService, projectUpgadeService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService, () => createIndexerWorker(storeService.getStore(), dynamicDsService, unfinalizedBlocksSevice, connectionPoolState, project.root, projectService.startHeight));
|
|
46
36
|
}
|
|
47
37
|
async fetchBlock(worker, height) {
|
|
48
38
|
const start = new Date();
|
|
49
|
-
await worker.fetchBlock(height);
|
|
39
|
+
await worker.fetchBlock(height, null);
|
|
50
40
|
const end = new Date();
|
|
51
41
|
// const waitTime = end.getTime() - start.getTime();
|
|
52
42
|
// if (waitTime > 1000) {
|
|
@@ -63,9 +53,10 @@ let WorkerBlockDispatcherService = class WorkerBlockDispatcherService extends no
|
|
|
63
53
|
WorkerBlockDispatcherService = __decorate([
|
|
64
54
|
(0, common_1.Injectable)(),
|
|
65
55
|
__param(2, (0, common_1.Inject)('IProjectService')),
|
|
66
|
-
__param(
|
|
56
|
+
__param(3, (0, common_1.Inject)('IProjectUpgradeService')),
|
|
57
|
+
__param(8, (0, common_1.Inject)('ISubqueryProject')),
|
|
67
58
|
__metadata("design:paramtypes", [node_core_1.NodeConfig,
|
|
68
|
-
event_emitter_1.EventEmitter2, Object, node_core_1.SmartBatchService,
|
|
59
|
+
event_emitter_1.EventEmitter2, Object, Object, node_core_1.SmartBatchService,
|
|
69
60
|
node_core_1.StoreService,
|
|
70
61
|
node_core_1.StoreCacheService,
|
|
71
62
|
node_core_1.PoiService,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-block-dispatcher.service.js","sourceRoot":"","sources":["../../../src/indexer/blockDispatcher/worker-block-dispatcher.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;;;;AAEnC,gDAAwB;AACxB,2CAA2E;AAC3E,yDAAsD;AACtD,
|
|
1
|
+
{"version":3,"file":"worker-block-dispatcher.service.js","sourceRoot":"","sources":["../../../src/indexer/blockDispatcher/worker-block-dispatcher.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;;;;AAEnC,gDAAwB;AACxB,2CAA2E;AAC3E,yDAAsD;AACtD,gDAoB0B;AAE1B,qEAGyC;AAEzC,8DAAyD;AAEzD,4EAAwE;AAOxE,KAAK,UAAU,mBAAmB,CAChC,KAAY,EACZ,gBAAsD,EACtD,wBAAiE,EACjE,mBAAsE,EACtE,IAAY,EACZ,WAAmB;IAEnB,MAAM,aAAa,GAAG,kBAAM,CAAC,MAAM,CAIjC,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,wCAAwC,CAAC,EACjE,CAAC,GAAG,+BAAmB,EAAE,YAAY,CAAC,8DAEjC,IAAA,8BAAkB,EAAC,KAAK,CAAC,GACzB,IAAA,kCAAsB,EAAC,gBAAgB,CAAC,KAC3C,wBAAwB,EACtB,wBAAwB,CAAC,6BAA6B,CAAC,IAAI,CACzD,wBAAwB,CACzB,KACA,IAAA,4CAAgC,EAAC,mBAAmB,CAAC,GAE1D,IAAI,CACL,CAAC;IAEF,MAAM,aAAa,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAE5C,OAAO,aAAa,CAAC;AACvB,CAAC;AAGM,IAAM,4BAA4B,GAAlC,MAAM,4BACX,SAAQ,iCAAuD;IAG/D,YACE,UAAsB,EACtB,YAA2B,EAE3B,cAAkD,EAElD,oBAA4C,EAC5C,iBAAoC,EACpC,YAA0B,EAC1B,iBAAoC,EACpC,UAAsB,EACM,OAAwB,EACpD,gBAAkC,EAClC,uBAAiD,EACjD,mBAAsE;QAEtE,KAAK,CACH,UAAU,EACV,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,OAAO,EACP,gBAAgB,EAChB,GAAG,EAAE,CACH,mBAAmB,CACjB,YAAY,CAAC,QAAQ,EAAE,EACvB,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,EACnB,OAAO,CAAC,IAAI,EACZ,cAAc,CAAC,WAAW,CAC3B,CACJ,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,UAAU,CACxB,MAAqB,EACrB,MAAc;QAEd,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;QACzB,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QAEvB,oDAAoD;QACpD,yBAAyB;QACzB,iBAAiB;QACjB,yEAAyE;QACzE,OAAO;QACP,+BAA+B;QAC/B,iBAAiB;QACjB,4EAA4E;QAC5E,OAAO;QACP,IAAI;IACN,CAAC;CACF,CAAA;AA9DY,4BAA4B;IADxC,IAAA,mBAAU,GAAE;IAQR,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;IAEzB,WAAA,IAAA,eAAM,EAAC,wBAAwB,CAAC,CAAA;IAMhC,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;qCAVf,sBAAU;QACR,6BAAa,kBAKR,6BAAiB;QACtB,wBAAY;QACP,6BAAiB;QACxB,sBAAU;QACe,iCAAe;QAClC,qCAAgB;QACT,oDAAwB;QAC5B,sCAA0B;GAlBtC,4BAA4B,CA8DxC;AA9DY,oEAA4B","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport path from 'path';\nimport { Inject, Injectable, OnApplicationShutdown } from '@nestjs/common';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n NodeConfig,\n Worker,\n SmartBatchService,\n StoreService,\n PoiService,\n StoreCacheService,\n IProjectService,\n IDynamicDsService,\n HostStore,\n HostDynamicDS,\n WorkerBlockDispatcher,\n IUnfinalizedBlocksService,\n ConnectionPoolStateManager,\n connectionPoolStateHostFunctions,\n baseWorkerFunctions,\n storeHostFunctions,\n dynamicDsHostFunctions,\n IProjectUpgradeService,\n HostUnfinalizedBlocks,\n} from '@subql/node-core';\nimport { Store } from '@subql/types-core';\nimport {\n EthereumProjectDs,\n SubqueryProject,\n} from '../../configure/SubqueryProject';\nimport { EthereumApiConnection } from '../../ethereum/api.connection';\nimport { DynamicDsService } from '../dynamic-ds.service';\nimport { BlockContent } from '../types';\nimport { UnfinalizedBlocksService } from '../unfinalizedBlocks.service';\nimport { IIndexerWorker, IInitIndexerWorker } from '../worker/worker';\n\ntype IndexerWorker = IIndexerWorker & {\n terminate: () => Promise<number>;\n};\n\nasync function createIndexerWorker(\n store: Store,\n dynamicDsService: IDynamicDsService<EthereumProjectDs>,\n unfinalizedBlocksService: IUnfinalizedBlocksService<BlockContent>,\n connectionPoolState: ConnectionPoolStateManager<EthereumApiConnection>,\n root: string,\n startHeight: number,\n): Promise<IndexerWorker> {\n const indexerWorker = Worker.create<\n IInitIndexerWorker,\n HostDynamicDS<EthereumProjectDs> & HostStore & HostUnfinalizedBlocks\n >(\n path.resolve(__dirname, '../../../dist/indexer/worker/worker.js'),\n [...baseWorkerFunctions, 'initWorker'],\n {\n ...storeHostFunctions(store),\n ...dynamicDsHostFunctions(dynamicDsService),\n unfinalizedBlocksProcess:\n unfinalizedBlocksService.processUnfinalizedBlockHeader.bind(\n unfinalizedBlocksService,\n ),\n ...connectionPoolStateHostFunctions(connectionPoolState),\n },\n root,\n );\n\n await indexerWorker.initWorker(startHeight);\n\n return indexerWorker;\n}\n\n@Injectable()\nexport class WorkerBlockDispatcherService\n extends WorkerBlockDispatcher<EthereumProjectDs, IndexerWorker>\n implements OnApplicationShutdown\n{\n constructor(\n nodeConfig: NodeConfig,\n eventEmitter: EventEmitter2,\n @Inject('IProjectService')\n projectService: IProjectService<EthereumProjectDs>,\n @Inject('IProjectUpgradeService')\n projectUpgadeService: IProjectUpgradeService,\n smartBatchService: SmartBatchService,\n storeService: StoreService,\n storeCacheService: StoreCacheService,\n poiService: PoiService,\n @Inject('ISubqueryProject') project: SubqueryProject,\n dynamicDsService: DynamicDsService,\n unfinalizedBlocksSevice: UnfinalizedBlocksService,\n connectionPoolState: ConnectionPoolStateManager<EthereumApiConnection>,\n ) {\n super(\n nodeConfig,\n eventEmitter,\n projectService,\n projectUpgadeService,\n smartBatchService,\n storeService,\n storeCacheService,\n poiService,\n project,\n dynamicDsService,\n () =>\n createIndexerWorker(\n storeService.getStore(),\n dynamicDsService,\n unfinalizedBlocksSevice,\n connectionPoolState,\n project.root,\n projectService.startHeight,\n ),\n );\n }\n\n protected async fetchBlock(\n worker: IndexerWorker,\n height: number,\n ): Promise<void> {\n const start = new Date();\n await worker.fetchBlock(height, null);\n const end = new Date();\n\n // const waitTime = end.getTime() - start.getTime();\n // if (waitTime > 1000) {\n // logger.info(\n // `Waiting to fetch block ${height}: ${chalk.red(`${waitTime}ms`)}`,\n // );\n // } else if (waitTime > 200) {\n // logger.info(\n // `Waiting to fetch block ${height}: ${chalk.yellow(`${waitTime}ms`)}`,\n // );\n // }\n }\n}\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
2
2
|
import { NodeConfig, DictionaryService as CoreDictionaryService } from '@subql/node-core';
|
|
3
3
|
import { SubqueryProject } from '../configure/SubqueryProject';
|
|
4
|
-
export declare class DictionaryService extends CoreDictionaryService
|
|
4
|
+
export declare class DictionaryService extends CoreDictionaryService {
|
|
5
5
|
protected project: SubqueryProject;
|
|
6
6
|
private constructor();
|
|
7
|
-
static create(project: SubqueryProject, nodeConfig: NodeConfig): Promise<DictionaryService>;
|
|
7
|
+
static create(project: SubqueryProject, nodeConfig: NodeConfig, eventEmitter: EventEmitter2): Promise<DictionaryService>;
|
|
8
8
|
private static getEvmChainId;
|
|
9
9
|
}
|
|
@@ -20,24 +20,25 @@ var DictionaryService_1;
|
|
|
20
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
21
|
exports.DictionaryService = void 0;
|
|
22
22
|
const common_1 = require("@nestjs/common");
|
|
23
|
+
const event_emitter_1 = require("@nestjs/event-emitter");
|
|
23
24
|
const node_core_1 = require("@subql/node-core");
|
|
24
25
|
const json5_1 = __importDefault(require("json5"));
|
|
25
26
|
const node_fetch_1 = __importDefault(require("node-fetch"));
|
|
26
27
|
const SubqueryProject_1 = require("../configure/SubqueryProject");
|
|
27
28
|
const CHAIN_ALIASES_URL = 'https://raw.githubusercontent.com/subquery/templates/main/chainAliases.json5';
|
|
28
29
|
let DictionaryService = DictionaryService_1 = class DictionaryService extends node_core_1.DictionaryService {
|
|
29
|
-
constructor(project, nodeConfig, chainId) {
|
|
30
|
-
super(project.network.dictionary, chainId !== null && chainId !== void 0 ? chainId : project.network.chainId, nodeConfig);
|
|
30
|
+
constructor(project, nodeConfig, eventEmitter, chainId) {
|
|
31
|
+
super(project.network.dictionary, chainId !== null && chainId !== void 0 ? chainId : project.network.chainId, nodeConfig, eventEmitter);
|
|
31
32
|
this.project = project;
|
|
32
33
|
}
|
|
33
|
-
static async create(project, nodeConfig) {
|
|
34
|
+
static async create(project, nodeConfig, eventEmitter) {
|
|
34
35
|
/*Some dictionarys for EVM are built with other SDKs as they are chains with an EVM runtime
|
|
35
36
|
* we maintain a list of aliases so we can map the evmChainId to the genesis hash of the other SDKs
|
|
36
37
|
* e.g moonbeam is built with Substrate SDK but can be used as an EVM dictionary
|
|
37
38
|
*/
|
|
38
39
|
const chainAliases = await this.getEvmChainId();
|
|
39
40
|
const chainAlias = chainAliases[project.network.chainId];
|
|
40
|
-
return new DictionaryService_1(project, nodeConfig, chainAlias);
|
|
41
|
+
return new DictionaryService_1(project, nodeConfig, eventEmitter, chainAlias);
|
|
41
42
|
}
|
|
42
43
|
static async getEvmChainId() {
|
|
43
44
|
const response = await (0, node_fetch_1.default)(CHAIN_ALIASES_URL);
|
|
@@ -50,7 +51,8 @@ DictionaryService = DictionaryService_1 = __decorate([
|
|
|
50
51
|
(0, common_1.Injectable)(),
|
|
51
52
|
__param(0, (0, common_1.Inject)('ISubqueryProject')),
|
|
52
53
|
__metadata("design:paramtypes", [SubqueryProject_1.SubqueryProject,
|
|
53
|
-
node_core_1.NodeConfig,
|
|
54
|
+
node_core_1.NodeConfig,
|
|
55
|
+
event_emitter_1.EventEmitter2, String])
|
|
54
56
|
], DictionaryService);
|
|
55
57
|
exports.DictionaryService = DictionaryService;
|
|
56
58
|
//# sourceMappingURL=dictionary.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dictionary.service.js","sourceRoot":"","sources":["../../src/indexer/dictionary.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;;;;;AAEnC,
|
|
1
|
+
{"version":3,"file":"dictionary.service.js","sourceRoot":"","sources":["../../src/indexer/dictionary.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;;;;;AAEnC,2CAAoD;AACpD,yDAAsD;AACtD,gDAG0B;AAC1B,kDAA0B;AAC1B,4DAA+B;AAC/B,kEAA+D;AAE/D,MAAM,iBAAiB,GACrB,8EAA8E,CAAC;AAG1E,IAAM,iBAAiB,yBAAvB,MAAM,iBAAkB,SAAQ,6BAAqB;IAC1D,YACwC,OAAwB,EAC9D,UAAsB,EACtB,YAA2B,EAC3B,OAAgB;QAEhB,KAAK,CACH,OAAO,CAAC,OAAO,CAAC,UAAU,EAC1B,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,OAAO,CAAC,OAAO,CAAC,OAAO,EAClC,UAAU,EACV,YAAY,CACb,CAAC;QAVoC,YAAO,GAAP,OAAO,CAAiB;IAWhE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,OAAwB,EACxB,UAAsB,EACtB,YAA2B;QAE3B;;;WAGG;QACH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAChD,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEzD,OAAO,IAAI,mBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IAC9E,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,aAAa;QAChC,MAAM,QAAQ,GAAG,MAAM,IAAA,oBAAK,EAAC,iBAAiB,CAAC,CAAC;QAEhD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClC,wDAAwD;QACxD,OAAO,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;CACF,CAAA;AArCY,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;qCAAoB,iCAAe;QAClD,sBAAU;QACR,6BAAa;GAJlB,iBAAiB,CAqC7B;AArCY,8CAAiB","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Inject, Injectable } from '@nestjs/common';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n NodeConfig,\n DictionaryService as CoreDictionaryService,\n} from '@subql/node-core';\nimport JSON5 from 'json5';\nimport fetch from 'node-fetch';\nimport { SubqueryProject } from '../configure/SubqueryProject';\n\nconst CHAIN_ALIASES_URL =\n 'https://raw.githubusercontent.com/subquery/templates/main/chainAliases.json5';\n\n@Injectable()\nexport class DictionaryService extends CoreDictionaryService {\n private constructor(\n @Inject('ISubqueryProject') protected project: SubqueryProject,\n nodeConfig: NodeConfig,\n eventEmitter: EventEmitter2,\n chainId?: string,\n ) {\n super(\n project.network.dictionary,\n chainId ?? project.network.chainId,\n nodeConfig,\n eventEmitter,\n );\n }\n\n static async create(\n project: SubqueryProject,\n nodeConfig: NodeConfig,\n eventEmitter: EventEmitter2,\n ): Promise<DictionaryService> {\n /*Some dictionarys for EVM are built with other SDKs as they are chains with an EVM runtime\n * we maintain a list of aliases so we can map the evmChainId to the genesis hash of the other SDKs\n * e.g moonbeam is built with Substrate SDK but can be used as an EVM dictionary\n */\n const chainAliases = await this.getEvmChainId();\n const chainAlias = chainAliases[project.network.chainId];\n\n return new DictionaryService(project, nodeConfig, eventEmitter, chainAlias);\n }\n\n private static async getEvmChainId(): Promise<Record<string, string>> {\n const response = await fetch(CHAIN_ALIASES_URL);\n\n const raw = await response.text();\n // We use JSON5 here because the file has comments in it\n return JSON5.parse(raw);\n }\n}\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { DatasourceParams, DynamicDsService as BaseDynamicDsService } from '@subql/node-core';
|
|
2
|
-
import {
|
|
2
|
+
import { EthereumProjectDs, SubqueryProject } from '../configure/SubqueryProject';
|
|
3
3
|
import { DsProcessorService } from './ds-processor.service';
|
|
4
|
-
export declare class DynamicDsService extends BaseDynamicDsService<
|
|
4
|
+
export declare class DynamicDsService extends BaseDynamicDsService<EthereumProjectDs> {
|
|
5
5
|
private readonly dsProcessorService;
|
|
6
6
|
private readonly project;
|
|
7
7
|
constructor(dsProcessorService: DsProcessorService, project: SubqueryProject);
|
|
8
|
-
protected getDatasource(params: DatasourceParams): Promise<
|
|
8
|
+
protected getDatasource(params: DatasourceParams): Promise<EthereumProjectDs>;
|
|
9
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-ds.service.js","sourceRoot":"","sources":["../../src/indexer/dynamic-ds.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,2CAAoD;AACpD,4DAIgC;AAChC,gDAG0B;AAC1B,yDAAiD;AACjD,qDAA+C;AAC/C,mCAAmC;AACnC,
|
|
1
|
+
{"version":3,"file":"dynamic-ds.service.js","sourceRoot":"","sources":["../../src/indexer/dynamic-ds.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,2CAAoD;AACpD,4DAIgC;AAChC,gDAG0B;AAC1B,yDAAiD;AACjD,qDAA+C;AAC/C,mCAAmC;AACnC,kEAGsC;AACtC,iEAA4D;AAGrD,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,4BAAuC;IAC3E,YACmB,kBAAsC,EACV,OAAwB;QAErE,KAAK,EAAE,CAAC;QAHS,uBAAkB,GAAlB,kBAAkB,CAAoB;QACV,YAAO,GAAP,OAAO,CAAiB;IAGvE,CAAC;IAES,KAAK,CAAC,aAAa,CAC3B,MAAwB;;QAExB,MAAM,QAAQ,GAAG,IAAA,kBAAS,EACxB,MAAA,IAAI,CAAC,OAAO,CAAC,SAAS,0CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,YAAY,CAAC,CACpE,CAAC;QAEF,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,IAAI,KAAK,CACb,0DAA0D,MAAM,CAAC,YAAY,GAAG,CACjF,CAAC;SACH;QAED,MAAM,KAAK,GAAG,gCACT,QAAQ,KACX,UAAU,EAAE,MAAM,CAAC,UAAU,GACT,CAAC;QACvB,IAAI;YACF,IAAI,IAAA,4BAAU,EAAC,KAAK,CAAC,EAAE;gBACrB,KAAK,CAAC,SAAS,CAAC,OAAO,mCAClB,KAAK,CAAC,SAAS,CAAC,OAAO,GACvB,MAAM,CAAC,IAAI,CACf,CAAC;gBACF,MAAM,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;aACzD;iBAAM,IAAI,IAAA,6BAAW,EAAC,KAAK,CAAC,EAAE;gBAC7B,KAAK,CAAC,OAAO,mCACR,KAAK,CAAC,OAAO,GACb,MAAM,CAAC,IAAI,CACf,CAAC;gBAEF,MAAM,QAAQ,GAAG,IAAA,gCAAY,EAAC,+CAA6B,EAAE,KAAK,CAAC,CAAC;gBAEpE,MAAM,MAAM,GAAG,IAAA,8BAAY,EAAC,QAAQ,EAAE;oBACpC,SAAS,EAAE,IAAI;oBACf,oBAAoB,EAAE,KAAK;iBAC5B,CAAC,CAAC;gBACH,IAAI,MAAM,CAAC,MAAM,EAAE;oBACjB,MAAM,IAAI,KAAK,CACb,0BAA0B,MAAM;yBAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;yBACxB,IAAI,CAAC,IAAI,CAAC,EAAE,CAChB,CAAC;iBACH;aACF;YACD,OAAO,KAAK,CAAC;SACd;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;SACxE;IACH,CAAC;CACF,CAAA;AAzDY,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;IAIR,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;qCADU,yCAAkB;QACD,iCAAe;GAH5D,gBAAgB,CAyD5B;AAzDY,4CAAgB","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Inject, Injectable } from '@nestjs/common';\nimport {\n EthereumRuntimeDataSourceImpl,\n isCustomDs,\n isRuntimeDs,\n} from '@subql/common-ethereum';\nimport {\n DatasourceParams,\n DynamicDsService as BaseDynamicDsService,\n} from '@subql/node-core';\nimport { plainToClass } from 'class-transformer';\nimport { validateSync } from 'class-validator';\nimport { cloneDeep } from 'lodash';\nimport {\n EthereumProjectDs,\n SubqueryProject,\n} from '../configure/SubqueryProject';\nimport { DsProcessorService } from './ds-processor.service';\n\n@Injectable()\nexport class DynamicDsService extends BaseDynamicDsService<EthereumProjectDs> {\n constructor(\n private readonly dsProcessorService: DsProcessorService,\n @Inject('ISubqueryProject') private readonly project: SubqueryProject,\n ) {\n super();\n }\n\n protected async getDatasource(\n params: DatasourceParams,\n ): Promise<EthereumProjectDs> {\n const template = cloneDeep(\n this.project.templates?.find((t) => t.name === params.templateName),\n );\n\n if (!template) {\n throw new Error(\n `Unable to find matching template in project for name: \"${params.templateName}\"`,\n );\n }\n\n const dsObj = {\n ...template,\n startBlock: params.startBlock,\n } as EthereumProjectDs;\n try {\n if (isCustomDs(dsObj)) {\n dsObj.processor.options = {\n ...dsObj.processor.options,\n ...params.args,\n };\n await this.dsProcessorService.validateCustomDs([dsObj]);\n } else if (isRuntimeDs(dsObj)) {\n dsObj.options = {\n ...dsObj.options,\n ...params.args,\n };\n\n const parsedDs = plainToClass(EthereumRuntimeDataSourceImpl, dsObj);\n\n const errors = validateSync(parsedDs, {\n whitelist: true,\n forbidNonWhitelisted: false,\n });\n if (errors.length) {\n throw new Error(\n `Dynamic ds is invalid\\n${errors\n .map((e) => e.toString())\n .join('\\n')}`,\n );\n }\n }\n return dsObj;\n } catch (e) {\n throw new Error(`Unable to create dynamic datasource.\\n ${e.message}`);\n }\n }\n}\n"]}
|
|
@@ -62,13 +62,14 @@ FetchModule = __decorate([
|
|
|
62
62
|
},
|
|
63
63
|
{
|
|
64
64
|
provide: 'IBlockDispatcher',
|
|
65
|
-
useFactory: (nodeConfig, eventEmitter, projectService, apiService, indexerManager, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService, unfinalizedBlocks, connectionPoolState) => nodeConfig.workers !== undefined
|
|
66
|
-
? new blockDispatcher_1.WorkerBlockDispatcherService(nodeConfig, eventEmitter, projectService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService, unfinalizedBlocks, connectionPoolState)
|
|
67
|
-
: new blockDispatcher_1.BlockDispatcherService(apiService, nodeConfig, indexerManager, eventEmitter, projectService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService),
|
|
65
|
+
useFactory: (nodeConfig, eventEmitter, projectService, projectUpgradeService, apiService, indexerManager, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService, unfinalizedBlocks, connectionPoolState) => nodeConfig.workers !== undefined
|
|
66
|
+
? new blockDispatcher_1.WorkerBlockDispatcherService(nodeConfig, eventEmitter, projectService, projectUpgradeService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService, unfinalizedBlocks, connectionPoolState)
|
|
67
|
+
: new blockDispatcher_1.BlockDispatcherService(apiService, nodeConfig, indexerManager, eventEmitter, projectService, projectUpgradeService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService),
|
|
68
68
|
inject: [
|
|
69
69
|
node_core_1.NodeConfig,
|
|
70
70
|
event_emitter_1.EventEmitter2,
|
|
71
71
|
'IProjectService',
|
|
72
|
+
'IProjectUpgradeService',
|
|
72
73
|
node_core_1.ApiService,
|
|
73
74
|
indexer_manager_1.IndexerManager,
|
|
74
75
|
node_core_1.SmartBatchService,
|
|
@@ -87,26 +88,23 @@ FetchModule = __decorate([
|
|
|
87
88
|
node_core_1.PoiBenchmarkService,
|
|
88
89
|
{
|
|
89
90
|
provide: dictionary_service_1.DictionaryService,
|
|
90
|
-
useFactory: async (project, nodeConfig) => {
|
|
91
|
-
const dictionaryService = await dictionary_service_1.DictionaryService.create(project, nodeConfig);
|
|
91
|
+
useFactory: async (project, nodeConfig, eventEmitter) => {
|
|
92
|
+
const dictionaryService = await dictionary_service_1.DictionaryService.create(project, nodeConfig, eventEmitter);
|
|
92
93
|
return dictionaryService;
|
|
93
94
|
},
|
|
94
|
-
inject: ['ISubqueryProject', node_core_1.NodeConfig],
|
|
95
|
+
inject: ['ISubqueryProject', node_core_1.NodeConfig, event_emitter_1.EventEmitter2],
|
|
95
96
|
},
|
|
96
97
|
sandbox_service_1.SandboxService,
|
|
97
98
|
ds_processor_service_1.DsProcessorService,
|
|
98
99
|
dynamic_ds_service_1.DynamicDsService,
|
|
99
100
|
node_core_1.PoiService,
|
|
100
|
-
node_core_1.MmrService,
|
|
101
|
-
node_core_1.MmrQueryService,
|
|
102
|
-
node_core_1.PgMmrCacheService,
|
|
103
101
|
{
|
|
104
102
|
useClass: project_service_1.ProjectService,
|
|
105
103
|
provide: 'IProjectService',
|
|
106
104
|
},
|
|
107
105
|
unfinalizedBlocks_service_1.UnfinalizedBlocksService,
|
|
108
106
|
],
|
|
109
|
-
exports: [node_core_1.StoreService, node_core_1.
|
|
107
|
+
exports: [node_core_1.StoreService, node_core_1.StoreCacheService],
|
|
110
108
|
})
|
|
111
109
|
], FetchModule);
|
|
112
110
|
exports.FetchModule = FetchModule;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.module.js","sourceRoot":"","sources":["../../src/indexer/fetch.module.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;AAEnC,2CAAwC;AACxC,yDAAsD;AACtD,
|
|
1
|
+
{"version":3,"file":"fetch.module.js","sourceRoot":"","sources":["../../src/indexer/fetch.module.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2023 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Module } from '@nestjs/common';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n PoiBenchmarkService,\n IndexingBenchmarkService,\n StoreService,\n PoiService,\n ApiService,\n NodeConfig,\n ConnectionPoolService,\n ConnectionPoolStateManager,\n SmartBatchService,\n StoreCacheService,\n IProjectUpgradeService,\n} from '@subql/node-core';\nimport { SubqueryProject } from '../configure/SubqueryProject';\nimport { EthereumApiConnection } from '../ethereum/api.connection';\nimport { EthereumApiService } from '../ethereum/api.service.ethereum';\nimport {\n BlockDispatcherService,\n WorkerBlockDispatcherService,\n} from './blockDispatcher';\nimport { DictionaryService } from './dictionary.service';\nimport { DsProcessorService } from './ds-processor.service';\nimport { DynamicDsService } from './dynamic-ds.service';\nimport { FetchService } from './fetch.service';\nimport { IndexerManager } from './indexer.manager';\nimport { ProjectService } from './project.service';\nimport { SandboxService } from './sandbox.service';\nimport { UnfinalizedBlocksService } from './unfinalizedBlocks.service';\n\n@Module({\n providers: [\n StoreService,\n StoreCacheService,\n {\n provide: ApiService,\n useFactory: async (\n project: SubqueryProject,\n connectionPoolService: ConnectionPoolService<EthereumApiConnection>,\n eventEmitter: EventEmitter2,\n nodeConfig: NodeConfig,\n ) => {\n const apiService = new EthereumApiService(\n project,\n connectionPoolService,\n eventEmitter,\n nodeConfig,\n );\n await apiService.init();\n return apiService;\n },\n inject: [\n 'ISubqueryProject',\n ConnectionPoolService,\n EventEmitter2,\n NodeConfig,\n ],\n },\n IndexerManager,\n ConnectionPoolStateManager,\n ConnectionPoolService,\n {\n provide: SmartBatchService,\n useFactory: (nodeConfig: NodeConfig) => {\n return new SmartBatchService(nodeConfig.batchSize);\n },\n inject: [NodeConfig],\n },\n {\n provide: SmartBatchService,\n useFactory: (nodeConfig: NodeConfig) => {\n return new SmartBatchService(nodeConfig.batchSize);\n },\n inject: [NodeConfig],\n },\n {\n provide: 'IBlockDispatcher',\n useFactory: (\n nodeConfig: NodeConfig,\n eventEmitter: EventEmitter2,\n projectService: ProjectService,\n projectUpgradeService: IProjectUpgradeService,\n apiService: EthereumApiService,\n indexerManager: IndexerManager,\n smartBatchService: SmartBatchService,\n storeService: StoreService,\n storeCacheService: StoreCacheService,\n poiService: PoiService,\n project: SubqueryProject,\n dynamicDsService: DynamicDsService,\n unfinalizedBlocks: UnfinalizedBlocksService,\n connectionPoolState: ConnectionPoolStateManager<EthereumApiConnection>,\n ) =>\n nodeConfig.workers !== undefined\n ? new WorkerBlockDispatcherService(\n nodeConfig,\n eventEmitter,\n projectService,\n projectUpgradeService,\n smartBatchService,\n storeService,\n storeCacheService,\n poiService,\n project,\n dynamicDsService,\n unfinalizedBlocks,\n connectionPoolState,\n )\n : new BlockDispatcherService(\n apiService,\n nodeConfig,\n indexerManager,\n eventEmitter,\n projectService,\n projectUpgradeService,\n smartBatchService,\n storeService,\n storeCacheService,\n poiService,\n project,\n dynamicDsService,\n ),\n inject: [\n NodeConfig,\n EventEmitter2,\n 'IProjectService',\n 'IProjectUpgradeService',\n ApiService,\n IndexerManager,\n SmartBatchService,\n StoreService,\n StoreCacheService,\n PoiService,\n 'ISubqueryProject',\n DynamicDsService,\n UnfinalizedBlocksService,\n ConnectionPoolStateManager,\n ],\n },\n FetchService,\n ConnectionPoolService,\n IndexingBenchmarkService,\n PoiBenchmarkService,\n {\n provide: DictionaryService,\n useFactory: async (\n project: SubqueryProject,\n nodeConfig: NodeConfig,\n eventEmitter: EventEmitter2,\n ) => {\n const dictionaryService = await DictionaryService.create(\n project,\n nodeConfig,\n eventEmitter,\n );\n return dictionaryService;\n },\n inject: ['ISubqueryProject', NodeConfig, EventEmitter2],\n },\n SandboxService,\n DsProcessorService,\n DynamicDsService,\n PoiService,\n {\n useClass: ProjectService,\n provide: 'IProjectService',\n },\n UnfinalizedBlocksService,\n ],\n exports: [StoreService, StoreCacheService],\n})\nexport class FetchModule {}\n"]}
|
|
@@ -2,32 +2,32 @@ import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
|
2
2
|
import { SchedulerRegistry } from '@nestjs/schedule';
|
|
3
3
|
import { SubqlEthereumProcessorOptions } from '@subql/common-ethereum';
|
|
4
4
|
import { NodeConfig, BaseFetchService, ApiService } from '@subql/node-core';
|
|
5
|
-
import { DictionaryQueryEntry } from '@subql/types';
|
|
5
|
+
import { DictionaryQueryEntry } from '@subql/types-core';
|
|
6
6
|
import { SubqlDatasource } from '@subql/types-ethereum';
|
|
7
|
-
import { MetaData } from '@subql/utils';
|
|
8
7
|
import { SubqueryProject } from '../configure/SubqueryProject';
|
|
9
8
|
import { EthereumApi } from '../ethereum';
|
|
10
9
|
import { IEthereumBlockDispatcher } from './blockDispatcher';
|
|
11
10
|
import { DictionaryService } from './dictionary.service';
|
|
12
|
-
import { DsProcessorService } from './ds-processor.service';
|
|
13
11
|
import { DynamicDsService } from './dynamic-ds.service';
|
|
12
|
+
import { ProjectService } from './project.service';
|
|
14
13
|
import { UnfinalizedBlocksService } from './unfinalizedBlocks.service';
|
|
15
|
-
type
|
|
14
|
+
type GroupedEthereumProjectDs = SubqlDatasource & {
|
|
16
15
|
groupedOptions?: SubqlEthereumProcessorOptions[];
|
|
17
16
|
};
|
|
18
|
-
export declare function buildDictionaryQueryEntries(dataSources:
|
|
19
|
-
export declare class FetchService extends BaseFetchService<
|
|
17
|
+
export declare function buildDictionaryQueryEntries(dataSources: GroupedEthereumProjectDs[]): DictionaryQueryEntry[];
|
|
18
|
+
export declare class FetchService extends BaseFetchService<SubqlDatasource, IEthereumBlockDispatcher, DictionaryService> {
|
|
19
|
+
private apiService;
|
|
20
20
|
private unfinalizedBlocksService;
|
|
21
|
-
constructor(apiService: ApiService, nodeConfig: NodeConfig, project: SubqueryProject, blockDispatcher: IEthereumBlockDispatcher, dictionaryService: DictionaryService,
|
|
21
|
+
constructor(apiService: ApiService, nodeConfig: NodeConfig, projectService: ProjectService, project: SubqueryProject, blockDispatcher: IEthereumBlockDispatcher, dictionaryService: DictionaryService, dynamicDsService: DynamicDsService, unfinalizedBlocksService: UnfinalizedBlocksService, eventEmitter: EventEmitter2, schedulerRegistry: SchedulerRegistry);
|
|
22
22
|
get api(): EthereumApi;
|
|
23
|
-
buildDictionaryQueryEntries(
|
|
23
|
+
protected buildDictionaryQueryEntries(dataSources: (SubqlDatasource & {
|
|
24
|
+
name?: string;
|
|
25
|
+
})[]): DictionaryQueryEntry[];
|
|
24
26
|
protected getFinalizedHeight(): Promise<number>;
|
|
25
27
|
protected getBestHeight(): Promise<number>;
|
|
26
28
|
protected getChainInterval(): Promise<number>;
|
|
27
|
-
protected getChainId(): Promise<string>;
|
|
28
29
|
protected getModulos(): number[];
|
|
29
30
|
protected initBlockDispatcher(): Promise<void>;
|
|
30
|
-
protected validatateDictionaryMeta(metaData: MetaData): Promise<boolean>;
|
|
31
31
|
protected preLoopHook(): Promise<void>;
|
|
32
32
|
}
|
|
33
33
|
export {};
|
|
@@ -26,8 +26,8 @@ const utils_ethereum_1 = require("../ethereum/utils.ethereum");
|
|
|
26
26
|
const string_1 = require("../utils/string");
|
|
27
27
|
const yargs_1 = require("../yargs");
|
|
28
28
|
const dictionary_service_1 = require("./dictionary.service");
|
|
29
|
-
const ds_processor_service_1 = require("./ds-processor.service");
|
|
30
29
|
const dynamic_ds_service_1 = require("./dynamic-ds.service");
|
|
30
|
+
const project_service_1 = require("./project.service");
|
|
31
31
|
const unfinalizedBlocks_service_1 = require("./unfinalizedBlocks.service");
|
|
32
32
|
const logger = (0, node_core_1.getLogger)('fetch.service');
|
|
33
33
|
const BLOCK_TIME_VARIANCE = 5000;
|
|
@@ -135,15 +135,10 @@ function callFilterToQueryEntry(filter, dsOptions) {
|
|
|
135
135
|
conditions,
|
|
136
136
|
};
|
|
137
137
|
}
|
|
138
|
-
function buildDictionaryQueryEntries(dataSources
|
|
138
|
+
function buildDictionaryQueryEntries(dataSources) {
|
|
139
139
|
var _a;
|
|
140
140
|
const queryEntries = [];
|
|
141
|
-
|
|
142
|
-
// sort array from lowest ds.startBlock to highest
|
|
143
|
-
const filteredDs = dataSources
|
|
144
|
-
.filter((ds) => ds.startBlock <= startBlock)
|
|
145
|
-
.sort((a, b) => a.startBlock - b.startBlock);
|
|
146
|
-
for (const ds of filteredDs) {
|
|
141
|
+
for (const ds of dataSources) {
|
|
147
142
|
for (const handler of ds.mapping.handlers) {
|
|
148
143
|
// No filters, cant use dictionary
|
|
149
144
|
if (!handler.filter)
|
|
@@ -184,23 +179,29 @@ function buildDictionaryQueryEntries(dataSources, startBlock) {
|
|
|
184
179
|
}
|
|
185
180
|
exports.buildDictionaryQueryEntries = buildDictionaryQueryEntries;
|
|
186
181
|
let FetchService = class FetchService extends node_core_1.BaseFetchService {
|
|
187
|
-
constructor(apiService, nodeConfig, project, blockDispatcher, dictionaryService,
|
|
188
|
-
super(
|
|
182
|
+
constructor(apiService, nodeConfig, projectService, project, blockDispatcher, dictionaryService, dynamicDsService, unfinalizedBlocksService, eventEmitter, schedulerRegistry) {
|
|
183
|
+
super(nodeConfig, projectService, project.network, blockDispatcher, dictionaryService, dynamicDsService, eventEmitter, schedulerRegistry);
|
|
184
|
+
this.apiService = apiService;
|
|
189
185
|
this.unfinalizedBlocksService = unfinalizedBlocksService;
|
|
190
186
|
}
|
|
191
187
|
get api() {
|
|
192
188
|
return this.apiService.unsafeApi;
|
|
193
189
|
}
|
|
194
|
-
buildDictionaryQueryEntries(
|
|
195
|
-
|
|
190
|
+
buildDictionaryQueryEntries(
|
|
191
|
+
// Add name to dataousrces as templates have this set
|
|
192
|
+
dataSources) {
|
|
193
|
+
const [normalDataSources, templateDataSources] = (0, lodash_1.partition)(dataSources, (ds) => !ds.name);
|
|
194
|
+
// Group templ
|
|
195
|
+
const groupedDataSources = Object.values((0, lodash_1.groupBy)(templateDataSources, (ds) => ds.name)).map((grouped) => {
|
|
196
|
+
if (grouped.length === 1) {
|
|
197
|
+
return grouped[0];
|
|
198
|
+
}
|
|
196
199
|
const options = grouped.map((ds) => ds.options);
|
|
197
200
|
const ref = grouped[0];
|
|
198
201
|
return Object.assign(Object.assign({}, ref), { groupedOptions: options });
|
|
199
202
|
});
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
const filteredDs = this.project.dataSources.concat(groupdDynamicDs);
|
|
203
|
-
return buildDictionaryQueryEntries(filteredDs, startBlock);
|
|
203
|
+
const filteredDs = [...normalDataSources, ...groupedDataSources];
|
|
204
|
+
return buildDictionaryQueryEntries(filteredDs);
|
|
204
205
|
}
|
|
205
206
|
async getFinalizedHeight() {
|
|
206
207
|
const block = await this.api.getFinalizedBlock();
|
|
@@ -216,35 +217,12 @@ let FetchService = class FetchService extends node_core_1.BaseFetchService {
|
|
|
216
217
|
const CHAIN_INTERVAL = (0, utils_ethereum_1.calcInterval)(this.api) * INTERVAL_PERCENT;
|
|
217
218
|
return Math.min(BLOCK_TIME_VARIANCE, CHAIN_INTERVAL);
|
|
218
219
|
}
|
|
219
|
-
async getChainId() {
|
|
220
|
-
return Promise.resolve(this.api.getChainId().toString());
|
|
221
|
-
}
|
|
222
220
|
getModulos() {
|
|
223
|
-
|
|
224
|
-
for (const ds of this.project.dataSources) {
|
|
225
|
-
if ((0, common_ethereum_1.isCustomDs)(ds)) {
|
|
226
|
-
continue;
|
|
227
|
-
}
|
|
228
|
-
for (const handler of ds.mapping.handlers) {
|
|
229
|
-
if (handler.kind === common_ethereum_1.EthereumHandlerKind.Block &&
|
|
230
|
-
handler.filter &&
|
|
231
|
-
handler.filter.modulo) {
|
|
232
|
-
modulos.push(handler.filter.modulo);
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
return modulos;
|
|
221
|
+
return (0, node_core_1.getModulos)(this.projectService.getAllDataSources(), common_ethereum_1.isCustomDs, common_ethereum_1.EthereumHandlerKind.Block);
|
|
237
222
|
}
|
|
238
223
|
async initBlockDispatcher() {
|
|
239
224
|
await this.blockDispatcher.init(this.resetForNewDs.bind(this));
|
|
240
225
|
}
|
|
241
|
-
async validatateDictionaryMeta(metaData) {
|
|
242
|
-
return Promise.resolve(
|
|
243
|
-
// When alias is not used
|
|
244
|
-
metaData.genesisHash !== this.api.getGenesisHash() &&
|
|
245
|
-
// Case when an alias is used
|
|
246
|
-
metaData.genesisHash !== this.dictionaryService.chainId);
|
|
247
|
-
}
|
|
248
226
|
async preLoopHook() {
|
|
249
227
|
// Ethereum doesn't need to do anything here
|
|
250
228
|
return Promise.resolve();
|
|
@@ -252,12 +230,13 @@ let FetchService = class FetchService extends node_core_1.BaseFetchService {
|
|
|
252
230
|
};
|
|
253
231
|
FetchService = __decorate([
|
|
254
232
|
(0, common_1.Injectable)(),
|
|
255
|
-
__param(2, (0, common_1.Inject)('
|
|
256
|
-
__param(3, (0, common_1.Inject)('
|
|
233
|
+
__param(2, (0, common_1.Inject)('IProjectService')),
|
|
234
|
+
__param(3, (0, common_1.Inject)('ISubqueryProject')),
|
|
235
|
+
__param(4, (0, common_1.Inject)('IBlockDispatcher')),
|
|
257
236
|
__metadata("design:paramtypes", [node_core_1.ApiService,
|
|
258
237
|
node_core_1.NodeConfig,
|
|
238
|
+
project_service_1.ProjectService,
|
|
259
239
|
SubqueryProject_1.SubqueryProject, Object, dictionary_service_1.DictionaryService,
|
|
260
|
-
ds_processor_service_1.DsProcessorService,
|
|
261
240
|
dynamic_ds_service_1.DynamicDsService,
|
|
262
241
|
unfinalizedBlocks_service_1.UnfinalizedBlocksService,
|
|
263
242
|
event_emitter_1.EventEmitter2,
|