@sentio/sdk 2.59.5-rc.1 → 2.60.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/aptos/aptos-plugin.d.ts +5 -11
- package/lib/aptos/aptos-plugin.d.ts.map +1 -1
- package/lib/aptos/aptos-plugin.js +38 -23
- package/lib/aptos/aptos-plugin.js.map +1 -1
- package/lib/aptos/aptos-processor.d.ts +1 -0
- package/lib/aptos/aptos-processor.d.ts.map +1 -1
- package/lib/aptos/aptos-processor.js +11 -3
- package/lib/aptos/aptos-processor.js.map +1 -1
- package/lib/btc/btc-plugin.d.ts +5 -8
- package/lib/btc/btc-plugin.d.ts.map +1 -1
- package/lib/btc/btc-plugin.js +22 -14
- package/lib/btc/btc-plugin.js.map +1 -1
- package/lib/core/core-plugin.d.ts +2 -1
- package/lib/core/core-plugin.d.ts.map +1 -1
- package/lib/core/core-plugin.js +9 -0
- package/lib/core/core-plugin.js.map +1 -1
- package/lib/core/handler-options.d.ts +6 -0
- package/lib/core/handler-options.d.ts.map +1 -1
- package/lib/core/handler-options.js.map +1 -1
- package/lib/core/handler-register.d.ts +18 -0
- package/lib/core/handler-register.d.ts.map +1 -0
- package/lib/core/handler-register.js +62 -0
- package/lib/core/handler-register.js.map +1 -0
- package/lib/cosmos/cosmos-plugin.d.ts +5 -7
- package/lib/cosmos/cosmos-plugin.d.ts.map +1 -1
- package/lib/cosmos/cosmos-plugin.js +18 -10
- package/lib/cosmos/cosmos-plugin.js.map +1 -1
- package/lib/eth/eth-plugin.d.ts +5 -40
- package/lib/eth/eth-plugin.d.ts.map +1 -1
- package/lib/eth/eth-plugin.js +41 -117
- package/lib/eth/eth-plugin.js.map +1 -1
- package/lib/fuel/fuel-plugin.d.ts +5 -9
- package/lib/fuel/fuel-plugin.d.ts.map +1 -1
- package/lib/fuel/fuel-plugin.js +26 -18
- package/lib/fuel/fuel-plugin.js.map +1 -1
- package/lib/solana/solana-plugin.d.ts +3 -2
- package/lib/solana/solana-plugin.d.ts.map +1 -1
- package/lib/solana/solana-plugin.js +11 -1
- package/lib/solana/solana-plugin.js.map +1 -1
- package/lib/stark/starknet-plugin.d.ts +5 -7
- package/lib/stark/starknet-plugin.d.ts.map +1 -1
- package/lib/stark/starknet-plugin.js +18 -10
- package/lib/stark/starknet-plugin.js.map +1 -1
- package/lib/sui/sui-plugin.d.ts +5 -10
- package/lib/sui/sui-plugin.d.ts.map +1 -1
- package/lib/sui/sui-plugin.js +37 -24
- package/lib/sui/sui-plugin.js.map +1 -1
- package/package.json +3 -3
- package/src/aptos/aptos-plugin.ts +55 -44
- package/src/aptos/aptos-processor.ts +15 -3
- package/src/btc/btc-plugin.ts +33 -32
- package/src/core/core-plugin.ts +11 -2
- package/src/core/handler-options.ts +7 -0
- package/src/core/handler-register.ts +79 -0
- package/src/cosmos/cosmos-plugin.ts +24 -20
- package/src/eth/eth-plugin.ts +62 -182
- package/src/fuel/fuel-plugin.ts +43 -44
- package/src/solana/solana-plugin.ts +20 -2
- package/src/stark/starknet-plugin.ts +24 -20
- package/src/sui/sui-plugin.ts +58 -52
@@ -0,0 +1,18 @@
|
|
1
|
+
import { ChainId } from '@sentio/chain';
|
2
|
+
import { ProcessResult } from '@sentio/protos';
|
3
|
+
export type HandlerFunction = (...args: any[]) => Promise<ProcessResult>;
|
4
|
+
export declare class HandlerRegister {
|
5
|
+
private handlerByChain;
|
6
|
+
private handlers;
|
7
|
+
/**
|
8
|
+
* Register a handler function with chain ID and handle type
|
9
|
+
* @returns handler ID
|
10
|
+
*/
|
11
|
+
register(handler: HandlerFunction, chainId: ChainId | string): number;
|
12
|
+
/**
|
13
|
+
* Get handler function by ID
|
14
|
+
*/
|
15
|
+
getHandlerById(id: number): HandlerFunction;
|
16
|
+
clear(chainId?: ChainId): void;
|
17
|
+
}
|
18
|
+
//# sourceMappingURL=handler-register.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"handler-register.d.ts","sourceRoot":"","sources":["../../src/core/handler-register.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE9C,MAAM,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;AAmBxE,qBAAa,eAAe;IAC1B,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,QAAQ,CAAuC;IAEvD;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM;IAmBrE;;OAEG;IACH,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe;IAQ3C,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI;CAiB/B"}
|
@@ -0,0 +1,62 @@
|
|
1
|
+
import { ServerError, Status } from 'nice-grpc';
|
2
|
+
import { ChainId } from '@sentio/chain';
|
3
|
+
const chainToNumber = new Map();
|
4
|
+
const numberToChain = new Map();
|
5
|
+
for (const chainId of Object.values(ChainId)) {
|
6
|
+
const num = chainToNumber.size + 1;
|
7
|
+
chainToNumber.set(chainId, num);
|
8
|
+
numberToChain.set(num, chainId);
|
9
|
+
}
|
10
|
+
const MAX_HANDLER_PER_CHAIN = 1000000; // Maximum handlers per chain
|
11
|
+
export class HandlerRegister {
|
12
|
+
handlerByChain = new Map();
|
13
|
+
handlers = new Map();
|
14
|
+
/**
|
15
|
+
* Register a handler function with chain ID and handle type
|
16
|
+
* @returns handler ID
|
17
|
+
*/
|
18
|
+
register(handler, chainId) {
|
19
|
+
const chainNum = chainToNumber.get(chainId) || 0;
|
20
|
+
const entries = this.handlerByChain.get(chainNum) || [];
|
21
|
+
const len = entries.length;
|
22
|
+
const id = chainNum * MAX_HANDLER_PER_CHAIN + len + 1; // Use the first 32 bits for chain ID, next bits for index
|
23
|
+
const entry = {
|
24
|
+
id,
|
25
|
+
handler,
|
26
|
+
chainId
|
27
|
+
};
|
28
|
+
entries.push(entry);
|
29
|
+
this.handlerByChain.set(chainNum, entries);
|
30
|
+
this.handlers.set(id, entry);
|
31
|
+
return id;
|
32
|
+
}
|
33
|
+
/**
|
34
|
+
* Get handler function by ID
|
35
|
+
*/
|
36
|
+
getHandlerById(id) {
|
37
|
+
const entry = this.handlers.get(id);
|
38
|
+
if (!entry) {
|
39
|
+
throw new ServerError(Status.INTERNAL, `Handler with ID ${id} not found.`);
|
40
|
+
}
|
41
|
+
return entry.handler;
|
42
|
+
}
|
43
|
+
clear(chainId) {
|
44
|
+
if (chainId) {
|
45
|
+
const chainNum = chainToNumber.get(chainId);
|
46
|
+
if (chainNum !== undefined) {
|
47
|
+
const chainHandlers = this.handlerByChain.get(chainNum);
|
48
|
+
if (chainHandlers) {
|
49
|
+
for (const entry of chainHandlers) {
|
50
|
+
this.handlers.delete(entry.id);
|
51
|
+
}
|
52
|
+
}
|
53
|
+
this.handlerByChain.delete(chainNum);
|
54
|
+
}
|
55
|
+
}
|
56
|
+
else {
|
57
|
+
this.handlerByChain.clear();
|
58
|
+
this.handlers.clear();
|
59
|
+
}
|
60
|
+
}
|
61
|
+
}
|
62
|
+
//# sourceMappingURL=handler-register.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"handler-register.js","sourceRoot":"","sources":["../../src/core/handler-register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAWvC,MAAM,aAAa,GAAwB,IAAI,GAAG,EAAE,CAAA;AACpD,MAAM,aAAa,GAAwB,IAAI,GAAG,EAAE,CAAA;AAEpD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IAC7C,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,CAAA;IAClC,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAC/B,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;AACjC,CAAC;AAED,MAAM,qBAAqB,GAAG,OAAO,CAAA,CAAC,6BAA6B;AAEnE,MAAM,OAAO,eAAe;IAClB,cAAc,GAAgC,IAAI,GAAG,EAAE,CAAA;IACvD,QAAQ,GAA8B,IAAI,GAAG,EAAE,CAAA;IAEvD;;;OAGG;IACH,QAAQ,CAAC,OAAwB,EAAE,OAAyB;QAC1D,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;QAEvD,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAA;QAC1B,MAAM,EAAE,GAAG,QAAQ,GAAG,qBAAqB,GAAG,GAAG,GAAG,CAAC,CAAA,CAAC,0DAA0D;QAEhH,MAAM,KAAK,GAAiB;YAC1B,EAAE;YACF,OAAO;YACP,OAAO;SACR,CAAA;QACD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACnB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAC1C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QAE5B,OAAO,EAAE,CAAA;IACX,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,EAAU;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACnC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,mBAAmB,EAAE,aAAa,CAAC,CAAA;QAC5E,CAAC;QACD,OAAO,KAAK,CAAC,OAAO,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,OAAiB;QACrB,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAC3C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;gBACvD,IAAI,aAAa,EAAE,CAAC;oBAClB,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;wBAClC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;oBAChC,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACtC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;YAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;QACvB,CAAC;IACH,CAAC;CACF"}
|
@@ -1,17 +1,15 @@
|
|
1
1
|
import { Plugin } from '@sentio/runtime';
|
2
|
-
import {
|
3
|
-
|
4
|
-
callHandlers: ((trace: Data_CosmosCall) => Promise<ProcessResult>)[];
|
5
|
-
}
|
2
|
+
import { DataBinding, HandlerType, InitResponse, ProcessConfigResponse, ProcessResult, StartRequest } from '@sentio/protos';
|
3
|
+
import { HandlerRegister } from '../core/handler-register.js';
|
6
4
|
export declare class CosmosPlugin extends Plugin {
|
7
5
|
name: string;
|
8
|
-
|
9
|
-
|
6
|
+
handlerRegister: HandlerRegister;
|
7
|
+
init(config: InitResponse): Promise<void>;
|
8
|
+
configure(config: ProcessConfigResponse, forChainId?: string): Promise<void>;
|
10
9
|
supportedHandlers: HandlerType[];
|
11
10
|
processBinding(request: DataBinding): Promise<ProcessResult>;
|
12
11
|
start(request: StartRequest): Promise<void>;
|
13
12
|
stateDiff(config: ProcessConfigResponse): boolean;
|
14
13
|
processTransaction(binding: DataBinding): Promise<ProcessResult>;
|
15
14
|
}
|
16
|
-
export {};
|
17
15
|
//# sourceMappingURL=cosmos-plugin.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"cosmos-plugin.d.ts","sourceRoot":"","sources":["../../src/cosmos/cosmos-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmD,MAAM,EAAiC,MAAM,iBAAiB,CAAA;AACxH,OAAO,EAEL,
|
1
|
+
{"version":3,"file":"cosmos-plugin.d.ts","sourceRoot":"","sources":["../../src/cosmos/cosmos-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmD,MAAM,EAAiC,MAAM,iBAAiB,CAAA;AACxH,OAAO,EAEL,WAAW,EACX,WAAW,EACX,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACb,YAAY,EACb,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAG7D,qBAAa,YAAa,SAAQ,MAAM;IACtC,IAAI,EAAE,MAAM,CAAiB;IAC7B,eAAe,kBAAwB;IAEjC,IAAI,CAAC,MAAM,EAAE,YAAY;IAOzB,SAAS,CAAC,MAAM,EAAE,qBAAqB,EAAE,UAAU,CAAC,EAAE,MAAM;IAmClE,iBAAiB,gBAA4B;IAE7C,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;IAStD,KAAK,CAAC,OAAO,EAAE,YAAY;IAEjC,SAAS,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO;IAI3C,kBAAkB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;CAwBvE"}
|
@@ -2,17 +2,24 @@ import { errorString, GLOBAL_CONFIG, mergeProcessResults, Plugin, PluginManager,
|
|
2
2
|
import { ContractConfig, HandlerType } from '@sentio/protos';
|
3
3
|
import { ServerError, Status } from 'nice-grpc';
|
4
4
|
import { TemplateInstanceState } from '../core/template.js';
|
5
|
+
import { HandlerRegister } from '../core/handler-register.js';
|
5
6
|
import { CosmosProcessorState } from './types.js';
|
6
7
|
export class CosmosPlugin extends Plugin {
|
7
8
|
name = 'CosmosPlugin';
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
9
|
+
handlerRegister = new HandlerRegister();
|
10
|
+
async init(config) {
|
11
|
+
for (const aptosProcessor of CosmosProcessorState.INSTANCE.getValues()) {
|
12
|
+
const chainId = aptosProcessor.config.chainId;
|
13
|
+
config.chainIds.push(chainId);
|
14
|
+
}
|
15
|
+
}
|
16
|
+
async configure(config, forChainId) {
|
17
|
+
this.handlerRegister.clear(forChainId);
|
15
18
|
for (const processor of CosmosProcessorState.INSTANCE.getValues()) {
|
19
|
+
const chainId = processor.config.chainId;
|
20
|
+
if (forChainId !== undefined && forChainId !== chainId.toString()) {
|
21
|
+
continue;
|
22
|
+
}
|
16
23
|
const contractConfig = ContractConfig.fromPartial({
|
17
24
|
processorType: USER_PROCESSOR,
|
18
25
|
contract: {
|
@@ -25,7 +32,7 @@ export class CosmosPlugin extends Plugin {
|
|
25
32
|
endBlock: processor.config.endBlock
|
26
33
|
});
|
27
34
|
for (const callHandler of processor.callHandlers) {
|
28
|
-
const handlerId =
|
35
|
+
const handlerId = this.handlerRegister.register(callHandler.handler, chainId);
|
29
36
|
contractConfig.cosmosLogConfigs.push({
|
30
37
|
handlerId,
|
31
38
|
handlerName: callHandler.handlerName,
|
@@ -35,7 +42,6 @@ export class CosmosPlugin extends Plugin {
|
|
35
42
|
// Finish up a contract
|
36
43
|
config.contractConfigs.push(contractConfig);
|
37
44
|
}
|
38
|
-
this.handlers = handlers;
|
39
45
|
}
|
40
46
|
supportedHandlers = [HandlerType.COSMOS_CALL];
|
41
47
|
processBinding(request) {
|
@@ -57,7 +63,9 @@ export class CosmosPlugin extends Plugin {
|
|
57
63
|
const call = binding.data.cosmosCall;
|
58
64
|
const promises = [];
|
59
65
|
for (const handlerId of binding.handlerIds) {
|
60
|
-
const promise = this.
|
66
|
+
const promise = this.handlerRegister
|
67
|
+
.getHandlerById(handlerId)(call)
|
68
|
+
.catch((e) => {
|
61
69
|
throw new ServerError(Status.INTERNAL, 'error processing transaction: ' + JSON.stringify(call.transaction) + '\n' + errorString(e));
|
62
70
|
});
|
63
71
|
if (GLOBAL_CONFIG.execution.sequential) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"cosmos-plugin.js","sourceRoot":"","sources":["../../src/cosmos/cosmos-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACxH,OAAO,EACL,cAAc,
|
1
|
+
{"version":3,"file":"cosmos-plugin.js","sourceRoot":"","sources":["../../src/cosmos/cosmos-plugin.ts"],"names":[],"mappings":"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"}
|
package/lib/eth/eth-plugin.d.ts
CHANGED
@@ -1,56 +1,21 @@
|
|
1
1
|
import { Plugin } from '@sentio/runtime';
|
2
2
|
import { PartitionHandlerManager } from '../core/index.js';
|
3
|
-
import {
|
4
|
-
|
5
|
-
eventHandlers: ((event: Data_EthLog, preparedData?: PreparedData) => Promise<ProcessResult>)[];
|
6
|
-
traceHandlers: ((trace: Data_EthTrace, preparedData?: PreparedData) => Promise<ProcessResult>)[];
|
7
|
-
blockHandlers: ((block: Data_EthBlock, preparedData?: PreparedData) => Promise<ProcessResult>)[];
|
8
|
-
transactionHandlers: ((trace: Data_EthTransaction, preparedData?: PreparedData) => Promise<ProcessResult>)[];
|
9
|
-
}
|
10
|
-
interface PreprocessHandlers {
|
11
|
-
eventHandlers: ((event: Data_EthLog, preprocessStore: {
|
12
|
-
[k: string]: any;
|
13
|
-
}) => Promise<PreprocessResult>)[];
|
14
|
-
traceHandlers: ((trace: Data_EthTrace, preprocessStore: {
|
15
|
-
[k: string]: any;
|
16
|
-
}) => Promise<PreprocessResult>)[];
|
17
|
-
blockHandlers: ((block: Data_EthBlock, preprocessStore: {
|
18
|
-
[k: string]: any;
|
19
|
-
}) => Promise<PreprocessResult>)[];
|
20
|
-
transactionHandlers: ((txn: Data_EthTransaction, preprocessStore: {
|
21
|
-
[k: string]: any;
|
22
|
-
}) => Promise<PreprocessResult>)[];
|
23
|
-
}
|
3
|
+
import { DataBinding, HandlerType, InitResponse, PreparedData, ProcessConfigResponse, ProcessResult, ProcessStreamResponse_Partitions, StartRequest } from '@sentio/protos';
|
4
|
+
import { HandlerRegister } from '../core/handler-register.js';
|
24
5
|
export declare class EthPlugin extends Plugin {
|
25
6
|
name: string;
|
26
|
-
|
27
|
-
preprocessHandlers: PreprocessHandlers;
|
7
|
+
handlerRegister: HandlerRegister;
|
28
8
|
partitionManager: PartitionHandlerManager;
|
29
|
-
|
9
|
+
init(config: InitResponse): Promise<void>;
|
10
|
+
configure(config: ProcessConfigResponse, forChainId?: string): Promise<void>;
|
30
11
|
supportedHandlers: HandlerType[];
|
31
12
|
processBinding(request: DataBinding, preparedData: PreparedData | undefined): Promise<ProcessResult>;
|
32
|
-
preprocessBinding(request: DataBinding, preprocessStore: {
|
33
|
-
[k: string]: any;
|
34
|
-
}): Promise<PreprocessResult>;
|
35
13
|
partition(request: DataBinding): Promise<ProcessStreamResponse_Partitions>;
|
36
14
|
start(request: StartRequest): Promise<void>;
|
37
15
|
stateDiff(config: ProcessConfigResponse): boolean;
|
38
|
-
preprocessLog(request: DataBinding, preprocessStore: {
|
39
|
-
[k: string]: any;
|
40
|
-
}): Promise<PreprocessResult>;
|
41
|
-
preprocessTrace(binding: DataBinding, preprocessStore: {
|
42
|
-
[k: string]: any;
|
43
|
-
}): Promise<PreprocessResult>;
|
44
|
-
preprocessBlock(binding: DataBinding, preprocessStore: {
|
45
|
-
[k: string]: any;
|
46
|
-
}): Promise<PreprocessResult>;
|
47
|
-
preprocessTransaction(binding: DataBinding, preprocessStore: {
|
48
|
-
[k: string]: any;
|
49
|
-
}): Promise<PreprocessResult>;
|
50
16
|
processLog(request: DataBinding, preparedData: PreparedData | undefined): Promise<ProcessResult>;
|
51
17
|
processTrace(binding: DataBinding, preparedData: PreparedData | undefined): Promise<ProcessResult>;
|
52
18
|
processBlock(binding: DataBinding, preparedData: PreparedData | undefined): Promise<ProcessResult>;
|
53
19
|
processTransaction(binding: DataBinding, preparedData: PreparedData | undefined): Promise<ProcessResult>;
|
54
20
|
}
|
55
|
-
export {};
|
56
21
|
//# sourceMappingURL=eth-plugin.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"eth-plugin.d.ts","sourceRoot":"","sources":["../../src/eth/eth-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,MAAM,EAGP,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAGL,
|
1
|
+
{"version":3,"file":"eth-plugin.d.ts","sourceRoot":"","sources":["../../src/eth/eth-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,MAAM,EAGP,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,EAGL,WAAW,EACX,WAAW,EACX,YAAY,EAGZ,YAAY,EAEZ,qBAAqB,EACrB,aAAa,EACb,gCAAgC,EAChC,YAAY,EACb,MAAM,gBAAgB,CAAA;AAYvB,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAE7D,qBAAa,SAAU,SAAQ,MAAM;IACnC,IAAI,EAAE,MAAM,CAAc;IAC1B,eAAe,kBAAwB;IAEvC,gBAAgB,0BAAgC;IAE1C,IAAI,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IASzC,SAAS,CAAC,MAAM,EAAE,qBAAqB,EAAE,UAAU,CAAC,EAAE,MAAM;IA6NlE,iBAAiB,gBAAmG;IAEpH,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC;IAgB9F,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,gCAAgC,CAAC;IAwC1E,KAAK,CAAC,OAAO,EAAE,YAAY;IA6BjC,SAAS,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO;IAI3C,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC;IAwBhG,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC;IA0BlG,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC;IAyBlG,kBAAkB,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC;CAwB/G"}
|
package/lib/eth/eth-plugin.js
CHANGED
@@ -5,45 +5,35 @@ import { ServerError, Status } from 'nice-grpc';
|
|
5
5
|
import { EthProcessorState } from './binds.js';
|
6
6
|
import { AccountProcessorState } from './account-processor-state.js';
|
7
7
|
import { ProcessorTemplateProcessorState } from './base-processor-template.js';
|
8
|
-
import {
|
8
|
+
import { GlobalProcessorState } from './base-processor.js';
|
9
9
|
import { validateAndNormalizeAddress } from './eth.js';
|
10
10
|
import { EthChainId } from '@sentio/chain';
|
11
11
|
import { EthContext } from './context.js';
|
12
12
|
import { TemplateInstanceState } from '../core/template.js';
|
13
13
|
import { timeOrBlockToBlockNumber } from '@sentio/sdk/utils';
|
14
|
+
import { HandlerRegister } from '../core/handler-register.js';
|
14
15
|
export class EthPlugin extends Plugin {
|
15
16
|
name = 'EthPlugin';
|
16
|
-
|
17
|
-
blockHandlers: [],
|
18
|
-
eventHandlers: [],
|
19
|
-
traceHandlers: [],
|
20
|
-
transactionHandlers: []
|
21
|
-
};
|
22
|
-
preprocessHandlers = {
|
23
|
-
blockHandlers: [],
|
24
|
-
eventHandlers: [],
|
25
|
-
traceHandlers: [],
|
26
|
-
transactionHandlers: []
|
27
|
-
};
|
17
|
+
handlerRegister = new HandlerRegister();
|
28
18
|
partitionManager = new PartitionHandlerManager();
|
29
|
-
async
|
30
|
-
const
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
}
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
traceHandlers: [],
|
40
|
-
transactionHandlers: []
|
41
|
-
};
|
19
|
+
async init(config) {
|
20
|
+
for (const state of [EthProcessorState.INSTANCE, GlobalProcessorState.INSTANCE, AccountProcessorState.INSTANCE]) {
|
21
|
+
for (const processor of state.getValues()) {
|
22
|
+
const chainId = processor.getChainId();
|
23
|
+
config.chainIds.push(chainId);
|
24
|
+
}
|
25
|
+
}
|
26
|
+
}
|
27
|
+
async configure(config, forChainId) {
|
28
|
+
this.handlerRegister.clear(forChainId);
|
42
29
|
for (const processor of EthProcessorState.INSTANCE.getValues()) {
|
43
30
|
// If server favor incremental update this need to change
|
44
31
|
// Start basic config for contract
|
45
32
|
const chainId = processor.getChainId();
|
46
33
|
// this.processorsByChainId.set(chainId, processor)
|
34
|
+
if (forChainId !== undefined && forChainId !== chainId.toString()) {
|
35
|
+
continue;
|
36
|
+
}
|
47
37
|
const provider = getProvider(chainId);
|
48
38
|
const startBlock = await timeOrBlockToBlockNumber(provider, processor.config.start);
|
49
39
|
const endBlock = processor.config.end ? await timeOrBlockToBlockNumber(provider, processor.config.end) : undefined;
|
@@ -60,8 +50,7 @@ export class EthPlugin extends Plugin {
|
|
60
50
|
});
|
61
51
|
// Step 1. Prepare all the block handlers
|
62
52
|
for (const blockHandler of processor.blockHandlers) {
|
63
|
-
|
64
|
-
const handlerId = handlers.blockHandlers.push(blockHandler.handler) - 1;
|
53
|
+
const handlerId = this.handlerRegister.register(blockHandler.handler, chainId);
|
65
54
|
this.partitionManager.registerPartitionHandler(HandlerType.ETH_BLOCK, handlerId, blockHandler.partitionHandler);
|
66
55
|
// TODO wrap the block handler into one
|
67
56
|
contractConfig.intervalConfigs.push({
|
@@ -76,8 +65,7 @@ export class EthPlugin extends Plugin {
|
|
76
65
|
}
|
77
66
|
// Step 2. Prepare all trace handlers
|
78
67
|
for (const traceHandler of processor.traceHandlers) {
|
79
|
-
|
80
|
-
const handlerId = handlers.traceHandlers.push(traceHandler.handler) - 1;
|
68
|
+
const handlerId = this.handlerRegister.register(traceHandler.handler, chainId);
|
81
69
|
this.partitionManager.registerPartitionHandler(HandlerType.ETH_TRACE, handlerId, traceHandler.partitionHandler);
|
82
70
|
for (const signature of traceHandler.signatures) {
|
83
71
|
contractConfig.traceConfigs.push({
|
@@ -91,8 +79,7 @@ export class EthPlugin extends Plugin {
|
|
91
79
|
// Step 3. Prepare all the event handlers
|
92
80
|
for (const eventsHandler of processor.eventHandlers) {
|
93
81
|
// associate id with filter
|
94
|
-
|
95
|
-
const handlerId = handlers.eventHandlers.push(eventsHandler.handler) - 1;
|
82
|
+
const handlerId = this.handlerRegister.register(eventsHandler.handler, chainId);
|
96
83
|
this.partitionManager.registerPartitionHandler(HandlerType.ETH_LOG, handlerId, eventsHandler.partitionHandler);
|
97
84
|
const logConfig = {
|
98
85
|
handlerId: handlerId,
|
@@ -129,6 +116,9 @@ export class EthPlugin extends Plugin {
|
|
129
116
|
}
|
130
117
|
for (const processor of GlobalProcessorState.INSTANCE.getValues()) {
|
131
118
|
const chainId = processor.getChainId();
|
119
|
+
if (forChainId !== undefined && forChainId !== chainId.toString()) {
|
120
|
+
continue;
|
121
|
+
}
|
132
122
|
const provider = getProvider(chainId);
|
133
123
|
const startBlock = await timeOrBlockToBlockNumber(provider, processor.config.start);
|
134
124
|
const endBlock = processor.config.end ? await timeOrBlockToBlockNumber(provider, processor.config.end) : undefined;
|
@@ -144,8 +134,7 @@ export class EthPlugin extends Plugin {
|
|
144
134
|
endBlock
|
145
135
|
});
|
146
136
|
for (const blockHandler of processor.blockHandlers) {
|
147
|
-
|
148
|
-
const handlerId = handlers.blockHandlers.push(blockHandler.handler) - 1;
|
137
|
+
const handlerId = this.handlerRegister.register(blockHandler.handler, chainId);
|
149
138
|
contractConfig.intervalConfigs.push({
|
150
139
|
slot: 0,
|
151
140
|
slotInterval: blockHandler.blockInterval,
|
@@ -157,8 +146,7 @@ export class EthPlugin extends Plugin {
|
|
157
146
|
});
|
158
147
|
}
|
159
148
|
for (const transactionHandler of processor.transactionHandler) {
|
160
|
-
|
161
|
-
const handlerId = handlers.transactionHandlers.push(transactionHandler.handler) - 1;
|
149
|
+
const handlerId = this.handlerRegister.register(transactionHandler.handler, chainId);
|
162
150
|
this.partitionManager.registerPartitionHandler(HandlerType.ETH_TRANSACTION, handlerId, transactionHandler.partitionHandler);
|
163
151
|
contractConfig.transactionConfig.push({
|
164
152
|
handlerId: handlerId,
|
@@ -167,8 +155,7 @@ export class EthPlugin extends Plugin {
|
|
167
155
|
});
|
168
156
|
}
|
169
157
|
for (const traceHandler of processor.traceHandlers) {
|
170
|
-
|
171
|
-
const handlerId = handlers.traceHandlers.push(traceHandler.handler) - 1;
|
158
|
+
const handlerId = this.handlerRegister.register(traceHandler.handler, chainId);
|
172
159
|
for (const signature of traceHandler.signatures) {
|
173
160
|
contractConfig.traceConfigs.push({
|
174
161
|
signature: signature,
|
@@ -182,6 +169,9 @@ export class EthPlugin extends Plugin {
|
|
182
169
|
}
|
183
170
|
// part 1.b prepare EVM account processors
|
184
171
|
for (const processor of AccountProcessorState.INSTANCE.getValues()) {
|
172
|
+
if (forChainId !== undefined && forChainId !== processor.getChainId().toString()) {
|
173
|
+
continue;
|
174
|
+
}
|
185
175
|
const accountConfig = AccountConfig.fromPartial({
|
186
176
|
address: validateAndNormalizeAddress(processor.config.address),
|
187
177
|
chainId: processor.getChainId().toString(),
|
@@ -190,8 +180,7 @@ export class EthPlugin extends Plugin {
|
|
190
180
|
// TODO add interval
|
191
181
|
for (const eventsHandler of processor.eventHandlers) {
|
192
182
|
// associate id with filter
|
193
|
-
|
194
|
-
const handlerId = handlers.eventHandlers.push(eventsHandler.handler) - 1;
|
183
|
+
const handlerId = this.handlerRegister.register(eventsHandler.handler, processor.getChainId());
|
195
184
|
const logConfig = {
|
196
185
|
handlerId: handlerId,
|
197
186
|
handlerName: eventsHandler.handlerName,
|
@@ -228,8 +217,8 @@ export class EthPlugin extends Plugin {
|
|
228
217
|
}
|
229
218
|
config.accountConfigs.push(accountConfig);
|
230
219
|
}
|
231
|
-
this.handlers = handlers
|
232
|
-
this.preprocessHandlers = preprocessHandlers
|
220
|
+
// this.handlers = handlers
|
221
|
+
// this.preprocessHandlers = preprocessHandlers
|
233
222
|
}
|
234
223
|
supportedHandlers = [HandlerType.ETH_LOG, HandlerType.ETH_BLOCK, HandlerType.ETH_TRACE, HandlerType.ETH_TRANSACTION];
|
235
224
|
processBinding(request, preparedData) {
|
@@ -247,20 +236,6 @@ export class EthPlugin extends Plugin {
|
|
247
236
|
throw new ServerError(Status.INVALID_ARGUMENT, 'No handle type registered ' + request.handlerType);
|
248
237
|
}
|
249
238
|
}
|
250
|
-
preprocessBinding(request, preprocessStore) {
|
251
|
-
switch (request.handlerType) {
|
252
|
-
case HandlerType.ETH_LOG:
|
253
|
-
return this.preprocessLog(request, preprocessStore);
|
254
|
-
case HandlerType.ETH_TRACE:
|
255
|
-
return this.preprocessTrace(request, preprocessStore);
|
256
|
-
case HandlerType.ETH_BLOCK:
|
257
|
-
return this.preprocessBlock(request, preprocessStore);
|
258
|
-
case HandlerType.ETH_TRANSACTION:
|
259
|
-
return this.preprocessTransaction(request, preprocessStore);
|
260
|
-
default:
|
261
|
-
throw new ServerError(Status.INVALID_ARGUMENT, 'No handle type registered ' + request.handlerType);
|
262
|
-
}
|
263
|
-
}
|
264
239
|
async partition(request) {
|
265
240
|
let data;
|
266
241
|
switch (request.handlerType) {
|
@@ -322,63 +297,6 @@ export class EthPlugin extends Plugin {
|
|
322
297
|
stateDiff(config) {
|
323
298
|
return TemplateInstanceState.INSTANCE.getValues().length !== config.templateInstances.length;
|
324
299
|
}
|
325
|
-
async preprocessLog(request, preprocessStore) {
|
326
|
-
if (!request.data?.ethLog?.log) {
|
327
|
-
throw new ServerError(Status.INVALID_ARGUMENT, "Log can't be null");
|
328
|
-
}
|
329
|
-
const ethLog = request.data.ethLog;
|
330
|
-
const promises = [];
|
331
|
-
for (const handlerId of request.handlerIds) {
|
332
|
-
const handler = this.preprocessHandlers.eventHandlers[handlerId];
|
333
|
-
const promise = handler(ethLog, preprocessStore).catch((e) => {
|
334
|
-
throw new ServerError(Status.INTERNAL, 'error processing log: ' + JSON.stringify(ethLog.log) + '\n' + errorString(e));
|
335
|
-
});
|
336
|
-
promises.push(promise);
|
337
|
-
}
|
338
|
-
return mergePreprocessResults(await Promise.all(promises));
|
339
|
-
}
|
340
|
-
async preprocessTrace(binding, preprocessStore) {
|
341
|
-
if (!binding.data?.ethTrace?.trace) {
|
342
|
-
throw new ServerError(Status.INVALID_ARGUMENT, "Trace can't be null");
|
343
|
-
}
|
344
|
-
const ethTrace = binding.data.ethTrace;
|
345
|
-
const promises = [];
|
346
|
-
for (const handlerId of binding.handlerIds) {
|
347
|
-
const promise = this.preprocessHandlers.traceHandlers[handlerId](ethTrace, preprocessStore).catch((e) => {
|
348
|
-
throw new ServerError(Status.INTERNAL, 'error processing trace: ' + JSON.stringify(ethTrace.trace) + '\n' + errorString(e));
|
349
|
-
});
|
350
|
-
promises.push(promise);
|
351
|
-
}
|
352
|
-
return mergePreprocessResults(await Promise.all(promises));
|
353
|
-
}
|
354
|
-
async preprocessBlock(binding, preprocessStore) {
|
355
|
-
if (!binding.data?.ethBlock?.block) {
|
356
|
-
throw new ServerError(Status.INVALID_ARGUMENT, "Block can't be empty");
|
357
|
-
}
|
358
|
-
const ethBlock = binding.data.ethBlock;
|
359
|
-
const promises = [];
|
360
|
-
for (const handlerId of binding.handlerIds) {
|
361
|
-
const promise = this.preprocessHandlers.blockHandlers[handlerId](ethBlock, preprocessStore).catch((e) => {
|
362
|
-
throw new ServerError(Status.INTERNAL, 'error processing block: ' + ethBlock.block?.number + '\n' + errorString(e));
|
363
|
-
});
|
364
|
-
promises.push(promise);
|
365
|
-
}
|
366
|
-
return mergePreprocessResults(await Promise.all(promises));
|
367
|
-
}
|
368
|
-
async preprocessTransaction(binding, preprocessStore) {
|
369
|
-
if (!binding.data?.ethTransaction?.transaction) {
|
370
|
-
throw new ServerError(Status.INVALID_ARGUMENT, "transaction can't be null");
|
371
|
-
}
|
372
|
-
const ethTransaction = binding.data.ethTransaction;
|
373
|
-
const promises = [];
|
374
|
-
for (const handlerId of binding.handlerIds) {
|
375
|
-
const promise = this.preprocessHandlers.transactionHandlers[handlerId](ethTransaction, preprocessStore).catch((e) => {
|
376
|
-
throw new ServerError(Status.INTERNAL, 'error processing transaction: ' + JSON.stringify(ethTransaction.transaction) + '\n' + errorString(e));
|
377
|
-
});
|
378
|
-
promises.push(promise);
|
379
|
-
}
|
380
|
-
return mergePreprocessResults(await Promise.all(promises));
|
381
|
-
}
|
382
300
|
async processLog(request, preparedData) {
|
383
301
|
if (!request.data?.ethLog?.log) {
|
384
302
|
throw new ServerError(Status.INVALID_ARGUMENT, "Log can't be null");
|
@@ -386,7 +304,7 @@ export class EthPlugin extends Plugin {
|
|
386
304
|
const ethLog = request.data.ethLog;
|
387
305
|
const promises = [];
|
388
306
|
for (const handlerId of request.handlerIds) {
|
389
|
-
const handler = this.
|
307
|
+
const handler = this.handlerRegister.getHandlerById(handlerId);
|
390
308
|
const promise = handler(ethLog, preparedData).catch((e) => {
|
391
309
|
console.error('error processing log: ', e);
|
392
310
|
throw new ServerError(Status.INTERNAL, 'error processing log: ' + JSON.stringify(ethLog.log) + '\n' + errorString(e));
|
@@ -405,7 +323,9 @@ export class EthPlugin extends Plugin {
|
|
405
323
|
const ethTrace = binding.data.ethTrace;
|
406
324
|
const promises = [];
|
407
325
|
for (const handlerId of binding.handlerIds) {
|
408
|
-
const promise = this.
|
326
|
+
const promise = this.handlerRegister
|
327
|
+
.getHandlerById(handlerId)(ethTrace, preparedData)
|
328
|
+
.catch((e) => {
|
409
329
|
console.error('error processing trace: ', e);
|
410
330
|
throw new ServerError(Status.INTERNAL, 'error processing trace: ' + JSON.stringify(ethTrace.trace) + '\n' + errorString(e));
|
411
331
|
});
|
@@ -423,7 +343,9 @@ export class EthPlugin extends Plugin {
|
|
423
343
|
const ethBlock = binding.data.ethBlock;
|
424
344
|
const promises = [];
|
425
345
|
for (const handlerId of binding.handlerIds) {
|
426
|
-
const promise = this.
|
346
|
+
const promise = this.handlerRegister
|
347
|
+
.getHandlerById(handlerId)(ethBlock, preparedData)
|
348
|
+
.catch((e) => {
|
427
349
|
console.error('error processing block: ', e);
|
428
350
|
throw new ServerError(Status.INTERNAL, 'error processing block: ' + ethBlock.block?.number + '\n' + errorString(e));
|
429
351
|
});
|
@@ -441,7 +363,9 @@ export class EthPlugin extends Plugin {
|
|
441
363
|
const ethTransaction = binding.data.ethTransaction;
|
442
364
|
const promises = [];
|
443
365
|
for (const handlerId of binding.handlerIds) {
|
444
|
-
const promise = this.
|
366
|
+
const promise = this.handlerRegister
|
367
|
+
.getHandlerById(handlerId)(ethTransaction, preparedData)
|
368
|
+
.catch((e) => {
|
445
369
|
throw new ServerError(Status.INTERNAL, 'error processing transaction: ' + JSON.stringify(ethTransaction.transaction) + '\n' + errorString(e));
|
446
370
|
});
|
447
371
|
if (GLOBAL_CONFIG.execution.sequential) {
|