@subql/node 6.3.6-1 → 6.4.1-0
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 +4 -1
- package/package.json +6 -6
- package/dist/.tsbuildinfo +0 -1
- package/dist/app.module.d.ts +0 -2
- package/dist/app.module.js +0 -42
- package/dist/app.module.js.map +0 -1
- package/dist/blockchain.service.d.ts +0 -31
- package/dist/blockchain.service.js +0 -146
- package/dist/blockchain.service.js.map +0 -1
- package/dist/configure/NodeConfig.d.ts +0 -19
- package/dist/configure/NodeConfig.js +0 -28
- package/dist/configure/NodeConfig.js.map +0 -1
- package/dist/configure/SubqueryProject.d.ts +0 -13
- package/dist/configure/SubqueryProject.js +0 -29
- package/dist/configure/SubqueryProject.js.map +0 -1
- package/dist/configure/configure.module.d.ts +0 -11
- package/dist/configure/configure.module.js +0 -63
- package/dist/configure/configure.module.js.map +0 -1
- package/dist/indexer/api.service.d.ts +0 -36
- package/dist/indexer/api.service.js +0 -315
- package/dist/indexer/api.service.js.map +0 -1
- package/dist/indexer/apiPromise.connection.d.ts +0 -24
- package/dist/indexer/apiPromise.connection.js +0 -106
- package/dist/indexer/apiPromise.connection.js.map +0 -1
- package/dist/indexer/dictionary/index.d.ts +0 -2
- package/dist/indexer/dictionary/index.js +0 -21
- package/dist/indexer/dictionary/index.js.map +0 -1
- package/dist/indexer/dictionary/substrateDictionary.service.d.ts +0 -13
- package/dist/indexer/dictionary/substrateDictionary.service.js +0 -93
- package/dist/indexer/dictionary/substrateDictionary.service.js.map +0 -1
- package/dist/indexer/dictionary/types.d.ts +0 -10
- package/dist/indexer/dictionary/types.js +0 -5
- package/dist/indexer/dictionary/types.js.map +0 -1
- package/dist/indexer/dictionary/v1/index.d.ts +0 -1
- package/dist/indexer/dictionary/v1/index.js +0 -20
- package/dist/indexer/dictionary/v1/index.js.map +0 -1
- package/dist/indexer/dictionary/v1/substrateDictionaryV1.d.ts +0 -19
- package/dist/indexer/dictionary/v1/substrateDictionaryV1.js +0 -223
- package/dist/indexer/dictionary/v1/substrateDictionaryV1.js.map +0 -1
- package/dist/indexer/dictionary/v2/index.d.ts +0 -2
- package/dist/indexer/dictionary/v2/index.js +0 -21
- package/dist/indexer/dictionary/v2/index.js.map +0 -1
- package/dist/indexer/dictionary/v2/substrateDictionaryV2.d.ts +0 -20
- package/dist/indexer/dictionary/v2/substrateDictionaryV2.js +0 -46
- package/dist/indexer/dictionary/v2/substrateDictionaryV2.js.map +0 -1
- package/dist/indexer/dictionary/v2/types.d.ts +0 -5
- package/dist/indexer/dictionary/v2/types.js +0 -5
- package/dist/indexer/dictionary/v2/types.js.map +0 -1
- package/dist/indexer/fetch.module.d.ts +0 -2
- package/dist/indexer/fetch.module.js +0 -94
- package/dist/indexer/fetch.module.js.map +0 -1
- package/dist/indexer/indexer.manager.d.ts +0 -27
- package/dist/indexer/indexer.manager.js +0 -153
- package/dist/indexer/indexer.manager.js.map +0 -1
- package/dist/indexer/runtime/base-runtime.service.d.ts +0 -24
- package/dist/indexer/runtime/base-runtime.service.js +0 -136
- package/dist/indexer/runtime/base-runtime.service.js.map +0 -1
- package/dist/indexer/runtime/runtimeService.d.ts +0 -15
- package/dist/indexer/runtime/runtimeService.js +0 -94
- package/dist/indexer/runtime/runtimeService.js.map +0 -1
- package/dist/indexer/runtime/workerRuntimeService.d.ts +0 -9
- package/dist/indexer/runtime/workerRuntimeService.js +0 -43
- package/dist/indexer/runtime/workerRuntimeService.js.map +0 -1
- package/dist/indexer/types.d.ts +0 -20
- package/dist/indexer/types.js +0 -13
- package/dist/indexer/types.js.map +0 -1
- package/dist/indexer/worker/worker-fetch.module.d.ts +0 -5
- package/dist/indexer/worker/worker-fetch.module.js +0 -60
- package/dist/indexer/worker/worker-fetch.module.js.map +0 -1
- package/dist/indexer/worker/worker.d.ts +0 -9
- package/dist/indexer/worker/worker.js +0 -48
- package/dist/indexer/worker/worker.js.map +0 -1
- package/dist/indexer/worker/worker.module.d.ts +0 -2
- package/dist/indexer/worker/worker.module.js +0 -33
- package/dist/indexer/worker/worker.module.js.map +0 -1
- package/dist/indexer/worker/worker.service.d.ts +0 -26
- package/dist/indexer/worker/worker.service.js +0 -71
- package/dist/indexer/worker/worker.service.js.map +0 -1
- package/dist/indexer/x-provider/cachedProvider.d.ts +0 -2
- package/dist/indexer/x-provider/cachedProvider.js +0 -40
- package/dist/indexer/x-provider/cachedProvider.js.map +0 -1
- package/dist/indexer/x-provider/http.d.ts +0 -75
- package/dist/indexer/x-provider/http.js +0 -198
- package/dist/indexer/x-provider/http.js.map +0 -1
- package/dist/init.d.ts +0 -1
- package/dist/init.js +0 -41
- package/dist/init.js.map +0 -1
- package/dist/main.d.ts +0 -1
- package/dist/main.js +0 -19
- package/dist/main.js.map +0 -1
- package/dist/subcommands/forceClean.init.d.ts +0 -1
- package/dist/subcommands/forceClean.init.js +0 -10
- package/dist/subcommands/forceClean.init.js.map +0 -1
- package/dist/subcommands/forceClean.module.d.ts +0 -2
- package/dist/subcommands/forceClean.module.js +0 -28
- package/dist/subcommands/forceClean.module.js.map +0 -1
- package/dist/subcommands/reindex.init.d.ts +0 -3
- package/dist/subcommands/reindex.init.js +0 -33
- package/dist/subcommands/reindex.init.js.map +0 -1
- package/dist/subcommands/reindex.module.d.ts +0 -2
- package/dist/subcommands/reindex.module.js +0 -69
- package/dist/subcommands/reindex.module.js.map +0 -1
- package/dist/subcommands/testing.init.d.ts +0 -1
- package/dist/subcommands/testing.init.js +0 -21
- package/dist/subcommands/testing.init.js.map +0 -1
- package/dist/subcommands/testing.module.d.ts +0 -2
- package/dist/subcommands/testing.module.js +0 -65
- package/dist/subcommands/testing.module.js.map +0 -1
- package/dist/subcommands/testing.service.d.ts +0 -14
- package/dist/subcommands/testing.service.js +0 -60
- package/dist/subcommands/testing.service.js.map +0 -1
- package/dist/utils/project.d.ts +0 -9
- package/dist/utils/project.js +0 -116
- package/dist/utils/project.js.map +0 -1
- package/dist/utils/substrate.d.ts +0 -41
- package/dist/utils/substrate.js +0 -348
- package/dist/utils/substrate.js.map +0 -1
- package/dist/utils/test.utils.d.ts +0 -2
- package/dist/utils/test.utils.js +0 -70
- package/dist/utils/test.utils.js.map +0 -1
- package/dist/yargs.d.ts +0 -276
- package/dist/yargs.js +0 -27
- package/dist/yargs.js.map +0 -1
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
|
|
3
|
-
// SPDX-License-Identifier: GPL-3.0
|
|
4
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
5
|
-
if (k2 === undefined) k2 = k;
|
|
6
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
7
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
8
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
9
|
-
}
|
|
10
|
-
Object.defineProperty(o, k2, desc);
|
|
11
|
-
}) : (function(o, m, k, k2) {
|
|
12
|
-
if (k2 === undefined) k2 = k;
|
|
13
|
-
o[k2] = m[k];
|
|
14
|
-
}));
|
|
15
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
16
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
17
|
-
}) : function(o, v) {
|
|
18
|
-
o["default"] = v;
|
|
19
|
-
});
|
|
20
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
21
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
22
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
23
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
24
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
25
|
-
};
|
|
26
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
-
var ownKeys = function(o) {
|
|
28
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
-
var ar = [];
|
|
30
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
-
return ar;
|
|
32
|
-
};
|
|
33
|
-
return ownKeys(o);
|
|
34
|
-
};
|
|
35
|
-
return function (mod) {
|
|
36
|
-
if (mod && mod.__esModule) return mod;
|
|
37
|
-
var result = {};
|
|
38
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
-
__setModuleDefault(result, mod);
|
|
40
|
-
return result;
|
|
41
|
-
};
|
|
42
|
-
})();
|
|
43
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
44
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
45
|
-
};
|
|
46
|
-
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
47
|
-
return function (target, key) { decorator(target, key, paramIndex); }
|
|
48
|
-
};
|
|
49
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
-
exports.IndexerManager = void 0;
|
|
51
|
-
const common_1 = require("@nestjs/common");
|
|
52
|
-
const common_substrate_1 = require("@subql/common-substrate");
|
|
53
|
-
const node_core_1 = require("@subql/node-core");
|
|
54
|
-
const blockchain_service_1 = require("../blockchain.service");
|
|
55
|
-
const SubstrateUtil = __importStar(require("../utils/substrate"));
|
|
56
|
-
const api_service_1 = require("./api.service");
|
|
57
|
-
const types_1 = require("./types");
|
|
58
|
-
const logger = (0, node_core_1.getLogger)('indexer');
|
|
59
|
-
let IndexerManager = class IndexerManager extends node_core_1.BaseIndexerManager {
|
|
60
|
-
constructor(apiService, nodeConfig, sandboxService, dsProcessorService, dynamicDsService, unfinalizedBlocksService, blockchainService) {
|
|
61
|
-
super(apiService, nodeConfig, sandboxService, dsProcessorService, dynamicDsService, unfinalizedBlocksService, FilterTypeMap, ProcessorTypeMap, blockchainService);
|
|
62
|
-
}
|
|
63
|
-
async indexBlock(block, dataSources) {
|
|
64
|
-
return super.internalIndexBlock(block, dataSources, () => this.blockchainService.getSafeApi(block.block));
|
|
65
|
-
}
|
|
66
|
-
async indexBlockData(blockContent, dataSources, getVM) {
|
|
67
|
-
if ((0, types_1.isFullBlock)(blockContent)) {
|
|
68
|
-
const { block, events, extrinsics } = blockContent;
|
|
69
|
-
await this.indexContent(common_substrate_1.SubstrateHandlerKind.Block)(block, dataSources, getVM);
|
|
70
|
-
// Group the events so they only need to be iterated over a single time
|
|
71
|
-
const groupedEvents = events.reduce((acc, evt, idx) => {
|
|
72
|
-
if (evt.phase.isInitialization) {
|
|
73
|
-
acc.init.push(evt);
|
|
74
|
-
}
|
|
75
|
-
else if (evt.phase.isFinalization) {
|
|
76
|
-
acc.finalize.push(evt);
|
|
77
|
-
}
|
|
78
|
-
else if (evt.extrinsic?.idx) {
|
|
79
|
-
const idx = evt.extrinsic.idx;
|
|
80
|
-
acc[idx] ??= [];
|
|
81
|
-
acc[idx].push(evt);
|
|
82
|
-
}
|
|
83
|
-
else if (!evt.phase.isApplyExtrinsic) {
|
|
84
|
-
logger.warn(`Unrecognized event type, skipping. block="${block.block.header.number.toNumber()}" eventIdx="${idx}"`);
|
|
85
|
-
}
|
|
86
|
-
return acc;
|
|
87
|
-
}, { init: [], finalize: [] });
|
|
88
|
-
// Run initialization events
|
|
89
|
-
for (const event of groupedEvents.init) {
|
|
90
|
-
await this.indexContent(common_substrate_1.SubstrateHandlerKind.Event)(event, dataSources, getVM);
|
|
91
|
-
}
|
|
92
|
-
for (const extrinsic of extrinsics) {
|
|
93
|
-
await this.indexContent(common_substrate_1.SubstrateHandlerKind.Call)(extrinsic, dataSources, getVM);
|
|
94
|
-
// Process extrinsic events
|
|
95
|
-
const extrinsicEvents = (groupedEvents[extrinsic.idx] ?? []).sort((a, b) => a.idx - b.idx);
|
|
96
|
-
for (const event of extrinsicEvents) {
|
|
97
|
-
await this.indexContent(common_substrate_1.SubstrateHandlerKind.Event)(event, dataSources, getVM);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
// Run finalization events
|
|
101
|
-
for (const event of groupedEvents.finalize) {
|
|
102
|
-
await this.indexContent(common_substrate_1.SubstrateHandlerKind.Event)(event, dataSources, getVM);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
for (const event of blockContent.events) {
|
|
107
|
-
await this.indexContent(common_substrate_1.SubstrateHandlerKind.Event)(event, dataSources, getVM);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
indexContent(kind) {
|
|
112
|
-
return async (content, dataSources, getVM) => {
|
|
113
|
-
for (const ds of dataSources) {
|
|
114
|
-
await this.indexData(kind, content, ds, getVM);
|
|
115
|
-
}
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
async prepareFilteredData(kind, data) {
|
|
119
|
-
// Substrate doesn't need to do anything here
|
|
120
|
-
return Promise.resolve(data);
|
|
121
|
-
}
|
|
122
|
-
};
|
|
123
|
-
exports.IndexerManager = IndexerManager;
|
|
124
|
-
__decorate([
|
|
125
|
-
(0, node_core_1.profiler)(),
|
|
126
|
-
__metadata("design:type", Function),
|
|
127
|
-
__metadata("design:paramtypes", [Object, Array]),
|
|
128
|
-
__metadata("design:returntype", Promise)
|
|
129
|
-
], IndexerManager.prototype, "indexBlock", null);
|
|
130
|
-
exports.IndexerManager = IndexerManager = __decorate([
|
|
131
|
-
(0, common_1.Injectable)(),
|
|
132
|
-
__param(0, (0, common_1.Inject)('APIService')),
|
|
133
|
-
__param(5, (0, common_1.Inject)('IUnfinalizedBlocksService')),
|
|
134
|
-
__param(6, (0, common_1.Inject)('IBlockchainService')),
|
|
135
|
-
__metadata("design:paramtypes", [api_service_1.ApiService,
|
|
136
|
-
node_core_1.NodeConfig,
|
|
137
|
-
node_core_1.SandboxService,
|
|
138
|
-
node_core_1.DsProcessorService,
|
|
139
|
-
node_core_1.DynamicDsService,
|
|
140
|
-
node_core_1.UnfinalizedBlocksService,
|
|
141
|
-
blockchain_service_1.BlockchainService])
|
|
142
|
-
], IndexerManager);
|
|
143
|
-
const ProcessorTypeMap = {
|
|
144
|
-
[common_substrate_1.SubstrateHandlerKind.Block]: common_substrate_1.isBlockHandlerProcessor,
|
|
145
|
-
[common_substrate_1.SubstrateHandlerKind.Event]: common_substrate_1.isEventHandlerProcessor,
|
|
146
|
-
[common_substrate_1.SubstrateHandlerKind.Call]: common_substrate_1.isCallHandlerProcessor,
|
|
147
|
-
};
|
|
148
|
-
const FilterTypeMap = {
|
|
149
|
-
[common_substrate_1.SubstrateHandlerKind.Block]: (block, filter) => !!SubstrateUtil.filterBlock(block, filter),
|
|
150
|
-
[common_substrate_1.SubstrateHandlerKind.Event]: SubstrateUtil.filterEvent,
|
|
151
|
-
[common_substrate_1.SubstrateHandlerKind.Call]: SubstrateUtil.filterExtrinsic,
|
|
152
|
-
};
|
|
153
|
-
//# sourceMappingURL=indexer.manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"indexer.manager.js","sourceRoot":"","sources":["../../src/indexer/indexer.manager.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Inject, Injectable } from '@nestjs/common';\nimport { ApiPromise } from '@polkadot/api';\nimport {\n isBlockHandlerProcessor,\n isCallHandlerProcessor,\n isEventHandlerProcessor,\n SubstrateCustomDataSource,\n SubstrateHandlerKind,\n SubstrateRuntimeHandlerInputMap,\n} from '@subql/common-substrate';\nimport {\n NodeConfig,\n profiler,\n SandboxService,\n IndexerSandbox,\n ProcessBlockResponse,\n BaseIndexerManager,\n DsProcessorService,\n IBlock,\n getLogger,\n UnfinalizedBlocksService,\n DynamicDsService,\n} from '@subql/node-core';\nimport {\n LightSubstrateEvent,\n SubstrateBlock,\n SubstrateBlockFilter,\n SubstrateCustomDatasource,\n SubstrateDatasource,\n SubstrateEvent,\n SubstrateExtrinsic,\n} from '@subql/types';\nimport { BlockchainService } from '../blockchain.service';\nimport { SubstrateProjectDs } from '../configure/SubqueryProject';\nimport * as SubstrateUtil from '../utils/substrate';\nimport { ApiService as SubstrateApiService } from './api.service';\nimport { ApiAt, BlockContent, isFullBlock, LightBlockContent } from './types';\n\nconst logger = getLogger('indexer');\n\n@Injectable()\nexport class IndexerManager extends BaseIndexerManager<\n ApiPromise,\n ApiAt,\n BlockContent | LightBlockContent,\n SubstrateApiService,\n SubstrateDatasource,\n SubstrateCustomDataSource,\n typeof FilterTypeMap,\n typeof ProcessorTypeMap,\n SubstrateRuntimeHandlerInputMap\n> {\n constructor(\n @Inject('APIService') apiService: SubstrateApiService,\n nodeConfig: NodeConfig,\n sandboxService: SandboxService<ApiAt, ApiPromise>,\n dsProcessorService: DsProcessorService<\n SubstrateDatasource,\n SubstrateCustomDatasource\n >,\n dynamicDsService: DynamicDsService<SubstrateDatasource>,\n @Inject('IUnfinalizedBlocksService')\n unfinalizedBlocksService: UnfinalizedBlocksService<\n BlockContent | LightBlockContent\n >,\n @Inject('IBlockchainService')\n blockchainService: BlockchainService,\n ) {\n super(\n apiService,\n nodeConfig,\n sandboxService,\n dsProcessorService,\n dynamicDsService,\n unfinalizedBlocksService,\n FilterTypeMap,\n ProcessorTypeMap,\n blockchainService,\n );\n }\n\n @profiler()\n async indexBlock(\n block: IBlock<BlockContent | LightBlockContent>,\n dataSources: SubstrateDatasource[],\n ): Promise<ProcessBlockResponse> {\n return super.internalIndexBlock(block, dataSources, () =>\n this.blockchainService.getSafeApi(block.block),\n );\n }\n\n protected async indexBlockData(\n blockContent: LightBlockContent | BlockContent,\n dataSources: SubstrateProjectDs[],\n getVM: (d: SubstrateProjectDs) => Promise<IndexerSandbox>,\n ): Promise<void> {\n if (isFullBlock(blockContent)) {\n const { block, events, extrinsics } = blockContent;\n await this.indexContent(SubstrateHandlerKind.Block)(\n block,\n dataSources,\n getVM,\n );\n\n // Group the events so they only need to be iterated over a single time\n const groupedEvents = events.reduce(\n (acc, evt, idx) => {\n if (evt.phase.isInitialization) {\n acc.init.push(evt);\n } else if (evt.phase.isFinalization) {\n acc.finalize.push(evt);\n } else if (evt.extrinsic?.idx) {\n const idx = evt.extrinsic.idx;\n acc[idx] ??= [];\n acc[idx].push(evt);\n } else if (!evt.phase.isApplyExtrinsic) {\n logger.warn(\n `Unrecognized event type, skipping. block=\"${block.block.header.number.toNumber()}\" eventIdx=\"${idx}\"`,\n );\n }\n return acc;\n },\n { init: [], finalize: [] } as Record<\n number | 'init' | 'finalize',\n SubstrateEvent[]\n >,\n );\n\n // Run initialization events\n for (const event of groupedEvents.init) {\n await this.indexContent(SubstrateHandlerKind.Event)(\n event,\n dataSources,\n getVM,\n );\n }\n\n for (const extrinsic of extrinsics) {\n await this.indexContent(SubstrateHandlerKind.Call)(\n extrinsic,\n dataSources,\n getVM,\n );\n\n // Process extrinsic events\n const extrinsicEvents = (groupedEvents[extrinsic.idx] ?? []).sort(\n (a, b) => a.idx - b.idx,\n );\n\n for (const event of extrinsicEvents) {\n await this.indexContent(SubstrateHandlerKind.Event)(\n event,\n dataSources,\n getVM,\n );\n }\n }\n\n // Run finalization events\n for (const event of groupedEvents.finalize) {\n await this.indexContent(SubstrateHandlerKind.Event)(\n event,\n dataSources,\n getVM,\n );\n }\n } else {\n for (const event of blockContent.events) {\n await this.indexContent(SubstrateHandlerKind.Event)(\n event,\n dataSources,\n getVM,\n );\n }\n }\n }\n\n private indexContent(\n kind: SubstrateHandlerKind,\n ): (\n content:\n | SubstrateBlock\n | SubstrateExtrinsic\n | SubstrateEvent\n | LightSubstrateEvent,\n dataSources: SubstrateProjectDs[],\n getVM: (d: SubstrateProjectDs) => Promise<IndexerSandbox>,\n ) => Promise<void> {\n return async (content, dataSources, getVM) => {\n for (const ds of dataSources) {\n await this.indexData(kind, content, ds, getVM);\n }\n };\n }\n\n protected async prepareFilteredData<T = any>(\n kind: SubstrateHandlerKind,\n data: T,\n ): Promise<T> {\n // Substrate doesn't need to do anything here\n return Promise.resolve(data);\n }\n}\n\nconst ProcessorTypeMap = {\n [SubstrateHandlerKind.Block]: isBlockHandlerProcessor,\n [SubstrateHandlerKind.Event]: isEventHandlerProcessor,\n [SubstrateHandlerKind.Call]: isCallHandlerProcessor,\n};\n\nconst FilterTypeMap = {\n [SubstrateHandlerKind.Block]: (\n block: SubstrateBlock,\n filter?: SubstrateBlockFilter,\n ) => !!SubstrateUtil.filterBlock(block, filter),\n [SubstrateHandlerKind.Event]: SubstrateUtil.filterEvent,\n [SubstrateHandlerKind.Call]: SubstrateUtil.filterExtrinsic,\n};\n"]}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { ApiPromise } from '@polkadot/api';
|
|
2
|
-
import { RuntimeVersion } from '@polkadot/types/interfaces';
|
|
3
|
-
import { SubstrateBlock } from '@subql/types';
|
|
4
|
-
import { ApiService } from '../api.service';
|
|
5
|
-
import { SpecVersion } from '../dictionary';
|
|
6
|
-
export declare const SPEC_VERSION_BLOCK_GAP = 100;
|
|
7
|
-
export declare abstract class BaseRuntimeService {
|
|
8
|
-
protected apiService: ApiService;
|
|
9
|
-
parentSpecVersion?: number;
|
|
10
|
-
specVersionMap: SpecVersion[];
|
|
11
|
-
private currentRuntimeVersion?;
|
|
12
|
-
latestFinalizedHeight?: number;
|
|
13
|
-
constructor(apiService: ApiService);
|
|
14
|
-
specChanged(height: number, specVersion: number): Promise<boolean>;
|
|
15
|
-
abstract getSpecVersion(blockHeight: number): Promise<{
|
|
16
|
-
blockSpecVersion: number;
|
|
17
|
-
syncedDictionary: boolean;
|
|
18
|
-
}>;
|
|
19
|
-
get api(): ApiPromise;
|
|
20
|
-
getSpecFromMap(blockHeight: number, specVersions?: SpecVersion[]): number | undefined;
|
|
21
|
-
getSpecFromApi(height: number): Promise<number>;
|
|
22
|
-
prefetchMeta(height: number): Promise<void>;
|
|
23
|
-
getRuntimeVersion(block: SubstrateBlock): Promise<RuntimeVersion>;
|
|
24
|
-
}
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
|
|
3
|
-
// SPDX-License-Identifier: GPL-3.0
|
|
4
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
5
|
-
if (k2 === undefined) k2 = k;
|
|
6
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
7
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
8
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
9
|
-
}
|
|
10
|
-
Object.defineProperty(o, k2, desc);
|
|
11
|
-
}) : (function(o, m, k, k2) {
|
|
12
|
-
if (k2 === undefined) k2 = k;
|
|
13
|
-
o[k2] = m[k];
|
|
14
|
-
}));
|
|
15
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
16
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
17
|
-
}) : function(o, v) {
|
|
18
|
-
o["default"] = v;
|
|
19
|
-
});
|
|
20
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
21
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
22
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
23
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
24
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
25
|
-
};
|
|
26
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
27
|
-
var ownKeys = function(o) {
|
|
28
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
29
|
-
var ar = [];
|
|
30
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
31
|
-
return ar;
|
|
32
|
-
};
|
|
33
|
-
return ownKeys(o);
|
|
34
|
-
};
|
|
35
|
-
return function (mod) {
|
|
36
|
-
if (mod && mod.__esModule) return mod;
|
|
37
|
-
var result = {};
|
|
38
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
39
|
-
__setModuleDefault(result, mod);
|
|
40
|
-
return result;
|
|
41
|
-
};
|
|
42
|
-
})();
|
|
43
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
44
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
45
|
-
};
|
|
46
|
-
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
47
|
-
return function (target, key) { decorator(target, key, paramIndex); }
|
|
48
|
-
};
|
|
49
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
-
exports.BaseRuntimeService = exports.SPEC_VERSION_BLOCK_GAP = void 0;
|
|
51
|
-
const common_1 = require("@nestjs/common");
|
|
52
|
-
const node_core_1 = require("@subql/node-core");
|
|
53
|
-
const SubstrateUtil = __importStar(require("../../utils/substrate"));
|
|
54
|
-
const api_service_1 = require("../api.service");
|
|
55
|
-
exports.SPEC_VERSION_BLOCK_GAP = 100;
|
|
56
|
-
let BaseRuntimeService = class BaseRuntimeService {
|
|
57
|
-
apiService;
|
|
58
|
-
parentSpecVersion;
|
|
59
|
-
specVersionMap = [];
|
|
60
|
-
currentRuntimeVersion;
|
|
61
|
-
latestFinalizedHeight;
|
|
62
|
-
constructor(apiService) {
|
|
63
|
-
this.apiService = apiService;
|
|
64
|
-
}
|
|
65
|
-
async specChanged(height, specVersion) {
|
|
66
|
-
if (this.parentSpecVersion !== specVersion) {
|
|
67
|
-
const parentSpecVersionCopy = this.parentSpecVersion;
|
|
68
|
-
this.parentSpecVersion = specVersion;
|
|
69
|
-
await this.prefetchMeta(height);
|
|
70
|
-
// When runtime init parentSpecVersion is undefined, count as unchanged,
|
|
71
|
-
// so it will not use fetchRuntimeVersionRange
|
|
72
|
-
return parentSpecVersionCopy !== undefined;
|
|
73
|
-
}
|
|
74
|
-
return false;
|
|
75
|
-
}
|
|
76
|
-
get api() {
|
|
77
|
-
return this.apiService.api;
|
|
78
|
-
}
|
|
79
|
-
getSpecFromMap(blockHeight, specVersions) {
|
|
80
|
-
//return undefined block can not find inside range
|
|
81
|
-
const spec = specVersions?.find((spec) => blockHeight >= spec.start &&
|
|
82
|
-
(spec.end !== null ? blockHeight <= spec.end : true));
|
|
83
|
-
return spec ? Number(spec.id) : undefined;
|
|
84
|
-
}
|
|
85
|
-
async getSpecFromApi(height) {
|
|
86
|
-
const parentBlockHash = await this.api.rpc.chain.getBlockHash(Math.max(height - 1, 0));
|
|
87
|
-
const runtimeVersion = await this.api.rpc.state.getRuntimeVersion(parentBlockHash);
|
|
88
|
-
const specVersion = runtimeVersion.specVersion.toNumber();
|
|
89
|
-
return specVersion;
|
|
90
|
-
}
|
|
91
|
-
async prefetchMeta(height) {
|
|
92
|
-
const blockHash = await this.api.rpc.chain.getBlockHash(height);
|
|
93
|
-
if (this.parentSpecVersion !== undefined &&
|
|
94
|
-
this.specVersionMap &&
|
|
95
|
-
this.specVersionMap.length !== 0) {
|
|
96
|
-
const parentSpecVersion = this.specVersionMap.find((spec) => Number(spec.id) === this.parentSpecVersion);
|
|
97
|
-
if (parentSpecVersion === undefined) {
|
|
98
|
-
await SubstrateUtil.prefetchMetadata(this.api, blockHash);
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
for (const specVersion of this.specVersionMap) {
|
|
102
|
-
if ((parentSpecVersion.end !== null
|
|
103
|
-
? specVersion.start > parentSpecVersion.end
|
|
104
|
-
: true) &&
|
|
105
|
-
specVersion.start <= height) {
|
|
106
|
-
const blockHash = await this.api.rpc.chain.getBlockHash(specVersion.start);
|
|
107
|
-
await SubstrateUtil.prefetchMetadata(this.api, blockHash);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
await SubstrateUtil.prefetchMetadata(this.api, blockHash);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
async getRuntimeVersion(block) {
|
|
117
|
-
if (!this.currentRuntimeVersion ||
|
|
118
|
-
this.currentRuntimeVersion.specVersion.toNumber() !== block.specVersion) {
|
|
119
|
-
this.currentRuntimeVersion = await this.api.rpc.state.getRuntimeVersion(block.block.header.parentHash);
|
|
120
|
-
}
|
|
121
|
-
return this.currentRuntimeVersion;
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
exports.BaseRuntimeService = BaseRuntimeService;
|
|
125
|
-
__decorate([
|
|
126
|
-
(0, node_core_1.profiler)(),
|
|
127
|
-
__metadata("design:type", Function),
|
|
128
|
-
__metadata("design:paramtypes", [Number]),
|
|
129
|
-
__metadata("design:returntype", Promise)
|
|
130
|
-
], BaseRuntimeService.prototype, "prefetchMeta", null);
|
|
131
|
-
exports.BaseRuntimeService = BaseRuntimeService = __decorate([
|
|
132
|
-
(0, common_1.Injectable)(),
|
|
133
|
-
__param(0, (0, common_1.Inject)('APIService')),
|
|
134
|
-
__metadata("design:paramtypes", [api_service_1.ApiService])
|
|
135
|
-
], BaseRuntimeService);
|
|
136
|
-
//# sourceMappingURL=base-runtime.service.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base-runtime.service.js","sourceRoot":"","sources":["../../../src/indexer/runtime/base-runtime.service.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEnC,2CAAoD;AAGpD,gDAA4C;AAE5C,qEAAuD;AACvD,gDAA4C;AAE/B,QAAA,sBAAsB,GAAG,GAAG,CAAC;AAGnC,IAAe,kBAAkB,GAAjC,MAAe,kBAAkB;IAMM;IAL5C,iBAAiB,CAAU;IAC3B,cAAc,GAAkB,EAAE,CAAC;IAC3B,qBAAqB,CAAkB;IAC/C,qBAAqB,CAAU;IAE/B,YAA4C,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;IAAG,CAAC;IAEtE,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,WAAmB;QACnD,IAAI,IAAI,CAAC,iBAAiB,KAAK,WAAW,EAAE,CAAC;YAC3C,MAAM,qBAAqB,GAAG,IAAI,CAAC,iBAAiB,CAAC;YACrD,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC;YACrC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAChC,wEAAwE;YACxE,8CAA8C;YAC9C,OAAO,qBAAqB,KAAK,SAAS,CAAC;QAC7C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAMD,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;IAC7B,CAAC;IAED,cAAc,CACZ,WAAmB,EACnB,YAA4B;QAE5B,kDAAkD;QAClD,MAAM,IAAI,GAAG,YAAY,EAAE,IAAI,CAC7B,CAAC,IAAI,EAAE,EAAE,CACP,WAAW,IAAI,IAAI,CAAC,KAAK;YACzB,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CACvD,CAAC;QACF,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAAc;QACjC,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAC3D,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CACxB,CAAC;QACF,MAAM,cAAc,GAClB,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;QAC9D,MAAM,WAAW,GAAG,cAAc,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC1D,OAAO,WAAW,CAAC;IACrB,CAAC;IAGK,AAAN,KAAK,CAAC,YAAY,CAAC,MAAc;QAC/B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAChE,IACE,IAAI,CAAC,iBAAiB,KAAK,SAAS;YACpC,IAAI,CAAC,cAAc;YACnB,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAChC,CAAC;YACD,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAChD,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,iBAAiB,CACrD,CAAC;YACF,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;gBACpC,MAAM,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAC5D,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;oBAC9C,IACE,CAAC,iBAAiB,CAAC,GAAG,KAAK,IAAI;wBAC7B,CAAC,CAAC,WAAW,CAAC,KAAK,GAAG,iBAAiB,CAAC,GAAG;wBAC3C,CAAC,CAAC,IAAI,CAAC;wBACT,WAAW,CAAC,KAAK,IAAI,MAAM,EAC3B,CAAC;wBACD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CACrD,WAAW,CAAC,KAAK,CAClB,CAAC;wBACF,MAAM,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;oBAC5D,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,KAAqB;QAC3C,IACE,CAAC,IAAI,CAAC,qBAAqB;YAC3B,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,WAAW,EACvE,CAAC;YACD,IAAI,CAAC,qBAAqB,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CACrE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAC9B,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACpC,CAAC;CACF,CAAA;AA/FqB,gDAAkB;AAoDhC;IADL,IAAA,oBAAQ,GAAE;;;;sDA+BV;6BAlFmB,kBAAkB;IADvC,IAAA,mBAAU,GAAE;IAOE,WAAA,IAAA,eAAM,EAAC,YAAY,CAAC,CAAA;qCAAuB,wBAAU;GAN9C,kBAAkB,CA+FvC","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Inject, Injectable } from '@nestjs/common';\nimport { ApiPromise } from '@polkadot/api';\nimport { RuntimeVersion } from '@polkadot/types/interfaces';\nimport { profiler } from '@subql/node-core';\nimport { SubstrateBlock } from '@subql/types';\nimport * as SubstrateUtil from '../../utils/substrate';\nimport { ApiService } from '../api.service';\nimport { SpecVersion } from '../dictionary';\nexport const SPEC_VERSION_BLOCK_GAP = 100;\n\n@Injectable()\nexport abstract class BaseRuntimeService {\n parentSpecVersion?: number;\n specVersionMap: SpecVersion[] = [];\n private currentRuntimeVersion?: RuntimeVersion;\n latestFinalizedHeight?: number;\n\n constructor(@Inject('APIService') protected apiService: ApiService) {}\n\n async specChanged(height: number, specVersion: number): Promise<boolean> {\n if (this.parentSpecVersion !== specVersion) {\n const parentSpecVersionCopy = this.parentSpecVersion;\n this.parentSpecVersion = specVersion;\n await this.prefetchMeta(height);\n // When runtime init parentSpecVersion is undefined, count as unchanged,\n // so it will not use fetchRuntimeVersionRange\n return parentSpecVersionCopy !== undefined;\n }\n return false;\n }\n\n abstract getSpecVersion(\n blockHeight: number,\n ): Promise<{ blockSpecVersion: number; syncedDictionary: boolean }>;\n\n get api(): ApiPromise {\n return this.apiService.api;\n }\n\n getSpecFromMap(\n blockHeight: number,\n specVersions?: SpecVersion[],\n ): number | undefined {\n //return undefined block can not find inside range\n const spec = specVersions?.find(\n (spec) =>\n blockHeight >= spec.start &&\n (spec.end !== null ? blockHeight <= spec.end : true),\n );\n return spec ? Number(spec.id) : undefined;\n }\n\n async getSpecFromApi(height: number): Promise<number> {\n const parentBlockHash = await this.api.rpc.chain.getBlockHash(\n Math.max(height - 1, 0),\n );\n const runtimeVersion =\n await this.api.rpc.state.getRuntimeVersion(parentBlockHash);\n const specVersion = runtimeVersion.specVersion.toNumber();\n return specVersion;\n }\n\n @profiler()\n async prefetchMeta(height: number): Promise<void> {\n const blockHash = await this.api.rpc.chain.getBlockHash(height);\n if (\n this.parentSpecVersion !== undefined &&\n this.specVersionMap &&\n this.specVersionMap.length !== 0\n ) {\n const parentSpecVersion = this.specVersionMap.find(\n (spec) => Number(spec.id) === this.parentSpecVersion,\n );\n if (parentSpecVersion === undefined) {\n await SubstrateUtil.prefetchMetadata(this.api, blockHash);\n } else {\n for (const specVersion of this.specVersionMap) {\n if (\n (parentSpecVersion.end !== null\n ? specVersion.start > parentSpecVersion.end\n : true) &&\n specVersion.start <= height\n ) {\n const blockHash = await this.api.rpc.chain.getBlockHash(\n specVersion.start,\n );\n await SubstrateUtil.prefetchMetadata(this.api, blockHash);\n }\n }\n }\n } else {\n await SubstrateUtil.prefetchMetadata(this.api, blockHash);\n }\n }\n\n async getRuntimeVersion(block: SubstrateBlock): Promise<RuntimeVersion> {\n if (\n !this.currentRuntimeVersion ||\n this.currentRuntimeVersion.specVersion.toNumber() !== block.specVersion\n ) {\n this.currentRuntimeVersion = await this.api.rpc.state.getRuntimeVersion(\n block.block.header.parentHash,\n );\n }\n return this.currentRuntimeVersion;\n }\n}\n"]}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { ApiService } from '../api.service';
|
|
2
|
-
import { SubstrateDictionaryService } from '../dictionary';
|
|
3
|
-
import { BaseRuntimeService } from './base-runtime.service';
|
|
4
|
-
export declare class RuntimeService extends BaseRuntimeService {
|
|
5
|
-
protected apiService: ApiService;
|
|
6
|
-
protected dictionaryService?: SubstrateDictionaryService;
|
|
7
|
-
constructor(apiService: ApiService);
|
|
8
|
-
init(startHeight: number, latestFinalizedHeight: number, dictionaryService: SubstrateDictionaryService): Promise<void>;
|
|
9
|
-
syncDictionarySpecVersions(): Promise<void>;
|
|
10
|
-
getSpecVersion(blockHeight: number): Promise<{
|
|
11
|
-
blockSpecVersion: number;
|
|
12
|
-
syncedDictionary: boolean;
|
|
13
|
-
}>;
|
|
14
|
-
specChanged(height: number, specVersion?: number): Promise<boolean>;
|
|
15
|
-
}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
|
|
3
|
-
// SPDX-License-Identifier: GPL-3.0
|
|
4
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
5
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
6
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
7
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
8
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
9
|
-
};
|
|
10
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
11
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
12
|
-
};
|
|
13
|
-
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
14
|
-
return function (target, key) { decorator(target, key, paramIndex); }
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.RuntimeService = void 0;
|
|
18
|
-
const common_1 = require("@nestjs/common");
|
|
19
|
-
const node_core_1 = require("@subql/node-core");
|
|
20
|
-
const api_service_1 = require("../api.service");
|
|
21
|
-
const base_runtime_service_1 = require("./base-runtime.service");
|
|
22
|
-
const logger = (0, node_core_1.getLogger)('RuntimeService');
|
|
23
|
-
let RuntimeService = class RuntimeService extends base_runtime_service_1.BaseRuntimeService {
|
|
24
|
-
apiService;
|
|
25
|
-
dictionaryService;
|
|
26
|
-
constructor(apiService) {
|
|
27
|
-
super(apiService);
|
|
28
|
-
this.apiService = apiService;
|
|
29
|
-
}
|
|
30
|
-
async init(startHeight, latestFinalizedHeight, dictionaryService) {
|
|
31
|
-
this.latestFinalizedHeight = latestFinalizedHeight;
|
|
32
|
-
this.dictionaryService = dictionaryService;
|
|
33
|
-
await this.syncDictionarySpecVersions();
|
|
34
|
-
await this.specChanged(startHeight);
|
|
35
|
-
await this.prefetchMeta(startHeight);
|
|
36
|
-
}
|
|
37
|
-
// get latest specVersions from dictionary
|
|
38
|
-
async syncDictionarySpecVersions() {
|
|
39
|
-
try {
|
|
40
|
-
// must check useDictionary before get SpecVersion, this will give the right dictionary to fetch SpecVersions
|
|
41
|
-
const response = await this.dictionaryService?.getSpecVersions();
|
|
42
|
-
if (response !== undefined) {
|
|
43
|
-
this.specVersionMap = response;
|
|
44
|
-
}
|
|
45
|
-
else if (this.specVersionMap === undefined) {
|
|
46
|
-
this.specVersionMap = [];
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
catch (e) {
|
|
50
|
-
logger.error(e, 'Failed to get spec versions');
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
// main runtime responsible for sync from dictionary
|
|
54
|
-
async getSpecVersion(blockHeight) {
|
|
55
|
-
let blockSpecVersion;
|
|
56
|
-
let syncedDictionary = false;
|
|
57
|
-
// we want to keep the specVersionMap in memory, and use it even useDictionary been disabled
|
|
58
|
-
// therefore instead of check .useDictionary, we check it length before use it.
|
|
59
|
-
if (this.specVersionMap && this.specVersionMap.length !== 0) {
|
|
60
|
-
blockSpecVersion = this.getSpecFromMap(blockHeight, this.specVersionMap);
|
|
61
|
-
}
|
|
62
|
-
if (blockSpecVersion === undefined) {
|
|
63
|
-
blockSpecVersion = await this.getSpecFromApi(blockHeight);
|
|
64
|
-
if (this.latestFinalizedHeight &&
|
|
65
|
-
blockHeight + base_runtime_service_1.SPEC_VERSION_BLOCK_GAP < this.latestFinalizedHeight) {
|
|
66
|
-
// Ask to sync local specVersionMap with dictionary
|
|
67
|
-
await this.syncDictionarySpecVersions();
|
|
68
|
-
syncedDictionary = true;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
return { blockSpecVersion, syncedDictionary };
|
|
72
|
-
}
|
|
73
|
-
// the specVersion is always undefined
|
|
74
|
-
async specChanged(height, specVersion) {
|
|
75
|
-
if (specVersion === undefined) {
|
|
76
|
-
const { blockSpecVersion } = await this.getSpecVersion(height);
|
|
77
|
-
specVersion = blockSpecVersion;
|
|
78
|
-
}
|
|
79
|
-
return super.specChanged(height, specVersion);
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
exports.RuntimeService = RuntimeService;
|
|
83
|
-
__decorate([
|
|
84
|
-
(0, node_core_1.profiler)(),
|
|
85
|
-
__metadata("design:type", Function),
|
|
86
|
-
__metadata("design:paramtypes", [Number, Number]),
|
|
87
|
-
__metadata("design:returntype", Promise)
|
|
88
|
-
], RuntimeService.prototype, "specChanged", null);
|
|
89
|
-
exports.RuntimeService = RuntimeService = __decorate([
|
|
90
|
-
(0, common_1.Injectable)(),
|
|
91
|
-
__param(0, (0, common_1.Inject)('APIService')),
|
|
92
|
-
__metadata("design:paramtypes", [api_service_1.ApiService])
|
|
93
|
-
], RuntimeService);
|
|
94
|
-
//# sourceMappingURL=runtimeService.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtimeService.js","sourceRoot":"","sources":["../../../src/indexer/runtime/runtimeService.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;;;;;;;AAEnC,2CAAoD;AACpD,gDAAuD;AACvD,gDAA4C;AAE5C,iEAGgC;AAEhC,MAAM,MAAM,GAAG,IAAA,qBAAS,EAAC,gBAAgB,CAAC,CAAC;AAGpC,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,yCAAkB;IAER;IADlC,iBAAiB,CAA8B;IACzD,YAA4C,UAAsB;QAChE,KAAK,CAAC,UAAU,CAAC,CAAC;QADwB,eAAU,GAAV,UAAU,CAAY;IAElE,CAAC;IAED,KAAK,CAAC,IAAI,CACR,WAAmB,EACnB,qBAA6B,EAC7B,iBAA6C;QAE7C,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;QACnD,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAE3C,MAAM,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAExC,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACpC,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IACvC,CAAC;IAED,0CAA0C;IAC1C,KAAK,CAAC,0BAA0B;QAC9B,IAAI,CAAC;YACH,6GAA6G;YAC7G,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,eAAe,EAAE,CAAC;YACjE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC;YACjC,CAAC;iBAAM,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;gBAC7C,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,6BAA6B,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,oDAAoD;IACpD,KAAK,CAAC,cAAc,CAClB,WAAmB;QAEnB,IAAI,gBAAoC,CAAC;QACzC,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,4FAA4F;QAC5F,+EAA+E;QAC/E,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5D,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACnC,gBAAgB,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;YAC1D,IACE,IAAI,CAAC,qBAAqB;gBAC1B,WAAW,GAAG,6CAAsB,GAAG,IAAI,CAAC,qBAAqB,EACjE,CAAC;gBACD,mDAAmD;gBACnD,MAAM,IAAI,CAAC,0BAA0B,EAAE,CAAC;gBACxC,gBAAgB,GAAG,IAAI,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;IAChD,CAAC;IAED,sCAAsC;IAEhC,AAAN,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,WAAoB;QACpD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC/D,WAAW,GAAG,gBAAgB,CAAC;QACjC,CAAC;QACD,OAAO,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAChD,CAAC;CACF,CAAA;AArEY,wCAAc;AA8DnB;IADL,IAAA,oBAAQ,GAAE;;;;iDAOV;yBApEU,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAGE,WAAA,IAAA,eAAM,EAAC,YAAY,CAAC,CAAA;qCAAuB,wBAAU;GAFvD,cAAc,CAqE1B","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Inject, Injectable } from '@nestjs/common';\nimport { getLogger, profiler } from '@subql/node-core';\nimport { ApiService } from '../api.service';\nimport { SubstrateDictionaryService } from '../dictionary';\nimport {\n BaseRuntimeService,\n SPEC_VERSION_BLOCK_GAP,\n} from './base-runtime.service';\n\nconst logger = getLogger('RuntimeService');\n\n@Injectable()\nexport class RuntimeService extends BaseRuntimeService {\n protected dictionaryService?: SubstrateDictionaryService;\n constructor(@Inject('APIService') protected apiService: ApiService) {\n super(apiService);\n }\n\n async init(\n startHeight: number,\n latestFinalizedHeight: number,\n dictionaryService: SubstrateDictionaryService,\n ): Promise<void> {\n this.latestFinalizedHeight = latestFinalizedHeight;\n this.dictionaryService = dictionaryService;\n\n await this.syncDictionarySpecVersions();\n\n await this.specChanged(startHeight);\n await this.prefetchMeta(startHeight);\n }\n\n // get latest specVersions from dictionary\n async syncDictionarySpecVersions(): Promise<void> {\n try {\n // must check useDictionary before get SpecVersion, this will give the right dictionary to fetch SpecVersions\n const response = await this.dictionaryService?.getSpecVersions();\n if (response !== undefined) {\n this.specVersionMap = response;\n } else if (this.specVersionMap === undefined) {\n this.specVersionMap = [];\n }\n } catch (e: any) {\n logger.error(e, 'Failed to get spec versions');\n }\n }\n\n // main runtime responsible for sync from dictionary\n async getSpecVersion(\n blockHeight: number,\n ): Promise<{ blockSpecVersion: number; syncedDictionary: boolean }> {\n let blockSpecVersion: number | undefined;\n let syncedDictionary = false;\n // we want to keep the specVersionMap in memory, and use it even useDictionary been disabled\n // therefore instead of check .useDictionary, we check it length before use it.\n if (this.specVersionMap && this.specVersionMap.length !== 0) {\n blockSpecVersion = this.getSpecFromMap(blockHeight, this.specVersionMap);\n }\n if (blockSpecVersion === undefined) {\n blockSpecVersion = await this.getSpecFromApi(blockHeight);\n if (\n this.latestFinalizedHeight &&\n blockHeight + SPEC_VERSION_BLOCK_GAP < this.latestFinalizedHeight\n ) {\n // Ask to sync local specVersionMap with dictionary\n await this.syncDictionarySpecVersions();\n syncedDictionary = true;\n }\n }\n return { blockSpecVersion, syncedDictionary };\n }\n\n // the specVersion is always undefined\n @profiler()\n async specChanged(height: number, specVersion?: number): Promise<boolean> {\n if (specVersion === undefined) {\n const { blockSpecVersion } = await this.getSpecVersion(height);\n specVersion = blockSpecVersion;\n }\n return super.specChanged(height, specVersion);\n }\n}\n"]}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { SpecVersion } from '../dictionary';
|
|
2
|
-
import { BaseRuntimeService } from './base-runtime.service';
|
|
3
|
-
export declare class WorkerRuntimeService extends BaseRuntimeService {
|
|
4
|
-
syncSpecVersionMap(specVersionMap: SpecVersion[], latestFinalizedHeight?: number): void;
|
|
5
|
-
getSpecVersion(blockHeight: number): Promise<{
|
|
6
|
-
blockSpecVersion: number;
|
|
7
|
-
syncedDictionary: boolean;
|
|
8
|
-
}>;
|
|
9
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
|
|
3
|
-
// SPDX-License-Identifier: GPL-3.0
|
|
4
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
5
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
6
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
7
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
8
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
9
|
-
};
|
|
10
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
-
exports.WorkerRuntimeService = void 0;
|
|
12
|
-
const common_1 = require("@nestjs/common");
|
|
13
|
-
const base_runtime_service_1 = require("./base-runtime.service");
|
|
14
|
-
let WorkerRuntimeService = class WorkerRuntimeService extends base_runtime_service_1.BaseRuntimeService {
|
|
15
|
-
// sync specVersion between main and workers
|
|
16
|
-
syncSpecVersionMap(specVersionMap, latestFinalizedHeight) {
|
|
17
|
-
this.specVersionMap = specVersionMap;
|
|
18
|
-
if (latestFinalizedHeight !== undefined &&
|
|
19
|
-
this.latestFinalizedHeight &&
|
|
20
|
-
this.latestFinalizedHeight < latestFinalizedHeight) {
|
|
21
|
-
this.latestFinalizedHeight = latestFinalizedHeight;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
// Worker runtime does not syncDictionary by itself
|
|
25
|
-
// syncDictionary is done by main runtime
|
|
26
|
-
async getSpecVersion(blockHeight) {
|
|
27
|
-
let blockSpecVersion;
|
|
28
|
-
// we want to keep the specVersionMap in memory, and use it even useDictionary been disabled
|
|
29
|
-
// therefore instead of check .useDictionary, we check it length before use it.
|
|
30
|
-
if (this.specVersionMap && this.specVersionMap.length !== 0) {
|
|
31
|
-
blockSpecVersion = this.getSpecFromMap(blockHeight, this.specVersionMap);
|
|
32
|
-
}
|
|
33
|
-
if (blockSpecVersion === undefined) {
|
|
34
|
-
blockSpecVersion = await this.getSpecFromApi(blockHeight);
|
|
35
|
-
}
|
|
36
|
-
return { blockSpecVersion, syncedDictionary: false };
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
exports.WorkerRuntimeService = WorkerRuntimeService;
|
|
40
|
-
exports.WorkerRuntimeService = WorkerRuntimeService = __decorate([
|
|
41
|
-
(0, common_1.Injectable)()
|
|
42
|
-
], WorkerRuntimeService);
|
|
43
|
-
//# sourceMappingURL=workerRuntimeService.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"workerRuntimeService.js","sourceRoot":"","sources":["../../../src/indexer/runtime/workerRuntimeService.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;;;;;;;;AAEnC,2CAA4C;AAE5C,iEAA4D;AAGrD,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,yCAAkB;IAC1D,4CAA4C;IAC5C,kBAAkB,CAChB,cAA6B,EAC7B,qBAA8B;QAE9B,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IACE,qBAAqB,KAAK,SAAS;YACnC,IAAI,CAAC,qBAAqB;YAC1B,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,EAClD,CAAC;YACD,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;QACrD,CAAC;IACH,CAAC;IAED,mDAAmD;IACnD,yCAAyC;IACzC,KAAK,CAAC,cAAc,CAClB,WAAmB;QAEnB,IAAI,gBAAoC,CAAC;QACzC,4FAA4F;QAC5F,+EAA+E;QAC/E,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5D,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACnC,gBAAgB,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC;IACvD,CAAC;CACF,CAAA;AAhCY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;GACA,oBAAoB,CAgChC","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { Injectable } from '@nestjs/common';\nimport { SpecVersion } from '../dictionary';\nimport { BaseRuntimeService } from './base-runtime.service';\n\n@Injectable()\nexport class WorkerRuntimeService extends BaseRuntimeService {\n // sync specVersion between main and workers\n syncSpecVersionMap(\n specVersionMap: SpecVersion[],\n latestFinalizedHeight?: number,\n ): void {\n this.specVersionMap = specVersionMap;\n if (\n latestFinalizedHeight !== undefined &&\n this.latestFinalizedHeight &&\n this.latestFinalizedHeight < latestFinalizedHeight\n ) {\n this.latestFinalizedHeight = latestFinalizedHeight;\n }\n }\n\n // Worker runtime does not syncDictionary by itself\n // syncDictionary is done by main runtime\n async getSpecVersion(\n blockHeight: number,\n ): Promise<{ blockSpecVersion: number; syncedDictionary: boolean }> {\n let blockSpecVersion: number | undefined;\n // we want to keep the specVersionMap in memory, and use it even useDictionary been disabled\n // therefore instead of check .useDictionary, we check it length before use it.\n if (this.specVersionMap && this.specVersionMap.length !== 0) {\n blockSpecVersion = this.getSpecFromMap(blockHeight, this.specVersionMap);\n }\n if (blockSpecVersion === undefined) {\n blockSpecVersion = await this.getSpecFromApi(blockHeight);\n }\n return { blockSpecVersion, syncedDictionary: false };\n }\n}\n"]}
|
package/dist/indexer/types.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { ApiPromise } from '@polkadot/api';
|
|
2
|
-
import { ApiDecoration } from '@polkadot/api/types';
|
|
3
|
-
import type { HexString } from '@polkadot/util/types';
|
|
4
|
-
import { IBlock } from '@subql/node-core';
|
|
5
|
-
import { BlockHeader, LightSubstrateEvent, SubstrateBlock, SubstrateEvent, SubstrateExtrinsic } from '@subql/types';
|
|
6
|
-
export interface BlockContent {
|
|
7
|
-
block: SubstrateBlock;
|
|
8
|
-
extrinsics: SubstrateExtrinsic[];
|
|
9
|
-
events: SubstrateEvent[];
|
|
10
|
-
}
|
|
11
|
-
export interface LightBlockContent {
|
|
12
|
-
block: BlockHeader;
|
|
13
|
-
events: LightSubstrateEvent[];
|
|
14
|
-
}
|
|
15
|
-
export type BestBlocks = Record<number, HexString>;
|
|
16
|
-
export type ApiAt = ApiDecoration<'promise'> & {
|
|
17
|
-
rpc: ApiPromise['rpc'];
|
|
18
|
-
};
|
|
19
|
-
export declare function isFullBlock(block: BlockContent | LightBlockContent): block is BlockContent;
|
|
20
|
-
export declare function getBlockSize(block: IBlock<BlockContent | LightBlockContent>): number;
|
package/dist/indexer/types.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors
|
|
3
|
-
// SPDX-License-Identifier: GPL-3.0
|
|
4
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
-
exports.isFullBlock = isFullBlock;
|
|
6
|
-
exports.getBlockSize = getBlockSize;
|
|
7
|
-
function isFullBlock(block) {
|
|
8
|
-
return block.extrinsics !== undefined;
|
|
9
|
-
}
|
|
10
|
-
function getBlockSize(block) {
|
|
11
|
-
return block.block.events.reduce((acc, evt) => acc + evt.encodedLength, block.block.block?.encodedLength ?? 0);
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=types.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/indexer/types.ts"],"names":[],"mappings":";AAAA,8DAA8D;AAC9D,mCAAmC;;AA6BnC,kCAIC;AAED,oCAOC;AAbD,SAAgB,WAAW,CACzB,KAAuC;IAEvC,OAAQ,KAAsB,CAAC,UAAU,KAAK,SAAS,CAAC;AAC1D,CAAC;AAED,SAAgB,YAAY,CAC1B,KAA+C;IAE/C,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAC9B,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,aAAa,EACpC,KAAK,CAAC,KAAK,CAAC,KAAwB,EAAE,aAAa,IAAI,CAAC,CAC1D,CAAC;AACJ,CAAC","sourcesContent":["// Copyright 2020-2025 SubQuery Pte Ltd authors & contributors\n// SPDX-License-Identifier: GPL-3.0\n\nimport { ApiPromise } from '@polkadot/api';\nimport { ApiDecoration } from '@polkadot/api/types';\nimport type { HexString } from '@polkadot/util/types';\nimport { IBlock } from '@subql/node-core';\nimport {\n BlockHeader,\n LightSubstrateEvent,\n SubstrateBlock,\n SubstrateEvent,\n SubstrateExtrinsic,\n} from '@subql/types';\n\nexport interface BlockContent {\n block: SubstrateBlock;\n extrinsics: SubstrateExtrinsic[];\n events: SubstrateEvent[];\n}\n\nexport interface LightBlockContent {\n block: BlockHeader; // A subset of SubstrateBlock\n events: LightSubstrateEvent[];\n}\n\nexport type BestBlocks = Record<number, HexString>;\n\nexport type ApiAt = ApiDecoration<'promise'> & { rpc: ApiPromise['rpc'] };\n\nexport function isFullBlock(\n block: BlockContent | LightBlockContent,\n): block is BlockContent {\n return (block as BlockContent).extrinsics !== undefined;\n}\n\nexport function getBlockSize(\n block: IBlock<BlockContent | LightBlockContent>,\n): number {\n return block.block.events.reduce(\n (acc, evt) => acc + evt.encodedLength,\n (block.block.block as SubstrateBlock)?.encodedLength ?? 0,\n );\n}\n"]}
|