@subql/node-ethereum 1.10.1-3 → 2.0.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 +65 -0
- package/README.md +3 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/configure/SubqueryProject.d.ts +9 -11
- package/dist/configure/SubqueryProject.js +19 -9
- package/dist/configure/SubqueryProject.js.map +1 -1
- package/dist/configure/configure.module.js +5 -7
- package/dist/configure/configure.module.js.map +1 -1
- package/dist/ethereum/api.connection.d.ts +11 -0
- package/dist/ethereum/api.connection.js +27 -0
- package/dist/ethereum/api.connection.js.map +1 -0
- package/dist/ethereum/api.ethereum.d.ts +18 -5
- package/dist/ethereum/api.ethereum.js +138 -43
- package/dist/ethereum/api.ethereum.js.map +1 -1
- package/dist/ethereum/api.service.ethereum.d.ts +11 -3
- package/dist/ethereum/api.service.ethereum.js +68 -18
- package/dist/ethereum/api.service.ethereum.js.map +1 -1
- package/dist/ethereum/api.service.ethereum.test.d.ts +1 -0
- package/dist/ethereum/api.service.ethereum.test.js +73 -0
- package/dist/ethereum/api.service.ethereum.test.js.map +1 -0
- package/dist/ethereum/block.ethereum.d.ts +1 -1
- package/dist/ethereum/block.ethereum.js +10 -12
- package/dist/ethereum/block.ethereum.js.map +1 -1
- package/dist/ethereum/ethers/json-rpc-batch-provider.d.ts +21 -0
- package/dist/ethereum/ethers/json-rpc-batch-provider.js +114 -0
- package/dist/ethereum/ethers/json-rpc-batch-provider.js.map +1 -0
- package/dist/ethereum/ethers/json-rpc-provider.d.ts +7 -0
- package/dist/ethereum/ethers/json-rpc-provider.js +68 -0
- package/dist/ethereum/ethers/json-rpc-provider.js.map +1 -0
- package/dist/ethereum/ethers/web/_version.d.ts +1 -0
- package/dist/ethereum/ethers/web/_version.js +6 -0
- package/dist/ethereum/ethers/web/_version.js.map +1 -0
- package/dist/ethereum/ethers/web/geturl.d.ts +3 -0
- package/dist/ethereum/ethers/web/geturl.js +116 -0
- package/dist/ethereum/ethers/web/geturl.js.map +1 -0
- package/dist/ethereum/ethers/web/index.d.ts +49 -0
- package/dist/ethereum/ethers/web/index.js +437 -0
- package/dist/ethereum/ethers/web/index.js.map +1 -0
- package/dist/ethereum/ethers/web/types.d.ts +26 -0
- package/dist/ethereum/ethers/web/types.js +4 -0
- package/dist/ethereum/ethers/web/types.js.map +1 -0
- package/dist/ethereum/safe-api.d.ts +34 -0
- package/dist/ethereum/safe-api.js +114 -0
- package/dist/ethereum/safe-api.js.map +1 -0
- package/dist/ethereum/utils.ethereum.d.ts +1 -1
- package/dist/ethereum/utils.ethereum.js +22 -87
- package/dist/ethereum/utils.ethereum.js.map +1 -1
- package/dist/indexer/blockDispatcher/block-dispatcher.service.d.ts +17 -0
- package/dist/indexer/blockDispatcher/block-dispatcher.service.js +55 -0
- package/dist/indexer/blockDispatcher/block-dispatcher.service.js.map +1 -0
- package/dist/indexer/blockDispatcher/ethereum-block-dispatcher.d.ts +4 -0
- package/dist/indexer/blockDispatcher/ethereum-block-dispatcher.js +5 -0
- package/dist/indexer/blockDispatcher/ethereum-block-dispatcher.js.map +1 -0
- package/dist/indexer/blockDispatcher/index.d.ts +4 -0
- package/dist/indexer/blockDispatcher/index.js +10 -0
- package/dist/indexer/blockDispatcher/index.js.map +1 -0
- package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.d.ts +15 -0
- package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js +88 -0
- package/dist/indexer/blockDispatcher/worker-block-dispatcher.service.js.map +1 -0
- package/dist/indexer/dictionary.service.d.ts +1 -0
- package/dist/indexer/dictionary.service.js +22 -2
- package/dist/indexer/dictionary.service.js.map +1 -1
- package/dist/indexer/ds-processor.service.d.ts +1 -1
- package/dist/indexer/ds-processor.service.js +4 -0
- package/dist/indexer/ds-processor.service.js.map +1 -1
- package/dist/indexer/dynamic-ds.service.d.ts +3 -19
- package/dist/indexer/dynamic-ds.service.js +20 -72
- package/dist/indexer/dynamic-ds.service.js.map +1 -1
- package/dist/indexer/fetch.module.js +40 -12
- package/dist/indexer/fetch.module.js.map +1 -1
- package/dist/indexer/fetch.service.d.ts +16 -7
- package/dist/indexer/fetch.service.js +188 -78
- package/dist/indexer/fetch.service.js.map +1 -1
- package/dist/indexer/indexer.manager.d.ts +11 -17
- package/dist/indexer/indexer.manager.js +68 -71
- package/dist/indexer/indexer.manager.js.map +1 -1
- package/dist/indexer/indexer.module.js +32 -8
- package/dist/indexer/indexer.module.js.map +1 -1
- package/dist/indexer/project.service.d.ts +11 -8
- package/dist/indexer/project.service.js +76 -82
- package/dist/indexer/project.service.js.map +1 -1
- package/dist/indexer/sandbox.service.js +11 -2
- package/dist/indexer/sandbox.service.js.map +1 -1
- package/dist/indexer/types.d.ts +2 -1
- package/dist/indexer/types.js.map +1 -1
- package/dist/indexer/unfinalizedBlocks.service.d.ts +36 -0
- package/dist/indexer/unfinalizedBlocks.service.js +197 -0
- package/dist/indexer/unfinalizedBlocks.service.js.map +1 -0
- package/dist/indexer/unfinalizedBlocks.spec.d.ts +1 -0
- package/dist/indexer/unfinalizedBlocks.spec.js +195 -0
- package/dist/indexer/unfinalizedBlocks.spec.js.map +1 -0
- package/dist/indexer/worker/worker.d.ts +22 -6
- package/dist/indexer/worker/worker.js +16 -3
- package/dist/indexer/worker/worker.js.map +1 -1
- package/dist/indexer/worker/worker.service.d.ts +10 -6
- package/dist/indexer/worker/worker.service.js +23 -10
- package/dist/indexer/worker/worker.service.js.map +1 -1
- package/dist/indexer/worker/worker.unfinalizedBlocks.service.d.ts +11 -0
- package/dist/indexer/worker/worker.unfinalizedBlocks.service.js +32 -0
- package/dist/indexer/worker/worker.unfinalizedBlocks.service.js.map +1 -0
- package/dist/init.js +2 -2
- package/dist/init.js.map +1 -1
- package/dist/main.js +6 -1
- package/dist/main.js.map +1 -1
- package/dist/meta/meta.module.js +8 -0
- package/dist/meta/meta.module.js.map +1 -1
- package/dist/meta/meta.service.d.ts +18 -3
- package/dist/meta/meta.service.js +89 -5
- package/dist/meta/meta.service.js.map +1 -1
- package/dist/subcommands/forceClean.service.d.ts +3 -1
- package/dist/subcommands/forceClean.service.js +30 -6
- package/dist/subcommands/forceClean.service.js.map +1 -1
- package/dist/subcommands/reindex.init.js +6 -1
- package/dist/subcommands/reindex.init.js.map +1 -1
- package/dist/subcommands/reindex.module.js +20 -1
- package/dist/subcommands/reindex.module.js.map +1 -1
- package/dist/subcommands/reindex.service.d.ts +7 -3
- package/dist/subcommands/reindex.service.js +44 -50
- package/dist/subcommands/reindex.service.js.map +1 -1
- package/dist/subcommands/testing.init.d.ts +1 -0
- package/dist/subcommands/testing.init.js +34 -0
- package/dist/subcommands/testing.init.js.map +1 -0
- package/dist/subcommands/testing.module.d.ts +4 -0
- package/dist/subcommands/testing.module.js +77 -0
- package/dist/subcommands/testing.module.js.map +1 -0
- package/dist/subcommands/testing.service.d.ts +9 -0
- package/dist/subcommands/testing.service.js +43 -0
- package/dist/subcommands/testing.service.js.map +1 -0
- package/dist/utils/project.d.ts +3 -0
- package/dist/utils/project.js +45 -1
- package/dist/utils/project.js.map +1 -1
- package/dist/utils/reindex.d.ts +6 -0
- package/dist/utils/reindex.js +48 -0
- package/dist/utils/reindex.js.map +1 -0
- package/dist/utils/string.js +10 -2
- package/dist/utils/string.js.map +1 -1
- package/dist/yargs.d.ts +97 -49
- package/dist/yargs.js +130 -69
- package/dist/yargs.js.map +1 -1
- package/package.json +13 -11
- package/dist/indexer/worker/block-dispatcher.service.d.ts +0 -69
- package/dist/indexer/worker/block-dispatcher.service.js +0 -356
- package/dist/indexer/worker/block-dispatcher.service.js.map +0 -1
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2020-2022 OnFinality Limited authors & contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
const abstract_provider_1 = require("@ethersproject/abstract-provider");
|
|
6
|
+
const node_core_1 = require("@subql/node-core");
|
|
7
|
+
const logger = (0, node_core_1.getLogger)('safe.api.ethereum');
|
|
8
|
+
class SafeEthProvider extends abstract_provider_1.Provider {
|
|
9
|
+
constructor(baseApi, blockHeight) {
|
|
10
|
+
super();
|
|
11
|
+
this.baseApi = baseApi;
|
|
12
|
+
this.blockHeight = blockHeight;
|
|
13
|
+
}
|
|
14
|
+
async getBalance(addressOrName, blockTag) {
|
|
15
|
+
if (blockTag)
|
|
16
|
+
logger.warn(`Provided parameter 'blockTag' will not be used`);
|
|
17
|
+
return this.baseApi.getBalance(addressOrName, this.blockHeight);
|
|
18
|
+
}
|
|
19
|
+
async getTransactionCount(addressOrName, blockTag) {
|
|
20
|
+
if (blockTag)
|
|
21
|
+
logger.warn(`Provided parameter 'blockTag' will not be used`);
|
|
22
|
+
return this.baseApi.getTransactionCount(addressOrName, this.blockHeight);
|
|
23
|
+
}
|
|
24
|
+
async getCode(addressOrName, blockTag) {
|
|
25
|
+
if (blockTag)
|
|
26
|
+
logger.warn(`Provided parameter 'blockTag' will not be used`);
|
|
27
|
+
return this.baseApi.getCode(addressOrName, this.blockHeight);
|
|
28
|
+
}
|
|
29
|
+
async getStorageAt(addressOrName, position, blockTag) {
|
|
30
|
+
if (blockTag)
|
|
31
|
+
logger.warn(`Provided parameter 'blockTag' will not be used`);
|
|
32
|
+
return this.baseApi.getStorageAt(addressOrName, position, this.blockHeight);
|
|
33
|
+
}
|
|
34
|
+
async call(transaction, blockTag) {
|
|
35
|
+
if (blockTag)
|
|
36
|
+
logger.warn(`Provided parameter 'blockTag' will not be used`);
|
|
37
|
+
return this.baseApi.call(transaction, this.blockHeight);
|
|
38
|
+
}
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/promise-function-async
|
|
40
|
+
getBlockWithTransactions(blockHashOrBlockTag) {
|
|
41
|
+
throw new Error('Method `getBlockWithTransactions` not supported.');
|
|
42
|
+
}
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/promise-function-async
|
|
44
|
+
getBlock(blockHashOrBlockTag) {
|
|
45
|
+
throw new Error('Method `getBlock` not supported.');
|
|
46
|
+
}
|
|
47
|
+
// eslint-disable-next-line @typescript-eslint/promise-function-async
|
|
48
|
+
getTransaction(transactionHash) {
|
|
49
|
+
throw new Error('Method `getTransaction` not supported.');
|
|
50
|
+
}
|
|
51
|
+
// eslint-disable-next-line @typescript-eslint/promise-function-async
|
|
52
|
+
getTransactionReceipt(transactionHash) {
|
|
53
|
+
throw new Error('Method `getTransactionReceipt` not supported.');
|
|
54
|
+
}
|
|
55
|
+
// eslint-disable-next-line @typescript-eslint/promise-function-async
|
|
56
|
+
getLogs(filter) {
|
|
57
|
+
throw new Error('Method `getLogs` not supported.');
|
|
58
|
+
}
|
|
59
|
+
// eslint-disable-next-line @typescript-eslint/promise-function-async
|
|
60
|
+
getBlockNumber() {
|
|
61
|
+
throw new Error('Method `getBlockNumber` not supported.');
|
|
62
|
+
}
|
|
63
|
+
// eslint-disable-next-line @typescript-eslint/promise-function-async
|
|
64
|
+
getNetwork() {
|
|
65
|
+
throw new Error('Method `getNetwork` not supported.');
|
|
66
|
+
}
|
|
67
|
+
// eslint-disable-next-line @typescript-eslint/promise-function-async
|
|
68
|
+
getGasPrice() {
|
|
69
|
+
throw new Error('Method `getGasPrice` not supported.');
|
|
70
|
+
}
|
|
71
|
+
// eslint-disable-next-line @typescript-eslint/promise-function-async
|
|
72
|
+
estimateGas(transaction) {
|
|
73
|
+
throw new Error('Method `estimateGas` not supported.');
|
|
74
|
+
}
|
|
75
|
+
// eslint-disable-next-line @typescript-eslint/promise-function-async
|
|
76
|
+
sendTransaction(signedTransaction) {
|
|
77
|
+
throw new Error('Method `sendTransaction` not supported.');
|
|
78
|
+
}
|
|
79
|
+
// eslint-disable-next-line @typescript-eslint/promise-function-async
|
|
80
|
+
resolveName(name) {
|
|
81
|
+
throw new Error('Method `resolveName` not supported.');
|
|
82
|
+
}
|
|
83
|
+
// eslint-disable-next-line @typescript-eslint/promise-function-async
|
|
84
|
+
lookupAddress(address) {
|
|
85
|
+
throw new Error('Method `lookupAddress` not supported.');
|
|
86
|
+
}
|
|
87
|
+
on(eventName, listener) {
|
|
88
|
+
throw new Error('Method `on` not supported.');
|
|
89
|
+
}
|
|
90
|
+
once(eventName, listener) {
|
|
91
|
+
throw new Error('Method `once` not supported.');
|
|
92
|
+
}
|
|
93
|
+
emit(eventName, ...args) {
|
|
94
|
+
throw new Error('Method `emit` not supported.');
|
|
95
|
+
}
|
|
96
|
+
listenerCount(eventName) {
|
|
97
|
+
throw new Error('Method `listenerCount` not supported.');
|
|
98
|
+
}
|
|
99
|
+
listeners(eventName) {
|
|
100
|
+
throw new Error('Method `listeners` not supported.');
|
|
101
|
+
}
|
|
102
|
+
off(eventName, listener) {
|
|
103
|
+
throw new Error('Method `off` not supported.');
|
|
104
|
+
}
|
|
105
|
+
removeAllListeners(eventName) {
|
|
106
|
+
throw new Error('Method `removeAllListeners` not supported.');
|
|
107
|
+
}
|
|
108
|
+
// eslint-disable-next-line @typescript-eslint/promise-function-async
|
|
109
|
+
waitForTransaction(transactionHash, confirmations, timeout) {
|
|
110
|
+
throw new Error('Method `waitForTransaction` not supported.');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
exports.default = SafeEthProvider;
|
|
114
|
+
//# sourceMappingURL=safe-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-api.js","sourceRoot":"","sources":["../../src/ethereum/safe-api.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2022 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n Block,\n BlockTag,\n BlockWithTransactions,\n EventType,\n Filter,\n Listener,\n Log,\n TransactionReceipt,\n TransactionRequest,\n TransactionResponse,\n Provider,\n} from '@ethersproject/abstract-provider';\nimport { BigNumber, BigNumberish } from '@ethersproject/bignumber';\nimport type { Network } from '@ethersproject/networks';\nimport type { Deferrable } from '@ethersproject/properties';\nimport { getLogger } from '@subql/node-core';\n\nconst logger = getLogger('safe.api.ethereum');\n\nexport default class SafeEthProvider extends Provider {\n constructor(\n private baseApi: Provider,\n private blockHeight: BlockTag | Promise<BlockTag>,\n ) {\n super();\n }\n\n async getBalance(\n addressOrName: string | Promise<string>,\n blockTag?: BlockTag | Promise<BlockTag>,\n ): Promise<BigNumber> {\n if (blockTag) logger.warn(`Provided parameter 'blockTag' will not be used`);\n return this.baseApi.getBalance(addressOrName, this.blockHeight);\n }\n\n async getTransactionCount(\n addressOrName: string | Promise<string>,\n blockTag?: BlockTag | Promise<BlockTag>,\n ): Promise<number> {\n if (blockTag) logger.warn(`Provided parameter 'blockTag' will not be used`);\n return this.baseApi.getTransactionCount(addressOrName, this.blockHeight);\n }\n\n async getCode(\n addressOrName: string | Promise<string>,\n blockTag?: BlockTag | Promise<BlockTag>,\n ): Promise<string> {\n if (blockTag) logger.warn(`Provided parameter 'blockTag' will not be used`);\n return this.baseApi.getCode(addressOrName, this.blockHeight);\n }\n\n async getStorageAt(\n addressOrName: string | Promise<string>,\n position: BigNumberish | Promise<BigNumberish>,\n blockTag?: BlockTag | Promise<BlockTag>,\n ): Promise<string> {\n if (blockTag) logger.warn(`Provided parameter 'blockTag' will not be used`);\n return this.baseApi.getStorageAt(addressOrName, position, this.blockHeight);\n }\n\n async call(\n transaction: Deferrable<TransactionRequest>,\n blockTag?: BlockTag | Promise<BlockTag>,\n ): Promise<string> {\n if (blockTag) logger.warn(`Provided parameter 'blockTag' will not be used`);\n\n return this.baseApi.call(transaction, this.blockHeight);\n }\n\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n getBlockWithTransactions(\n blockHashOrBlockTag: BlockTag | Promise<BlockTag>,\n ): Promise<BlockWithTransactions> {\n throw new Error('Method `getBlockWithTransactions` not supported.');\n }\n\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n getBlock(blockHashOrBlockTag: BlockTag | Promise<BlockTag>): Promise<Block> {\n throw new Error('Method `getBlock` not supported.');\n }\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n getTransaction(transactionHash: string): Promise<TransactionResponse> {\n throw new Error('Method `getTransaction` not supported.');\n }\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n getTransactionReceipt(transactionHash: string): Promise<TransactionReceipt> {\n throw new Error('Method `getTransactionReceipt` not supported.');\n }\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n getLogs(filter: Filter): Promise<Log[]> {\n throw new Error('Method `getLogs` not supported.');\n }\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n getBlockNumber(): Promise<number> {\n throw new Error('Method `getBlockNumber` not supported.');\n }\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n getNetwork(): Promise<Network> {\n throw new Error('Method `getNetwork` not supported.');\n }\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n getGasPrice(): Promise<BigNumber> {\n throw new Error('Method `getGasPrice` not supported.');\n }\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n estimateGas(transaction: Deferrable<TransactionRequest>): Promise<BigNumber> {\n throw new Error('Method `estimateGas` not supported.');\n }\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n sendTransaction(\n signedTransaction: string | Promise<string>,\n ): Promise<TransactionResponse> {\n throw new Error('Method `sendTransaction` not supported.');\n }\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n resolveName(name: string | Promise<string>): Promise<string | null> {\n throw new Error('Method `resolveName` not supported.');\n }\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n lookupAddress(address: string | Promise<string>): Promise<string | null> {\n throw new Error('Method `lookupAddress` not supported.');\n }\n on(eventName: EventType, listener: Listener): Provider {\n throw new Error('Method `on` not supported.');\n }\n once(eventName: EventType, listener: Listener): Provider {\n throw new Error('Method `once` not supported.');\n }\n emit(eventName: EventType, ...args: any[]): boolean {\n throw new Error('Method `emit` not supported.');\n }\n listenerCount(eventName?: EventType): number {\n throw new Error('Method `listenerCount` not supported.');\n }\n listeners(eventName?: EventType): Listener[] {\n throw new Error('Method `listeners` not supported.');\n }\n off(eventName: EventType, listener?: Listener): Provider {\n throw new Error('Method `off` not supported.');\n }\n removeAllListeners(eventName?: EventType): Provider {\n throw new Error('Method `removeAllListeners` not supported.');\n }\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n waitForTransaction(\n transactionHash: string,\n confirmations?: number,\n timeout?: number,\n ): Promise<TransactionReceipt> {\n throw new Error('Method `waitForTransaction` not supported.');\n }\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ApiWrapper, EthereumBlock, EthereumLog, EthereumReceipt, EthereumResult, EthereumTransaction } from '@subql/types-ethereum';
|
|
2
2
|
export declare function calcInterval(api: ApiWrapper): number;
|
|
3
3
|
export declare function formatBlock(block: Record<string, any>): EthereumBlock;
|
|
4
|
-
export declare function formatLog(log: EthereumLog<EthereumResult> | EthereumLog, block: EthereumBlock): EthereumLog<EthereumResult> | EthereumLog;
|
|
4
|
+
export declare function formatLog(log: Omit<EthereumLog<EthereumResult> | EthereumLog, 'blockTimestamp' | 'block' | 'transaction'>, block: EthereumBlock): EthereumLog<EthereumResult> | EthereumLog;
|
|
5
5
|
export declare function formatTransaction(tx: Record<string, any>): EthereumTransaction;
|
|
6
6
|
export declare function formatReceipt(receipt: Record<string, any>, block: EthereumBlock): EthereumReceipt;
|
|
@@ -6,13 +6,14 @@ exports.formatReceipt = exports.formatTransaction = exports.formatLog = exports.
|
|
|
6
6
|
const address_1 = require("@ethersproject/address");
|
|
7
7
|
const bignumber_1 = require("@ethersproject/bignumber");
|
|
8
8
|
const constants_1 = require("@ethersproject/constants");
|
|
9
|
+
const lodash_1 = require("lodash");
|
|
9
10
|
function calcInterval(api) {
|
|
10
11
|
// TODO find a way to get this from the blockchain
|
|
11
12
|
return 6000;
|
|
12
13
|
}
|
|
13
14
|
exports.calcInterval = calcInterval;
|
|
14
15
|
function handleAddress(value) {
|
|
15
|
-
if (value === '0x') {
|
|
16
|
+
if (!value || value === '0x') {
|
|
16
17
|
return null;
|
|
17
18
|
}
|
|
18
19
|
return (0, address_1.getAddress)(value);
|
|
@@ -27,105 +28,39 @@ function handleNumber(value) {
|
|
|
27
28
|
return bignumber_1.BigNumber.from(value);
|
|
28
29
|
}
|
|
29
30
|
function formatBlock(block) {
|
|
30
|
-
|
|
31
|
-
difficulty: handleNumber(block.difficulty).toBigInt(),
|
|
32
|
-
extDataGasUsed: block.extDataGasUsed,
|
|
33
|
-
extDataHash: block.extDataHash,
|
|
34
|
-
gasLimit: handleNumber(block.gasLimit).toBigInt(),
|
|
35
|
-
gasUsed: handleNumber(block.gasUsed).toBigInt(),
|
|
36
|
-
hash: block.hash,
|
|
37
|
-
logsBloom: block.logsBloom,
|
|
38
|
-
miner: block.miner,
|
|
39
|
-
mixHash: block.mixHash,
|
|
40
|
-
nonce: block.nonce,
|
|
41
|
-
number: handleNumber(block.number).toNumber(),
|
|
42
|
-
parentHash: block.parentHash,
|
|
43
|
-
receiptsRoot: block.receiptsRoot,
|
|
44
|
-
sha3Uncles: block.sha3Uncles,
|
|
45
|
-
size: handleNumber(block.size).toBigInt(),
|
|
46
|
-
stateRoot: block.stateRoot,
|
|
47
|
-
timestamp: handleNumber(block.timestamp).toBigInt(),
|
|
48
|
-
totalDifficulty: handleNumber(block.totalDifficulty).toBigInt(),
|
|
49
|
-
transactions: block.transactions,
|
|
50
|
-
transactionsRoot: block.transactionsRoot,
|
|
51
|
-
uncles: block.uncles,
|
|
52
|
-
baseFeePerGas: block.baseFeePerGas
|
|
31
|
+
return Object.assign(Object.assign({}, block), { difficulty: handleNumber(block.difficulty).toBigInt(), gasLimit: handleNumber(block.gasLimit).toBigInt(), gasUsed: handleNumber(block.gasUsed).toBigInt(), number: handleNumber(block.number).toNumber(), size: handleNumber(block.size).toBigInt(), timestamp: handleNumber(block.timestamp).toBigInt(), totalDifficulty: handleNumber(block.totalDifficulty).toBigInt(), baseFeePerGas: block.baseFeePerGas
|
|
53
32
|
? handleNumber(block.baseFeePerGas).toBigInt()
|
|
54
|
-
: undefined,
|
|
55
|
-
blockGasCost: block.blockGasCost
|
|
33
|
+
: undefined, blockGasCost: block.blockGasCost
|
|
56
34
|
? handleNumber(block.blockGasCost).toBigInt()
|
|
57
|
-
: undefined,
|
|
58
|
-
blockExtraData: block.blockExtraData,
|
|
59
|
-
logs: [], // Filled in at AvalancheBlockWrapped constructor
|
|
60
|
-
};
|
|
61
|
-
return newBlock;
|
|
35
|
+
: undefined, logs: [] });
|
|
62
36
|
}
|
|
63
37
|
exports.formatBlock = formatBlock;
|
|
64
38
|
function formatLog(log, block) {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
logIndex: handleNumber(log.logIndex).toNumber(),
|
|
74
|
-
removed: log.removed,
|
|
75
|
-
args: log.args,
|
|
76
|
-
block,
|
|
77
|
-
};
|
|
78
|
-
return newLog;
|
|
39
|
+
return Object.assign(Object.assign({}, log), { address: handleAddress(log.address), blockNumber: handleNumber(log.blockNumber).toNumber(), transactionIndex: handleNumber(log.transactionIndex).toNumber(), logIndex: handleNumber(log.logIndex).toNumber(), block,
|
|
40
|
+
get transaction() {
|
|
41
|
+
var _a;
|
|
42
|
+
return (_a = block.transactions) === null || _a === void 0 ? void 0 : _a.find((tx) => tx.hash === log.transactionHash);
|
|
43
|
+
},
|
|
44
|
+
toJSON() {
|
|
45
|
+
return JSON.stringify((0, lodash_1.omit)(this, ['transaction', 'block', 'toJSON']));
|
|
46
|
+
} });
|
|
79
47
|
}
|
|
80
48
|
exports.formatLog = formatLog;
|
|
81
49
|
function formatTransaction(tx) {
|
|
82
|
-
|
|
83
|
-
blockHash: tx.blockHash,
|
|
84
|
-
blockNumber: handleNumber(tx.blockNumber).toNumber(),
|
|
85
|
-
from: tx.from,
|
|
86
|
-
gas: handleNumber(tx.gas).toBigInt(),
|
|
87
|
-
gasPrice: handleNumber(tx.gasPrice).toBigInt(),
|
|
88
|
-
hash: tx.hash,
|
|
89
|
-
input: tx.input,
|
|
90
|
-
nonce: handleNumber(tx.nonce).toBigInt(),
|
|
91
|
-
to: tx.to,
|
|
92
|
-
transactionIndex: handleNumber(tx.transactionIndex).toBigInt(),
|
|
93
|
-
value: handleNumber(tx.value).toBigInt(),
|
|
94
|
-
type: tx.type,
|
|
95
|
-
v: handleNumber(tx.v).toBigInt(),
|
|
96
|
-
r: tx.r,
|
|
97
|
-
s: tx.s,
|
|
98
|
-
accessList: tx.accessList,
|
|
99
|
-
chainId: tx.chainId,
|
|
100
|
-
maxFeePerGas: tx.maxFeePerGas
|
|
50
|
+
return Object.assign(Object.assign({}, tx), { from: handleAddress(tx.from), to: handleAddress(tx.to), blockNumber: handleNumber(tx.blockNumber).toNumber(), gas: handleNumber(tx.gas).toBigInt(), gasPrice: handleNumber(tx.gasPrice).toBigInt(), nonce: handleNumber(tx.nonce).toBigInt(), transactionIndex: handleNumber(tx.transactionIndex).toBigInt(), value: handleNumber(tx.value).toBigInt(), v: handleNumber(tx.v).toBigInt(), maxFeePerGas: tx.maxFeePerGas
|
|
101
51
|
? handleNumber(tx.maxFeePerGas).toBigInt()
|
|
102
|
-
: undefined,
|
|
103
|
-
maxPriorityFeePerGas: tx.maxPriorityFeePerGas
|
|
52
|
+
: undefined, maxPriorityFeePerGas: tx.maxPriorityFeePerGas
|
|
104
53
|
? handleNumber(tx.maxPriorityFeePerGas).toBigInt()
|
|
105
|
-
: undefined,
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
54
|
+
: undefined, receipt: undefined, // Filled in at AvalancheApi.fetchBlocks
|
|
55
|
+
toJSON() {
|
|
56
|
+
return JSON.stringify((0, lodash_1.omit)(this, ['block', 'receipt', 'toJSON']));
|
|
57
|
+
} });
|
|
109
58
|
}
|
|
110
59
|
exports.formatTransaction = formatTransaction;
|
|
111
60
|
function formatReceipt(receipt, block) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
contractAddress: receipt.contractAddress,
|
|
116
|
-
cumulativeGasUsed: handleNumber(receipt.cumulativeGasUsed).toBigInt(),
|
|
117
|
-
effectiveGasPrice: handleNumber(receipt.effectiveGasPrice).toBigInt(),
|
|
118
|
-
from: receipt.from,
|
|
119
|
-
gasUsed: handleNumber(receipt.gasUsed).toBigInt(),
|
|
120
|
-
logs: receipt.logs.map((log) => formatLog(log, block)),
|
|
121
|
-
logsBloom: receipt.logsBloom,
|
|
122
|
-
status: Boolean(handleNumber(receipt.status).toNumber()),
|
|
123
|
-
to: receipt.to,
|
|
124
|
-
transactionHash: receipt.transactionHash,
|
|
125
|
-
transactionIndex: handleNumber(receipt.transactionIndex).toNumber(),
|
|
126
|
-
type: receipt.type,
|
|
127
|
-
};
|
|
128
|
-
return newReceipt;
|
|
61
|
+
return Object.assign(Object.assign({}, receipt), { from: handleAddress(receipt.from), to: handleAddress(receipt.to), blockNumber: handleNumber(receipt.blockNumber).toNumber(), cumulativeGasUsed: handleNumber(receipt.cumulativeGasUsed).toBigInt(), effectiveGasPrice: handleNumber(receipt.effectiveGasPrice).toBigInt(), gasUsed: handleNumber(receipt.gasUsed).toBigInt(), logs: receipt.logs.map(formatLog), status: Boolean(handleNumber(receipt.status).toNumber()), transactionIndex: handleNumber(receipt.transactionIndex).toNumber(), toJSON() {
|
|
62
|
+
return JSON.stringify((0, lodash_1.omit)(this, ['toJSON']));
|
|
63
|
+
} });
|
|
129
64
|
}
|
|
130
65
|
exports.formatReceipt = formatReceipt;
|
|
131
66
|
//# sourceMappingURL=utils.ethereum.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.ethereum.js","sourceRoot":"","sources":["../../src/ethereum/utils.ethereum.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,sCAAsC;;;AAEtC,oDAAoD;AACpD,wDAAqD;AACrD,wDAAgD;
|
|
1
|
+
{"version":3,"file":"utils.ethereum.js","sourceRoot":"","sources":["../../src/ethereum/utils.ethereum.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2022 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport { getAddress } from '@ethersproject/address';\nimport { BigNumber } from '@ethersproject/bignumber';\nimport { Zero } from '@ethersproject/constants';\nimport {\n ApiWrapper,\n EthereumBlock,\n EthereumLog,\n EthereumReceipt,\n EthereumResult,\n EthereumTransaction,\n} from '@subql/types-ethereum';\nimport { omit } from 'lodash';\n\nexport function calcInterval(api: ApiWrapper): number {\n // TODO find a way to get this from the blockchain\n return 6000;\n}\n\nfunction handleAddress(value: string): string | null {\n if (!value || value === '0x') {\n return null;\n }\n return getAddress(value);\n}\n\nfunction handleNumber(value: string | number): BigNumber {\n if (value === undefined) {\n return Zero;\n }\n if (value === '0x') {\n return Zero;\n }\n return BigNumber.from(value);\n}\n\nexport function formatBlock(block: Record<string, any>): EthereumBlock {\n return {\n ...block,\n difficulty: handleNumber(block.difficulty).toBigInt(),\n gasLimit: handleNumber(block.gasLimit).toBigInt(),\n gasUsed: handleNumber(block.gasUsed).toBigInt(),\n number: handleNumber(block.number).toNumber(),\n size: handleNumber(block.size).toBigInt(),\n timestamp: handleNumber(block.timestamp).toBigInt(),\n totalDifficulty: handleNumber(block.totalDifficulty).toBigInt(),\n baseFeePerGas: block.baseFeePerGas\n ? handleNumber(block.baseFeePerGas).toBigInt()\n : undefined,\n blockGasCost: block.blockGasCost\n ? handleNumber(block.blockGasCost).toBigInt()\n : undefined,\n logs: [], // Filled in at AvalancheBlockWrapped constructor\n } as EthereumBlock;\n}\nexport function formatLog(\n log: Omit<\n EthereumLog<EthereumResult> | EthereumLog,\n 'blockTimestamp' | 'block' | 'transaction'\n >,\n block: EthereumBlock,\n): EthereumLog<EthereumResult> | EthereumLog {\n return {\n ...log,\n address: handleAddress(log.address),\n blockNumber: handleNumber(log.blockNumber).toNumber(),\n transactionIndex: handleNumber(log.transactionIndex).toNumber(),\n logIndex: handleNumber(log.logIndex).toNumber(),\n block,\n get transaction() {\n return block.transactions?.find((tx) => tx.hash === log.transactionHash);\n },\n\n toJSON(): string {\n return JSON.stringify(omit(this, ['transaction', 'block', 'toJSON']));\n },\n } as EthereumLog<EthereumResult>;\n}\n\nexport function formatTransaction(\n tx: Record<string, any>,\n): EthereumTransaction {\n return {\n ...(tx as Partial<EthereumTransaction>),\n from: handleAddress(tx.from),\n to: handleAddress(tx.to),\n blockNumber: handleNumber(tx.blockNumber).toNumber(),\n gas: handleNumber(tx.gas).toBigInt(),\n gasPrice: handleNumber(tx.gasPrice).toBigInt(),\n nonce: handleNumber(tx.nonce).toBigInt(),\n transactionIndex: handleNumber(tx.transactionIndex).toBigInt(),\n value: handleNumber(tx.value).toBigInt(),\n v: handleNumber(tx.v).toBigInt(),\n maxFeePerGas: tx.maxFeePerGas\n ? handleNumber(tx.maxFeePerGas).toBigInt()\n : undefined,\n maxPriorityFeePerGas: tx.maxPriorityFeePerGas\n ? handleNumber(tx.maxPriorityFeePerGas).toBigInt()\n : undefined,\n receipt: undefined, // Filled in at AvalancheApi.fetchBlocks\n toJSON(): string {\n return JSON.stringify(omit(this, ['block', 'receipt', 'toJSON']));\n },\n } as EthereumTransaction;\n}\n\nexport function formatReceipt(\n receipt: Record<string, any>,\n block: EthereumBlock,\n): EthereumReceipt {\n return {\n ...receipt,\n from: handleAddress(receipt.from),\n to: handleAddress(receipt.to),\n blockNumber: handleNumber(receipt.blockNumber).toNumber(),\n cumulativeGasUsed: handleNumber(receipt.cumulativeGasUsed).toBigInt(),\n effectiveGasPrice: handleNumber(receipt.effectiveGasPrice).toBigInt(),\n gasUsed: handleNumber(receipt.gasUsed).toBigInt(),\n logs: receipt.logs.map(formatLog),\n status: Boolean(handleNumber(receipt.status).toNumber()),\n transactionIndex: handleNumber(receipt.transactionIndex).toNumber(),\n toJSON(): string {\n return JSON.stringify(omit(this, ['toJSON']));\n },\n } as unknown as EthereumReceipt;\n}\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { OnApplicationShutdown } from '@nestjs/common';
|
|
2
|
+
import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
3
|
+
import { NodeConfig, SmartBatchService, StoreCacheService, StoreService, IProjectService, PoiService, BlockDispatcher, ProcessBlockResponse } from '@subql/node-core';
|
|
4
|
+
import { EthereumBlockWrapper } from '@subql/types-ethereum';
|
|
5
|
+
import { SubqlProjectDs, SubqueryProject } from '../../configure/SubqueryProject';
|
|
6
|
+
import { EthereumApiService } from '../../ethereum';
|
|
7
|
+
import { DynamicDsService } from '../dynamic-ds.service';
|
|
8
|
+
import { IndexerManager } from '../indexer.manager';
|
|
9
|
+
/**
|
|
10
|
+
* @description Intended to behave the same as WorkerBlockDispatcherService but doesn't use worker threads or any parallel processing
|
|
11
|
+
*/
|
|
12
|
+
export declare class BlockDispatcherService extends BlockDispatcher<EthereumBlockWrapper, SubqlProjectDs> implements OnApplicationShutdown {
|
|
13
|
+
private indexerManager;
|
|
14
|
+
constructor(apiService: EthereumApiService, nodeConfig: NodeConfig, indexerManager: IndexerManager, eventEmitter: EventEmitter2, projectService: IProjectService<SubqlProjectDs>, smartBatchService: SmartBatchService, storeService: StoreService, storeCacheService: StoreCacheService, poiService: PoiService, project: SubqueryProject, dynamicDsService: DynamicDsService);
|
|
15
|
+
protected getBlockHeight(block: EthereumBlockWrapper): number;
|
|
16
|
+
protected indexBlock(block: EthereumBlockWrapper): Promise<ProcessBlockResponse>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2020-2021 OnFinality Limited authors & contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.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.BlockDispatcherService = void 0;
|
|
18
|
+
const common_1 = require("@nestjs/common");
|
|
19
|
+
const event_emitter_1 = require("@nestjs/event-emitter");
|
|
20
|
+
const node_core_1 = require("@subql/node-core");
|
|
21
|
+
const SubqueryProject_1 = require("../../configure/SubqueryProject");
|
|
22
|
+
const ethereum_1 = require("../../ethereum");
|
|
23
|
+
const dynamic_ds_service_1 = require("../dynamic-ds.service");
|
|
24
|
+
const indexer_manager_1 = require("../indexer.manager");
|
|
25
|
+
/**
|
|
26
|
+
* @description Intended to behave the same as WorkerBlockDispatcherService but doesn't use worker threads or any parallel processing
|
|
27
|
+
*/
|
|
28
|
+
let BlockDispatcherService = class BlockDispatcherService extends node_core_1.BlockDispatcher {
|
|
29
|
+
constructor(apiService, nodeConfig, indexerManager, eventEmitter, projectService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService) {
|
|
30
|
+
super(nodeConfig, eventEmitter, projectService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService, apiService.fetchBlocks.bind(apiService));
|
|
31
|
+
this.indexerManager = indexerManager;
|
|
32
|
+
}
|
|
33
|
+
getBlockHeight(block) {
|
|
34
|
+
return block.blockHeight;
|
|
35
|
+
}
|
|
36
|
+
async indexBlock(block) {
|
|
37
|
+
return this.indexerManager.indexBlock(block, await this.projectService.getAllDataSources(this.getBlockHeight(block)));
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
BlockDispatcherService = __decorate([
|
|
41
|
+
(0, common_1.Injectable)(),
|
|
42
|
+
__param(4, (0, common_1.Inject)('IProjectService')),
|
|
43
|
+
__param(9, (0, common_1.Inject)('ISubqueryProject')),
|
|
44
|
+
__metadata("design:paramtypes", [ethereum_1.EthereumApiService,
|
|
45
|
+
node_core_1.NodeConfig,
|
|
46
|
+
indexer_manager_1.IndexerManager,
|
|
47
|
+
event_emitter_1.EventEmitter2, Object, node_core_1.SmartBatchService,
|
|
48
|
+
node_core_1.StoreService,
|
|
49
|
+
node_core_1.StoreCacheService,
|
|
50
|
+
node_core_1.PoiService,
|
|
51
|
+
SubqueryProject_1.SubqueryProject,
|
|
52
|
+
dynamic_ds_service_1.DynamicDsService])
|
|
53
|
+
], BlockDispatcherService);
|
|
54
|
+
exports.BlockDispatcherService = BlockDispatcherService;
|
|
55
|
+
//# sourceMappingURL=block-dispatcher.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-dispatcher.service.js","sourceRoot":"","sources":["../../../src/indexer/blockDispatcher/block-dispatcher.service.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,sCAAsC;;;;;;;;;;;;;;;AAEtC,2CAA2E;AAC3E,yDAAsD;AACtD,gDAS0B;AAE1B,qEAGyC;AACzC,6CAAoD;AACpD,8DAAyD;AACzD,wDAAoD;AAEpD;;GAEG;AAEI,IAAM,sBAAsB,GAA5B,MAAM,sBACX,SAAQ,2BAAqD;IAG7D,YACE,UAA8B,EAC9B,UAAsB,EACd,cAA8B,EACtC,YAA2B,EACA,cAA+C,EAC1E,iBAAoC,EACpC,YAA0B,EAC1B,iBAAoC,EACpC,UAAsB,EACM,OAAwB,EACpD,gBAAkC;QAElC,KAAK,CACH,UAAU,EACV,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,OAAO,EACP,gBAAgB,EAChB,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CACxC,CAAC;QArBM,mBAAc,GAAd,cAAc,CAAgB;IAsBxC,CAAC;IAES,cAAc,CAAC,KAA2B;QAClD,OAAO,KAAK,CAAC,WAAW,CAAC;IAC3B,CAAC;IAES,KAAK,CAAC,UAAU,CACxB,KAA2B;QAE3B,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,CACnC,KAAK,EACL,MAAM,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CACxE,CAAC;IACJ,CAAC;CACF,CAAA;AA3CY,sBAAsB;IADlC,IAAA,mBAAU,GAAE;IAUR,WAAA,IAAA,eAAM,EAAC,iBAAiB,CAAC,CAAA;IAKzB,WAAA,IAAA,eAAM,EAAC,kBAAkB,CAAC,CAAA;qCATf,6BAAkB;QAClB,sBAAU;QACE,gCAAc;QACxB,6BAAa,UAER,6BAAiB;QACtB,wBAAY;QACP,6BAAiB;QACxB,sBAAU;QACe,iCAAe;QAClC,qCAAgB;GAfzB,sBAAsB,CA2ClC;AA3CY,wDAAsB","sourcesContent":["// Copyright 2020-2021 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.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} from '@subql/node-core';\nimport { EthereumBlockWrapper } from '@subql/types-ethereum';\nimport {\n SubqlProjectDs,\n SubqueryProject,\n} from '../../configure/SubqueryProject';\nimport { EthereumApiService } from '../../ethereum';\nimport { DynamicDsService } from '../dynamic-ds.service';\nimport { IndexerManager } from '../indexer.manager';\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<EthereumBlockWrapper, SubqlProjectDs>\n implements OnApplicationShutdown\n{\n constructor(\n apiService: EthereumApiService,\n nodeConfig: NodeConfig,\n private indexerManager: IndexerManager,\n eventEmitter: EventEmitter2,\n @Inject('IProjectService') projectService: IProjectService<SubqlProjectDs>,\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 smartBatchService,\n storeService,\n storeCacheService,\n poiService,\n project,\n dynamicDsService,\n apiService.fetchBlocks.bind(apiService),\n );\n }\n\n protected getBlockHeight(block: EthereumBlockWrapper): number {\n return block.blockHeight;\n }\n\n protected async indexBlock(\n block: EthereumBlockWrapper,\n ): Promise<ProcessBlockResponse> {\n return this.indexerManager.indexBlock(\n block,\n await this.projectService.getAllDataSources(this.getBlockHeight(block)),\n );\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ethereum-block-dispatcher.js","sourceRoot":"","sources":["../../../src/indexer/blockDispatcher/ethereum-block-dispatcher.ts"],"names":[],"mappings":";AAAA,kEAAkE;AAClE,sCAAsC","sourcesContent":["// / Copyright 2020-2021 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport { IBlockDispatcher } from '@subql/node-core';\n\nexport interface IEthereumBlockDispatcher extends IBlockDispatcher {\n init(onDynamicDsCreated: (height: number) => Promise<void>): Promise<void>;\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { BlockDispatcherService } from './block-dispatcher.service';
|
|
2
|
+
import { IEthereumBlockDispatcher } from './ethereum-block-dispatcher';
|
|
3
|
+
import { WorkerBlockDispatcherService } from './worker-block-dispatcher.service';
|
|
4
|
+
export { BlockDispatcherService, WorkerBlockDispatcherService, IEthereumBlockDispatcher, };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2020-2021 OnFinality Limited authors & contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.WorkerBlockDispatcherService = exports.BlockDispatcherService = void 0;
|
|
6
|
+
const block_dispatcher_service_1 = require("./block-dispatcher.service");
|
|
7
|
+
Object.defineProperty(exports, "BlockDispatcherService", { enumerable: true, get: function () { return block_dispatcher_service_1.BlockDispatcherService; } });
|
|
8
|
+
const worker_block_dispatcher_service_1 = require("./worker-block-dispatcher.service");
|
|
9
|
+
Object.defineProperty(exports, "WorkerBlockDispatcherService", { enumerable: true, get: function () { return worker_block_dispatcher_service_1.WorkerBlockDispatcherService; } });
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/indexer/blockDispatcher/index.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,sCAAsC;;;AAEtC,yEAAoE;AAKlE,uGALO,iDAAsB,OAKP;AAHxB,uFAAiF;AAI/E,6GAJO,8DAA4B,OAIP","sourcesContent":["// Copyright 2020-2021 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport { BlockDispatcherService } from './block-dispatcher.service';\nimport { IEthereumBlockDispatcher } from './ethereum-block-dispatcher';\nimport { WorkerBlockDispatcherService } from './worker-block-dispatcher.service';\n\nexport {\n BlockDispatcherService,\n WorkerBlockDispatcherService,\n IEthereumBlockDispatcher,\n};\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { OnApplicationShutdown } from '@nestjs/common';
|
|
2
|
+
import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
3
|
+
import { NodeConfig, SmartBatchService, StoreService, PoiService, StoreCacheService, IProjectService, WorkerBlockDispatcher } from '@subql/node-core';
|
|
4
|
+
import { SubqlProjectDs, SubqueryProject } from '../../configure/SubqueryProject';
|
|
5
|
+
import { DynamicDsService } from '../dynamic-ds.service';
|
|
6
|
+
import { UnfinalizedBlocksService } from '../unfinalizedBlocks.service';
|
|
7
|
+
import { IIndexerWorker } from '../worker/worker';
|
|
8
|
+
type IndexerWorker = IIndexerWorker & {
|
|
9
|
+
terminate: () => Promise<number>;
|
|
10
|
+
};
|
|
11
|
+
export declare class WorkerBlockDispatcherService extends WorkerBlockDispatcher<SubqlProjectDs, IndexerWorker> implements OnApplicationShutdown {
|
|
12
|
+
constructor(nodeConfig: NodeConfig, eventEmitter: EventEmitter2, projectService: IProjectService<SubqlProjectDs>, smartBatchService: SmartBatchService, storeService: StoreService, storeCacheService: StoreCacheService, poiService: PoiService, project: SubqueryProject, dynamicDsService: DynamicDsService, unfinalizedBlocksSevice: UnfinalizedBlocksService);
|
|
13
|
+
protected fetchBlock(worker: IndexerWorker, height: number): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright 2020-2021 OnFinality Limited authors & contributors
|
|
3
|
+
// SPDX-License-Identifier: Apache-2.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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
+
};
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.WorkerBlockDispatcherService = void 0;
|
|
21
|
+
const path_1 = __importDefault(require("path"));
|
|
22
|
+
const common_1 = require("@nestjs/common");
|
|
23
|
+
const event_emitter_1 = require("@nestjs/event-emitter");
|
|
24
|
+
const node_core_1 = require("@subql/node-core");
|
|
25
|
+
const SubqueryProject_1 = require("../../configure/SubqueryProject");
|
|
26
|
+
const dynamic_ds_service_1 = require("../dynamic-ds.service");
|
|
27
|
+
const unfinalizedBlocks_service_1 = require("../unfinalizedBlocks.service");
|
|
28
|
+
const logger = (0, node_core_1.getLogger)('WorkerBlockDispatcherService');
|
|
29
|
+
async function createIndexerWorker(store, dynamicDsService, unfinalizedBlocksService) {
|
|
30
|
+
const indexerWorker = node_core_1.Worker.create(path_1.default.resolve(__dirname, '../../../dist/indexer/worker/worker.js'), [
|
|
31
|
+
'initWorker',
|
|
32
|
+
'processBlock',
|
|
33
|
+
'fetchBlock',
|
|
34
|
+
'numFetchedBlocks',
|
|
35
|
+
'numFetchingBlocks',
|
|
36
|
+
'getStatus',
|
|
37
|
+
'getMemoryLeft',
|
|
38
|
+
'waitForWorkerBatchSize',
|
|
39
|
+
], {
|
|
40
|
+
storeGet: store.get.bind(store),
|
|
41
|
+
storeGetByField: store.getByField.bind(store),
|
|
42
|
+
storeGetOneByField: store.getOneByField.bind(store),
|
|
43
|
+
storeSet: store.set.bind(store),
|
|
44
|
+
storeBulkCreate: store.bulkCreate.bind(store),
|
|
45
|
+
storeBulkUpdate: store.bulkUpdate.bind(store),
|
|
46
|
+
storeRemove: store.remove.bind(store),
|
|
47
|
+
dynamicDsCreateDynamicDatasource: dynamicDsService.createDynamicDatasource.bind(dynamicDsService),
|
|
48
|
+
dynamicDsGetDynamicDatasources: dynamicDsService.getDynamicDatasources.bind(dynamicDsService),
|
|
49
|
+
unfinalizedBlocksProcess: unfinalizedBlocksService.processUnfinalizedBlocks.bind(unfinalizedBlocksService),
|
|
50
|
+
});
|
|
51
|
+
await indexerWorker.initWorker();
|
|
52
|
+
return indexerWorker;
|
|
53
|
+
}
|
|
54
|
+
let WorkerBlockDispatcherService = class WorkerBlockDispatcherService extends node_core_1.WorkerBlockDispatcher {
|
|
55
|
+
constructor(nodeConfig, eventEmitter, projectService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService, unfinalizedBlocksSevice) {
|
|
56
|
+
super(nodeConfig, eventEmitter, projectService, smartBatchService, storeService, storeCacheService, poiService, project, dynamicDsService, () => createIndexerWorker(storeService.getStore(), dynamicDsService, unfinalizedBlocksSevice));
|
|
57
|
+
}
|
|
58
|
+
async fetchBlock(worker, height) {
|
|
59
|
+
const start = new Date();
|
|
60
|
+
await worker.fetchBlock(height);
|
|
61
|
+
const end = new Date();
|
|
62
|
+
// const waitTime = end.getTime() - start.getTime();
|
|
63
|
+
// if (waitTime > 1000) {
|
|
64
|
+
// logger.info(
|
|
65
|
+
// `Waiting to fetch block ${height}: ${chalk.red(`${waitTime}ms`)}`,
|
|
66
|
+
// );
|
|
67
|
+
// } else if (waitTime > 200) {
|
|
68
|
+
// logger.info(
|
|
69
|
+
// `Waiting to fetch block ${height}: ${chalk.yellow(`${waitTime}ms`)}`,
|
|
70
|
+
// );
|
|
71
|
+
// }
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
WorkerBlockDispatcherService = __decorate([
|
|
75
|
+
(0, common_1.Injectable)(),
|
|
76
|
+
__param(2, (0, common_1.Inject)('IProjectService')),
|
|
77
|
+
__param(7, (0, common_1.Inject)('ISubqueryProject')),
|
|
78
|
+
__metadata("design:paramtypes", [node_core_1.NodeConfig,
|
|
79
|
+
event_emitter_1.EventEmitter2, Object, node_core_1.SmartBatchService,
|
|
80
|
+
node_core_1.StoreService,
|
|
81
|
+
node_core_1.StoreCacheService,
|
|
82
|
+
node_core_1.PoiService,
|
|
83
|
+
SubqueryProject_1.SubqueryProject,
|
|
84
|
+
dynamic_ds_service_1.DynamicDsService,
|
|
85
|
+
unfinalizedBlocks_service_1.UnfinalizedBlocksService])
|
|
86
|
+
], WorkerBlockDispatcherService);
|
|
87
|
+
exports.WorkerBlockDispatcherService = WorkerBlockDispatcherService;
|
|
88
|
+
//# sourceMappingURL=worker-block-dispatcher.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-block-dispatcher.service.js","sourceRoot":"","sources":["../../../src/indexer/blockDispatcher/worker-block-dispatcher.service.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2020-2021 OnFinality Limited authors & contributors\n// SPDX-License-Identifier: Apache-2.0\n\nimport path from 'path';\nimport { Inject, Injectable, OnApplicationShutdown } from '@nestjs/common';\nimport { EventEmitter2 } from '@nestjs/event-emitter';\nimport {\n getLogger,\n NodeConfig,\n Worker,\n SmartBatchService,\n StoreService,\n PoiService,\n StoreCacheService,\n IProjectService,\n IDynamicDsService,\n HostStore,\n HostDynamicDS,\n WorkerBlockDispatcher,\n} from '@subql/node-core';\nimport { Store } from '@subql/types';\nimport chalk from 'chalk';\nimport {\n SubqlProjectDs,\n SubqueryProject,\n} from '../../configure/SubqueryProject';\nimport { DynamicDsService } from '../dynamic-ds.service';\nimport {\n IUnfinalizedBlocksService,\n UnfinalizedBlocksService,\n} from '../unfinalizedBlocks.service';\nimport { IIndexerWorker, IInitIndexerWorker } from '../worker/worker';\nimport { HostUnfinalizedBlocks } from '../worker/worker.unfinalizedBlocks.service';\n\nconst logger = getLogger('WorkerBlockDispatcherService');\n\ntype IndexerWorker = IIndexerWorker & {\n terminate: () => Promise<number>;\n};\n\nasync function createIndexerWorker(\n store: Store,\n dynamicDsService: IDynamicDsService<SubqlProjectDs>,\n unfinalizedBlocksService: IUnfinalizedBlocksService,\n): Promise<IndexerWorker> {\n const indexerWorker = Worker.create<\n IInitIndexerWorker,\n HostDynamicDS<SubqlProjectDs> & HostStore & HostUnfinalizedBlocks\n >(\n path.resolve(__dirname, '../../../dist/indexer/worker/worker.js'),\n [\n 'initWorker',\n 'processBlock',\n 'fetchBlock',\n 'numFetchedBlocks',\n 'numFetchingBlocks',\n 'getStatus',\n 'getMemoryLeft',\n 'waitForWorkerBatchSize',\n ],\n {\n storeGet: store.get.bind(store),\n storeGetByField: store.getByField.bind(store),\n storeGetOneByField: store.getOneByField.bind(store),\n storeSet: store.set.bind(store),\n storeBulkCreate: store.bulkCreate.bind(store),\n storeBulkUpdate: store.bulkUpdate.bind(store),\n storeRemove: store.remove.bind(store),\n dynamicDsCreateDynamicDatasource:\n dynamicDsService.createDynamicDatasource.bind(dynamicDsService),\n dynamicDsGetDynamicDatasources:\n dynamicDsService.getDynamicDatasources.bind(dynamicDsService),\n unfinalizedBlocksProcess:\n unfinalizedBlocksService.processUnfinalizedBlocks.bind(\n unfinalizedBlocksService,\n ),\n },\n );\n\n await indexerWorker.initWorker();\n\n return indexerWorker;\n}\n\n@Injectable()\nexport class WorkerBlockDispatcherService\n extends WorkerBlockDispatcher<SubqlProjectDs, IndexerWorker>\n implements OnApplicationShutdown\n{\n constructor(\n nodeConfig: NodeConfig,\n eventEmitter: EventEmitter2,\n @Inject('IProjectService') projectService: IProjectService<SubqlProjectDs>,\n smartBatchService: SmartBatchService,\n storeService: StoreService,\n storeCacheService: StoreCacheService,\n poiService: PoiService,\n @Inject('ISubqueryProject') project: SubqueryProject,\n dynamicDsService: DynamicDsService,\n unfinalizedBlocksSevice: UnfinalizedBlocksService,\n ) {\n super(\n nodeConfig,\n eventEmitter,\n projectService,\n smartBatchService,\n storeService,\n storeCacheService,\n poiService,\n project,\n dynamicDsService,\n () =>\n createIndexerWorker(\n storeService.getStore(),\n dynamicDsService,\n unfinalizedBlocksSevice,\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);\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"]}
|
|
@@ -4,4 +4,5 @@ import { SubqueryProject } from '../configure/SubqueryProject';
|
|
|
4
4
|
export declare class DictionaryService extends CoreDictionaryService implements OnApplicationShutdown {
|
|
5
5
|
protected project: SubqueryProject;
|
|
6
6
|
constructor(project: SubqueryProject, nodeConfig: NodeConfig);
|
|
7
|
+
getEvmChainId(): Promise<string>;
|
|
7
8
|
}
|