@sentio/sdk 3.5.1-rc.2 → 3.5.1-rc.3
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/testing/test-processor-server.d.ts +0 -2
- package/lib/testing/test-processor-server.d.ts.map +1 -1
- package/lib/testing/test-processor-server.js +0 -3
- package/lib/testing/test-processor-server.js.map +1 -1
- package/package.json +5 -12
- package/src/testing/test-processor-server.ts +0 -3
- package/lib/stark/codegen/codegen.d.ts +0 -2
- package/lib/stark/codegen/codegen.d.ts.map +0 -1
- package/lib/stark/codegen/codegen.js +0 -110
- package/lib/stark/codegen/codegen.js.map +0 -1
- package/lib/stark/codegen/index.d.ts +0 -2
- package/lib/stark/codegen/index.d.ts.map +0 -1
- package/lib/stark/codegen/index.js +0 -2
- package/lib/stark/codegen/index.js.map +0 -1
- package/lib/stark/codegen/run.d.ts +0 -2
- package/lib/stark/codegen/run.d.ts.map +0 -1
- package/lib/stark/codegen/run.js +0 -11
- package/lib/stark/codegen/run.js.map +0 -1
- package/lib/stark/codegen/utils.d.ts +0 -2
- package/lib/stark/codegen/utils.d.ts.map +0 -1
- package/lib/stark/codegen/utils.js +0 -4
- package/lib/stark/codegen/utils.js.map +0 -1
- package/lib/stark/context.d.ts +0 -28
- package/lib/stark/context.d.ts.map +0 -1
- package/lib/stark/context.js +0 -59
- package/lib/stark/context.js.map +0 -1
- package/lib/stark/contract.d.ts +0 -12
- package/lib/stark/contract.d.ts.map +0 -1
- package/lib/stark/contract.js +0 -43
- package/lib/stark/contract.js.map +0 -1
- package/lib/stark/event.d.ts +0 -7
- package/lib/stark/event.d.ts.map +0 -1
- package/lib/stark/event.js +0 -11
- package/lib/stark/event.js.map +0 -1
- package/lib/stark/index.d.ts +0 -7
- package/lib/stark/index.d.ts.map +0 -1
- package/lib/stark/index.js +0 -7
- package/lib/stark/index.js.map +0 -1
- package/lib/stark/starknet-plugin.d.ts +0 -14
- package/lib/stark/starknet-plugin.d.ts.map +0 -1
- package/lib/stark/starknet-plugin.js +0 -83
- package/lib/stark/starknet-plugin.js.map +0 -1
- package/lib/stark/starknet-processor.d.ts +0 -35
- package/lib/stark/starknet-processor.d.ts.map +0 -1
- package/lib/stark/starknet-processor.js +0 -133
- package/lib/stark/starknet-processor.js.map +0 -1
- package/lib/stark/types.d.ts +0 -11
- package/lib/stark/types.d.ts.map +0 -1
- package/lib/stark/types.js +0 -2
- package/lib/stark/types.js.map +0 -1
- package/lib/testing/starknet-facet.d.ts +0 -9
- package/lib/testing/starknet-facet.d.ts.map +0 -1
- package/lib/testing/starknet-facet.js +0 -53
- package/lib/testing/starknet-facet.js.map +0 -1
- package/src/stark/codegen/codegen.ts +0 -125
- package/src/stark/codegen/index.ts +0 -1
- package/src/stark/codegen/run.ts +0 -10
- package/src/stark/codegen/utils.ts +0 -3
- package/src/stark/context.ts +0 -78
- package/src/stark/contract.ts +0 -55
- package/src/stark/event.ts +0 -7
- package/src/stark/index.ts +0 -9
- package/src/stark/starknet-plugin.ts +0 -111
- package/src/stark/starknet-processor.ts +0 -164
- package/src/stark/types.ts +0 -11
- package/src/testing/starknet-facet.ts +0 -62
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { errorString, GLOBAL_CONFIG, mergeProcessResults, Plugin, PluginManager, USER_PROCESSOR } from '@sentio/runtime';
|
|
2
|
-
import { ContractConfig, HandlerType } from '@sentio/protos';
|
|
3
|
-
import { ServerError, Status } from 'nice-grpc';
|
|
4
|
-
import { HandlerRegister } from '../core/handler-register.js';
|
|
5
|
-
import { StarknetProcessorState } from './starknet-processor.js';
|
|
6
|
-
import { hash } from 'starknet';
|
|
7
|
-
export class StarknetPlugin extends Plugin {
|
|
8
|
-
name = 'StarknetPlugin';
|
|
9
|
-
handlerRegister = new HandlerRegister();
|
|
10
|
-
async init(config) {
|
|
11
|
-
for (const solanaProcessor of StarknetProcessorState.INSTANCE.getValues()) {
|
|
12
|
-
const chainId = solanaProcessor.config.chainId;
|
|
13
|
-
config.chainIds.push(chainId);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
async configure(config, forChainId) {
|
|
17
|
-
this.handlerRegister.clear(forChainId);
|
|
18
|
-
for (const processor of StarknetProcessorState.INSTANCE.getValues()) {
|
|
19
|
-
const chainId = processor.config.chainId;
|
|
20
|
-
if (forChainId !== undefined && forChainId !== chainId.toString()) {
|
|
21
|
-
continue;
|
|
22
|
-
}
|
|
23
|
-
await processor.configure();
|
|
24
|
-
const contractConfig = ContractConfig.fromPartial({
|
|
25
|
-
processorType: USER_PROCESSOR,
|
|
26
|
-
contract: {
|
|
27
|
-
name: processor.config.name,
|
|
28
|
-
chainId: processor.config.chainId.toString(),
|
|
29
|
-
address: processor.config.address || '*',
|
|
30
|
-
abi: ''
|
|
31
|
-
},
|
|
32
|
-
startBlock: processor.config.startBlock,
|
|
33
|
-
endBlock: processor.config.endBlock
|
|
34
|
-
});
|
|
35
|
-
for (const callHandler of processor.callHandlers) {
|
|
36
|
-
const handlerId = this.handlerRegister.register(callHandler.handler, chainId);
|
|
37
|
-
if (callHandler.eventFilter) {
|
|
38
|
-
contractConfig.starknetEventConfigs.push({
|
|
39
|
-
filters: callHandler.eventFilter.map((e) => ({
|
|
40
|
-
address: processor.config.address,
|
|
41
|
-
keys: [hash.getSelectorFromName(e)]
|
|
42
|
-
})),
|
|
43
|
-
handlerId,
|
|
44
|
-
handlerName: callHandler.handlerName
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
// Finish up a contract
|
|
49
|
-
config.contractConfigs.push(contractConfig);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
supportedHandlers = [HandlerType.STARKNET_EVENT];
|
|
53
|
-
processBinding(request) {
|
|
54
|
-
switch (request.handlerType) {
|
|
55
|
-
case HandlerType.STARKNET_EVENT:
|
|
56
|
-
return this.processEvent(request);
|
|
57
|
-
default:
|
|
58
|
-
throw new ServerError(Status.INVALID_ARGUMENT, 'No handle type registered ' + request.handlerType);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
async start(request) { }
|
|
62
|
-
async processEvent(binding) {
|
|
63
|
-
if (!binding.data?.starknetEvents?.result) {
|
|
64
|
-
throw new ServerError(Status.INVALID_ARGUMENT, "starknetEvents can't be null");
|
|
65
|
-
}
|
|
66
|
-
const promises = [];
|
|
67
|
-
const result = binding.data?.starknetEvents?.result;
|
|
68
|
-
for (const handlerId of binding.handlerIds) {
|
|
69
|
-
const promise = this.handlerRegister
|
|
70
|
-
.getHandlerById(binding.chainId, handlerId)(binding.data?.starknetEvents)
|
|
71
|
-
.catch((e) => {
|
|
72
|
-
throw new ServerError(Status.INTERNAL, 'error processing transaction: ' + JSON.stringify(result) + '\n' + errorString(e));
|
|
73
|
-
});
|
|
74
|
-
if (GLOBAL_CONFIG.execution.sequential) {
|
|
75
|
-
await promise;
|
|
76
|
-
}
|
|
77
|
-
promises.push(promise);
|
|
78
|
-
}
|
|
79
|
-
return mergeProcessResults(await Promise.all(promises));
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
PluginManager.INSTANCE.register(new StarknetPlugin());
|
|
83
|
-
//# sourceMappingURL=starknet-plugin.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"starknet-plugin.js","sourceRoot":"","sources":["../../src/stark/starknet-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,EAEd,WAAW,EAKZ,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAE/B,MAAM,OAAO,cAAe,SAAQ,MAAM;IACxC,IAAI,GAAW,gBAAgB,CAAA;IAC/B,eAAe,GAAG,IAAI,eAAe,EAAE,CAAA;IAEvC,KAAK,CAAC,IAAI,CAAC,MAAoB;QAC7B,KAAK,MAAM,eAAe,IAAI,sBAAsB,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC;YAC1E,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAA;YAC9C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC/B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAA6B,EAAE,UAAmB;QAChE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,UAAiB,CAAC,CAAA;QAE7C,KAAK,MAAM,SAAS,IAAI,sBAAsB,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC;YACpE,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAA;YACxC,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;gBAClE,SAAQ;YACV,CAAC;YACD,MAAM,SAAS,CAAC,SAAS,EAAE,CAAA;YAC3B,MAAM,cAAc,GAAG,cAAc,CAAC,WAAW,CAAC;gBAChD,aAAa,EAAE,cAAc;gBAC7B,QAAQ,EAAE;oBACR,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI;oBAC3B,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE;oBAC5C,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,OAAO,IAAI,GAAG;oBACxC,GAAG,EAAE,EAAE;iBACR;gBACD,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU;gBACvC,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,QAAQ;aACpC,CAAC,CAAA;YACF,KAAK,MAAM,WAAW,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;gBACjD,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;gBAE7E,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;oBAC5B,cAAc,CAAC,oBAAoB,CAAC,IAAI,CAAC;wBACvC,OAAO,EAAE,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;4BAC3C,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,OAAO;4BACjC,IAAI,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;yBACpC,CAAC,CAAC;wBACH,SAAS;wBACT,WAAW,EAAE,WAAW,CAAC,WAAW;qBACrC,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;YAED,uBAAuB;YACvB,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAC7C,CAAC;IACH,CAAC;IAED,iBAAiB,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,CAAA;IAEhD,cAAc,CAAC,OAAoB;QACjC,QAAQ,OAAO,CAAC,WAAW,EAAE,CAAC;YAC5B,KAAK,WAAW,CAAC,cAAc;gBAC7B,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;YACnC;gBACE,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,gBAAgB,EAAE,4BAA4B,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;QACtG,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAAqB,IAAG,CAAC;IAErC,KAAK,CAAC,YAAY,CAAC,OAAoB;QACrC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;YAC1C,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,gBAAgB,EAAE,8BAA8B,CAAC,CAAA;QAChF,CAAC;QAED,MAAM,QAAQ,GAA6B,EAAE,CAAA;QAE7C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,CAAA;QAEnD,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe;iBACjC,cAAc,CACb,OAAO,CAAC,OAAO,EACf,SAAS,CACV,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC;iBAC9B,KAAK,CAAC,CAAC,CAAM,EAAE,EAAE;gBAChB,MAAM,IAAI,WAAW,CACnB,MAAM,CAAC,QAAQ,EACf,gCAAgC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAClF,CAAA;YACH,CAAC,CAAC,CAAA;YACJ,IAAI,aAAa,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;gBACvC,MAAM,OAAO,CAAA;YACf,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACxB,CAAC;QACD,OAAO,mBAAmB,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAA;IACzD,CAAC;CACF;AAED,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,cAAc,EAAE,CAAC,CAAA"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { Data_StarknetEvent, ProcessResult } from '@sentio/protos';
|
|
2
|
-
import { ParsedEvent } from 'starknet';
|
|
3
|
-
import { StarknetContext } from './context.js';
|
|
4
|
-
import { StarknetEvent } from './event.js';
|
|
5
|
-
import { ListStateStorage } from '@sentio/runtime';
|
|
6
|
-
import { StarknetProcessorConfig } from './types.js';
|
|
7
|
-
import { StarknetContractView } from './contract.js';
|
|
8
|
-
import { HandlerOptions } from '../core/handler-options.js';
|
|
9
|
-
export declare class StarknetProcessor {
|
|
10
|
-
readonly config: StarknetProcessorConfig;
|
|
11
|
-
callHandlers: CallHandler<Data_StarknetEvent>[];
|
|
12
|
-
private provider;
|
|
13
|
-
static bind(config: StarknetProcessorConfig): StarknetProcessor;
|
|
14
|
-
classHash: string;
|
|
15
|
-
constructor(config: StarknetProcessorConfig);
|
|
16
|
-
configure(): Promise<void>;
|
|
17
|
-
onEvent(event: string | string[], handler: (events: StarknetEvent<ParsedEvent>, ctx: StarknetContext<StarknetContractView>) => void | Promise<void>, handlerOptions?: HandlerOptions<object, StarknetEvent<ParsedEvent>>): this;
|
|
18
|
-
}
|
|
19
|
-
export type CallHandler<T> = {
|
|
20
|
-
handlerName: string;
|
|
21
|
-
handler: (call: T) => Promise<ProcessResult>;
|
|
22
|
-
eventFilter?: string[];
|
|
23
|
-
partitionHandler?: (call: T) => Promise<string | undefined>;
|
|
24
|
-
};
|
|
25
|
-
export declare class StarknetProcessorState extends ListStateStorage<StarknetProcessor> {
|
|
26
|
-
static INSTANCE: StarknetProcessorState;
|
|
27
|
-
}
|
|
28
|
-
export declare abstract class AbstractStarknetProcessor {
|
|
29
|
-
readonly abi: any;
|
|
30
|
-
readonly config: StarknetProcessorConfig;
|
|
31
|
-
private readonly processor;
|
|
32
|
-
protected constructor(abi: any, config: StarknetProcessorConfig);
|
|
33
|
-
onEvent<T, C>(eventName: string, structName: string, handler: (event: StarknetEvent<T>, ctx: StarknetContext<C>) => Promise<void>): this;
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=starknet-processor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"starknet-processor.d.ts","sourceRoot":"","sources":["../../src/stark/starknet-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAElE,OAAO,EAAoB,WAAW,EAAe,MAAM,UAAU,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAuB,MAAM,iBAAiB,CAAA;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAE3D,qBAAa,iBAAiB;IAahB,QAAQ,CAAC,MAAM,EAAE,uBAAuB;IAZpD,YAAY,EAAE,WAAW,CAAC,kBAAkB,CAAC,EAAE,CAAK;IAEpD,OAAO,CAAC,QAAQ,CAAa;IAE7B,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,uBAAuB,GAAG,iBAAiB;IAM/D,SAAS,EAAE,MAAM,CAAA;gBAEI,MAAM,EAAE,uBAAuB;IAI9C,SAAS;IAeR,OAAO,CACZ,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EACxB,OAAO,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,eAAe,CAAC,oBAAoB,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EACjH,cAAc,CAAC,EAAE,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;CAwEtE;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;IAC5C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;CAC5D,CAAA;AAWD,qBAAa,sBAAuB,SAAQ,gBAAgB,CAAC,iBAAiB,CAAC;IAC7E,MAAM,CAAC,QAAQ,yBAA+B;CAC/C;AAED,8BAAsB,yBAAyB;IAG3C,QAAQ,CAAC,GAAG,EAAE,GAAG;IACjB,QAAQ,CAAC,MAAM,EAAE,uBAAuB;IAH1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAC7C,SAAS,aACE,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,uBAAuB;IAO1C,OAAO,CAAC,CAAC,EAAE,CAAC,EACV,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC;CAS/E"}
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import { ProcessResult } from '@sentio/protos';
|
|
2
|
-
import { StarknetChainId } from '@sentio/chain';
|
|
3
|
-
import { CallData, events, RpcProvider } from 'starknet';
|
|
4
|
-
import { StarknetContext } from './context.js';
|
|
5
|
-
import { StarknetEvent } from './event.js';
|
|
6
|
-
import { ListStateStorage, mergeProcessResults } from '@sentio/runtime';
|
|
7
|
-
import { getHandlerName, proxyProcessor } from '../utils/metrics.js';
|
|
8
|
-
export class StarknetProcessor {
|
|
9
|
-
config;
|
|
10
|
-
callHandlers = [];
|
|
11
|
-
provider;
|
|
12
|
-
static bind(config) {
|
|
13
|
-
const processor = new StarknetProcessor(config);
|
|
14
|
-
StarknetProcessorState.INSTANCE.addValue(processor);
|
|
15
|
-
return processor;
|
|
16
|
-
}
|
|
17
|
-
classHash;
|
|
18
|
-
constructor(config) {
|
|
19
|
-
this.config = config;
|
|
20
|
-
return proxyProcessor(this);
|
|
21
|
-
}
|
|
22
|
-
async configure() {
|
|
23
|
-
this.provider = new RpcProvider({
|
|
24
|
-
nodeUrl: getRpcEndpoint(this.config.chainId)
|
|
25
|
-
});
|
|
26
|
-
const classHash = await this.provider.getClassHashAt(this.config.address);
|
|
27
|
-
if (!classHash) {
|
|
28
|
-
throw new Error("can't find the class hash defined at " + this.config.address);
|
|
29
|
-
}
|
|
30
|
-
this.classHash = classHash;
|
|
31
|
-
if (!this.config.abi) {
|
|
32
|
-
const clazz = await this.provider.getClass(classHash, 'latest');
|
|
33
|
-
this.config.abi = clazz.abi;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
onEvent(event, handler, handlerOptions) {
|
|
37
|
-
const eventFilter = Array.isArray(event) ? event : [event];
|
|
38
|
-
if (!this.config.abi) {
|
|
39
|
-
throw new Error('abi not found');
|
|
40
|
-
}
|
|
41
|
-
const abi = this.config.abi;
|
|
42
|
-
const callHandler = {
|
|
43
|
-
handlerName: getHandlerName(),
|
|
44
|
-
handler: async (call) => {
|
|
45
|
-
try {
|
|
46
|
-
const eventData = [call.result];
|
|
47
|
-
const abiEvents = events.getAbiEvents(abi);
|
|
48
|
-
const abiStructs = CallData.getAbiStruct(abi);
|
|
49
|
-
const abiEnums = CallData.getAbiEnum(abi);
|
|
50
|
-
const parsedEvents = events.parseEvents(eventData, abiEvents, abiStructs, abiEnums);
|
|
51
|
-
const results = [];
|
|
52
|
-
const { block_hash, block_number, transaction_hash, from_address } = call.result;
|
|
53
|
-
for (let i = 0; i < parsedEvents.length; i++) {
|
|
54
|
-
const ctx = new StarknetContext(this.config, this.provider, block_number, block_hash, transaction_hash, i, this.classHash);
|
|
55
|
-
const e = new StarknetEvent(from_address, transaction_hash, parsedEvents[i]);
|
|
56
|
-
try {
|
|
57
|
-
await handler(e, ctx);
|
|
58
|
-
}
|
|
59
|
-
catch (e) {
|
|
60
|
-
console.error(e);
|
|
61
|
-
}
|
|
62
|
-
results.push(ctx.stopAndGetResult());
|
|
63
|
-
}
|
|
64
|
-
return mergeProcessResults(results);
|
|
65
|
-
}
|
|
66
|
-
catch (e) {
|
|
67
|
-
console.error(e);
|
|
68
|
-
return ProcessResult.fromPartial({});
|
|
69
|
-
}
|
|
70
|
-
},
|
|
71
|
-
eventFilter,
|
|
72
|
-
partitionHandler: async (call) => {
|
|
73
|
-
const p = handlerOptions?.partitionKey;
|
|
74
|
-
if (!p)
|
|
75
|
-
return undefined;
|
|
76
|
-
if (typeof p === 'function') {
|
|
77
|
-
try {
|
|
78
|
-
const eventData = [call.result];
|
|
79
|
-
const abiEvents = events.getAbiEvents(abi);
|
|
80
|
-
const abiStructs = CallData.getAbiStruct(abi);
|
|
81
|
-
const abiEnums = CallData.getAbiEnum(abi);
|
|
82
|
-
const parsedEvents = events.parseEvents(eventData, abiEvents, abiStructs, abiEnums);
|
|
83
|
-
if (parsedEvents.length > 0) {
|
|
84
|
-
const { from_address, transaction_hash } = call.result;
|
|
85
|
-
const e = new StarknetEvent(from_address, transaction_hash, parsedEvents[0]);
|
|
86
|
-
return p(e);
|
|
87
|
-
}
|
|
88
|
-
return undefined;
|
|
89
|
-
}
|
|
90
|
-
catch (e) {
|
|
91
|
-
console.error(e);
|
|
92
|
-
return undefined;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
return p;
|
|
96
|
-
}
|
|
97
|
-
};
|
|
98
|
-
this.callHandlers.push(callHandler);
|
|
99
|
-
return this;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
function getRpcEndpoint(chainId) {
|
|
103
|
-
switch (chainId) {
|
|
104
|
-
case StarknetChainId.STARKNET_MAINNET:
|
|
105
|
-
return 'https://starknet-mainnet.g.alchemy.com/starknet/version/rpc/v0_8/8sD5yitBslIYCPFzSq_Q1ObJHqPlZxFw';
|
|
106
|
-
default:
|
|
107
|
-
return 'https://starknet-sepolia.g.alchemy.com/starknet/version/rpc/v0_8/8sD5yitBslIYCPFzSq_Q1ObJHqPlZxFw';
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
export class StarknetProcessorState extends ListStateStorage {
|
|
111
|
-
static INSTANCE = new StarknetProcessorState();
|
|
112
|
-
}
|
|
113
|
-
export class AbstractStarknetProcessor {
|
|
114
|
-
abi;
|
|
115
|
-
config;
|
|
116
|
-
processor;
|
|
117
|
-
constructor(abi, config) {
|
|
118
|
-
this.abi = abi;
|
|
119
|
-
this.config = config;
|
|
120
|
-
this.processor = new StarknetProcessor(config);
|
|
121
|
-
StarknetProcessorState.INSTANCE.addValue(this.processor);
|
|
122
|
-
return proxyProcessor(this);
|
|
123
|
-
}
|
|
124
|
-
onEvent(eventName, structName, handler) {
|
|
125
|
-
this.processor.onEvent(eventName, async (events, ctx) => {
|
|
126
|
-
const eventData = events.data[structName];
|
|
127
|
-
const e = new StarknetEvent(events.caller, events.transactionHash, eventData);
|
|
128
|
-
await handler(e, ctx);
|
|
129
|
-
});
|
|
130
|
-
return this;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
//# sourceMappingURL=starknet-processor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"starknet-processor.js","sourceRoot":"","sources":["../../src/stark/starknet-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAe,WAAW,EAAE,MAAM,UAAU,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAGvE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAGpE,MAAM,OAAO,iBAAiB;IAaP;IAZrB,YAAY,GAAsC,EAAE,CAAA;IAE5C,QAAQ,CAAa;IAE7B,MAAM,CAAC,IAAI,CAAC,MAA+B;QACzC,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAA;QAC/C,sBAAsB,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;QACnD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,SAAS,CAAQ;IAEjB,YAAqB,MAA+B;QAA/B,WAAM,GAAN,MAAM,CAAyB;QAClD,OAAO,cAAc,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,SAAS;QACb,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC;YAC9B,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;SAC7C,CAAC,CAAA;QACF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QACzE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,uCAAuC,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAChF,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;YAC/D,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAA;QAC7B,CAAC;IACH,CAAC;IAEM,OAAO,CACZ,KAAwB,EACxB,OAAiH,EACjH,cAAmE;QAEnE,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;QAC1D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;QAClC,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAA;QAC3B,MAAM,WAAW,GAAG;YAClB,WAAW,EAAE,cAAc,EAAE;YAC7B,OAAO,EAAE,KAAK,EAAE,IAAwB,EAAE,EAAE;gBAC1C,IAAI,CAAC;oBACH,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,MAAM,CAAU,CAAA;oBACxC,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;oBAE1C,MAAM,UAAU,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;oBAC7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;oBAEzC,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAA;oBACnF,MAAM,OAAO,GAAoB,EAAE,CAAA;oBACnC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,MAAO,CAAA;oBACjF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC7C,MAAM,GAAG,GAAG,IAAI,eAAe,CAC7B,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,QAAQ,EACb,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,CAAC,EACD,IAAI,CAAC,SAAS,CACf,CAAA;wBACD,MAAM,CAAC,GAAG,IAAI,aAAa,CAAC,YAAY,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;wBAC5E,IAAI,CAAC;4BACH,MAAM,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;wBACvB,CAAC;wBAAC,OAAO,CAAC,EAAE,CAAC;4BACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;wBAClB,CAAC;wBACD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAA;oBACtC,CAAC;oBACD,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAA;gBACrC,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;oBAChB,OAAO,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;gBACtC,CAAC;YACH,CAAC;YACD,WAAW;YACX,gBAAgB,EAAE,KAAK,EAAE,IAAwB,EAA+B,EAAE;gBAChF,MAAM,CAAC,GAAG,cAAc,EAAE,YAAY,CAAA;gBACtC,IAAI,CAAC,CAAC;oBAAE,OAAO,SAAS,CAAA;gBACxB,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE,CAAC;oBAC5B,IAAI,CAAC;wBACH,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,MAAM,CAAU,CAAA;wBACxC,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;wBAC1C,MAAM,UAAU,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;wBAC7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;wBACzC,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAA;wBACnF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BAC5B,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,MAAO,CAAA;4BACvD,MAAM,CAAC,GAAG,IAAI,aAAa,CAAC,YAAY,EAAE,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;4BAC5E,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;wBACb,CAAC;wBACD,OAAO,SAAS,CAAA;oBAClB,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;wBAChB,OAAO,SAAS,CAAA;oBAClB,CAAC;gBACH,CAAC;gBACD,OAAO,CAAC,CAAA;YACV,CAAC;SACF,CAAA;QACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QACnC,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AASD,SAAS,cAAc,CAAC,OAAiC;IACvD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,eAAe,CAAC,gBAAgB;YACnC,OAAO,mGAAmG,CAAA;QAC5G;YACE,OAAO,mGAAmG,CAAA;IAC9G,CAAC;AACH,CAAC;AAED,MAAM,OAAO,sBAAuB,SAAQ,gBAAmC;IAC7E,MAAM,CAAC,QAAQ,GAAG,IAAI,sBAAsB,EAAE,CAAA;;AAGhD,MAAM,OAAgB,yBAAyB;IAGlC;IACA;IAHM,SAAS,CAAmB;IAC7C,YACW,GAAQ,EACR,MAA+B;QAD/B,QAAG,GAAH,GAAG,CAAK;QACR,WAAM,GAAN,MAAM,CAAyB;QAExC,IAAI,CAAC,SAAS,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAA;QAC9C,sBAAsB,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACxD,OAAO,cAAc,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;IAED,OAAO,CACL,SAAiB,EACjB,UAAkB,EAClB,OAA4E;QAE5E,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;YACtD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAM,CAAA;YAC9C,MAAM,CAAC,GAAG,IAAI,aAAa,CAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,EAAE,SAAS,CAAC,CAAA;YAChF,MAAM,OAAO,CAAC,CAAC,EAAE,GAAyB,CAAC,CAAA;QAC7C,CAAC,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
|
package/lib/stark/types.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { StarknetChainId } from '@sentio/chain';
|
|
2
|
-
import { Abi } from 'starknet';
|
|
3
|
-
export type StarknetProcessorConfig = {
|
|
4
|
-
address: string;
|
|
5
|
-
name?: string;
|
|
6
|
-
chainId: StarknetChainId | string;
|
|
7
|
-
startBlock?: bigint;
|
|
8
|
-
endBlock?: bigint;
|
|
9
|
-
abi?: Abi;
|
|
10
|
-
};
|
|
11
|
-
//# sourceMappingURL=types.d.ts.map
|
package/lib/stark/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/stark/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAE9B,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,eAAe,GAAG,MAAM,CAAA;IACjC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,GAAG,CAAA;CACV,CAAA"}
|
package/lib/stark/types.js
DELETED
package/lib/stark/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/stark/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { TestProcessorServer } from './test-processor-server.js';
|
|
2
|
-
import { StarknetChainId } from '@sentio/chain';
|
|
3
|
-
export declare class StarknetFacet {
|
|
4
|
-
server: TestProcessorServer;
|
|
5
|
-
constructor(server: TestProcessorServer);
|
|
6
|
-
testOnEvents(events: any, network?: StarknetChainId): Promise<import("@sentio/protos").ProcessBindingResponse>;
|
|
7
|
-
private buildBinding;
|
|
8
|
-
}
|
|
9
|
-
//# sourceMappingURL=starknet-facet.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"starknet-facet.d.ts","sourceRoot":"","sources":["../../src/testing/starknet-facet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAE/C,qBAAa,aAAa;IACxB,MAAM,EAAE,mBAAmB,CAAA;gBAEf,MAAM,EAAE,mBAAmB;IAIvC,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,GAAE,eAAkD;IAWrF,OAAO,CAAC,YAAY;CAuCrB"}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { HandlerType } from '@sentio/protos';
|
|
2
|
-
import { StarknetChainId } from '@sentio/chain';
|
|
3
|
-
export class StarknetFacet {
|
|
4
|
-
server;
|
|
5
|
-
constructor(server) {
|
|
6
|
-
this.server = server;
|
|
7
|
-
}
|
|
8
|
-
testOnEvents(events, network = StarknetChainId.STARKNET_SEPOLIA) {
|
|
9
|
-
const bindings = this.buildBinding(events, network);
|
|
10
|
-
if (!bindings) {
|
|
11
|
-
throw Error('Invalid test : ' + JSON.stringify(events));
|
|
12
|
-
}
|
|
13
|
-
return this.server.processBindings({
|
|
14
|
-
bindings
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
buildBinding(events, network) {
|
|
18
|
-
const res = [];
|
|
19
|
-
const data = Array.isArray(events) ? events : [events];
|
|
20
|
-
for (const event of data) {
|
|
21
|
-
for (const config of this.server.contractConfigs) {
|
|
22
|
-
if (config.contract?.chainId !== network) {
|
|
23
|
-
continue;
|
|
24
|
-
}
|
|
25
|
-
for (const logConfig of config.starknetEventConfigs) {
|
|
26
|
-
const binding = {
|
|
27
|
-
data: {
|
|
28
|
-
starknetEvents: {
|
|
29
|
-
result: event,
|
|
30
|
-
timestamp: new Date()
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
handlerIds: [logConfig.handlerId],
|
|
34
|
-
handlerType: HandlerType.STARKNET_EVENT,
|
|
35
|
-
chainId: config.contract.chainId
|
|
36
|
-
};
|
|
37
|
-
const logFilters = logConfig.filters;
|
|
38
|
-
const keys = event.keys;
|
|
39
|
-
for (const key of keys) {
|
|
40
|
-
for (const logFilter of logFilters) {
|
|
41
|
-
if (logFilter.keys.includes(key)) {
|
|
42
|
-
res.push(binding);
|
|
43
|
-
return res;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
return res;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
//# sourceMappingURL=starknet-facet.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"starknet-facet.js","sourceRoot":"","sources":["../../src/testing/starknet-facet.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAE/C,MAAM,OAAO,aAAa;IACxB,MAAM,CAAqB;IAE3B,YAAY,MAA2B;QACrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;IAED,YAAY,CAAC,MAAW,EAAE,UAA2B,eAAe,CAAC,gBAAgB;QACnF,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;QACzD,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;YACjC,QAAQ;SACT,CAAC,CAAA;IACJ,CAAC;IAEO,YAAY,CAAC,MAAW,EAAE,OAAwB;QACxD,MAAM,GAAG,GAAkB,EAAE,CAAA;QAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QACtD,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;YACzB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;gBACjD,IAAI,MAAM,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO,EAAE,CAAC;oBACzC,SAAQ;gBACV,CAAC;gBAED,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;oBACpD,MAAM,OAAO,GAAG;wBACd,IAAI,EAAE;4BACJ,cAAc,EAAE;gCACd,MAAM,EAAE,KAAK;gCACb,SAAS,EAAE,IAAI,IAAI,EAAE;6BACtB;yBACF;wBACD,UAAU,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC;wBACjC,WAAW,EAAE,WAAW,CAAC,cAAc;wBACvC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;qBACjC,CAAA;oBAED,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAA;oBACpC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAgB,CAAA;oBAEnC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;wBACvB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;4BACnC,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gCACjC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gCACjB,OAAO,GAAG,CAAA;4BACZ,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,GAAG,CAAA;IACZ,CAAC;CACF"}
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import fs, { readFileSync, writeFileSync } from 'fs'
|
|
2
|
-
import chalk from 'chalk'
|
|
3
|
-
import path from 'path'
|
|
4
|
-
import { mkdirpSync } from 'mkdirp'
|
|
5
|
-
import { events } from 'starknet'
|
|
6
|
-
import { StarknetChainId } from '@sentio/chain'
|
|
7
|
-
import { Abi } from '@sentio/abi-wan-kanabi'
|
|
8
|
-
import { recursiveCodegen } from '../../core/codegen.js'
|
|
9
|
-
|
|
10
|
-
export async function codegen(abisDir: string, outDir: string) {
|
|
11
|
-
if (!fs.existsSync(abisDir)) {
|
|
12
|
-
return
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const numFiles = await recursiveCodegen(abisDir, outDir, codegenInternal)
|
|
16
|
-
console.log(chalk.green(`Generated ${numFiles} files for Starknet`))
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
async function codegenInternal(abisDir: string, outDir: string): Promise<number> {
|
|
20
|
-
const allFiles = fs.readdirSync(abisDir, { recursive: true }) as string[]
|
|
21
|
-
|
|
22
|
-
const abis: Record<string, any> = {}
|
|
23
|
-
let fileCount = 0
|
|
24
|
-
|
|
25
|
-
function guessNameFromAbi(abi: any, address: string) {
|
|
26
|
-
if (Array.isArray(abi)) {
|
|
27
|
-
const arr = abi as any[]
|
|
28
|
-
for (const a of arr) {
|
|
29
|
-
if (a.type == 'impl') {
|
|
30
|
-
return a.name.replace('Impl', '')
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
return 'Contract' + address.replace('0x', '').slice(0, 6)
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
for (const f of allFiles) {
|
|
38
|
-
if (f.toLowerCase().endsWith('.json')) {
|
|
39
|
-
let name = f.replace('.json', '')
|
|
40
|
-
const content = readFileSync(path.join(abisDir, f))
|
|
41
|
-
const abi = JSON.parse(content.toString())
|
|
42
|
-
let chain = StarknetChainId.STARKNET_MAINNET
|
|
43
|
-
if (name.startsWith('sepolia/')) {
|
|
44
|
-
chain = StarknetChainId.STARKNET_SEPOLIA
|
|
45
|
-
name = name.slice('sepolia/'.length)
|
|
46
|
-
}
|
|
47
|
-
const parts = name.split('-')
|
|
48
|
-
const address = parts.pop() as string
|
|
49
|
-
if (parts.length > 0) {
|
|
50
|
-
name = parts.join('')
|
|
51
|
-
} else {
|
|
52
|
-
name = guessNameFromAbi(abi, address)
|
|
53
|
-
}
|
|
54
|
-
abis[name] = {
|
|
55
|
-
name,
|
|
56
|
-
address,
|
|
57
|
-
chain,
|
|
58
|
-
abi
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
const tABIContents: string[] = []
|
|
64
|
-
|
|
65
|
-
for (const [name, abi] of Object.entries(abis)) {
|
|
66
|
-
tABIContents.push(`export const ABI_${name} = ${JSON.stringify(abi.abi, null, 2)} as const;`)
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
mkdirpSync(outDir)
|
|
70
|
-
writeFileSync(path.join(outDir, 'tabi.ts'), tABIContents.join('\n'))
|
|
71
|
-
fileCount++
|
|
72
|
-
for (const { name, address, chain, abi: jsonAbi } of Object.values(abis)) {
|
|
73
|
-
const content: string[] = []
|
|
74
|
-
content.push(
|
|
75
|
-
`import { StarknetProcessorConfig, StarknetEvent, AbstractStarknetProcessor, StarknetContext } from '@sentio/sdk/starknet'`
|
|
76
|
-
)
|
|
77
|
-
content.push(`import { EventToPrimitiveType, TypedContractView, Abi } from "@sentio/abi-wan-kanabi"`)
|
|
78
|
-
content.push(`import { ABI_${name} } from "./tabi.js"\n`)
|
|
79
|
-
content.push(`export type ${name} = TypedContractView<typeof ABI_${name}>`)
|
|
80
|
-
const abi = jsonAbi as Abi
|
|
81
|
-
const abiEventsEnums = abi.filter((obj) => obj.type == 'event' && obj.kind === 'enum')
|
|
82
|
-
const eventMap: Record<string, string> = {}
|
|
83
|
-
for (const ev of Object.values(events.getAbiEvents(abi))) {
|
|
84
|
-
const fullName = ev.name as string
|
|
85
|
-
let eventName = fullName
|
|
86
|
-
for (const e of abiEventsEnums) {
|
|
87
|
-
for (const v of e.variants) {
|
|
88
|
-
if (v.type === fullName) {
|
|
89
|
-
eventName = v.name
|
|
90
|
-
break
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
eventMap[eventName] = fullName
|
|
96
|
-
content.push(`export type ${eventName} = EventToPrimitiveType<typeof ABI_${name}, "${fullName}">`)
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
content.push(`\nexport class ${name}Processor extends AbstractStarknetProcessor {
|
|
100
|
-
constructor(abi: Abi, config: Partial<StarknetProcessorConfig>) {
|
|
101
|
-
super(abi, {
|
|
102
|
-
name: "${name}",
|
|
103
|
-
address: "${address}",
|
|
104
|
-
chainId: "${chain}",
|
|
105
|
-
abi,
|
|
106
|
-
...config
|
|
107
|
-
})
|
|
108
|
-
}`)
|
|
109
|
-
content.push(`\tstatic bind(config: Partial<StarknetProcessorConfig>) {
|
|
110
|
-
return new ${name}Processor(ABI_${name}, config)
|
|
111
|
-
}`)
|
|
112
|
-
|
|
113
|
-
for (const [eventName, structName] of Object.entries(eventMap)) {
|
|
114
|
-
content.push(`\ton${eventName}(handler: (event: StarknetEvent<${eventName}>, ctx: StarknetContext<${name}>) => Promise<void>) {
|
|
115
|
-
return this.onEvent<${eventName}, ${name}>("${eventName}", "${structName}", handler)
|
|
116
|
-
}`)
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
content.push(`}`)
|
|
120
|
-
writeFileSync(path.join(outDir, `${name}-processor.ts`), content.join('\n'))
|
|
121
|
-
fileCount++
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
return fileCount
|
|
125
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './codegen.js'
|
package/src/stark/codegen/run.ts
DELETED
package/src/stark/context.ts
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { ChainId } from '@sentio/chain'
|
|
2
|
-
import { RecordMetaData } from '@sentio/protos'
|
|
3
|
-
import { BaseContext, Labels, normalizeLabels } from '../core/index.js'
|
|
4
|
-
import { Provider, RpcProvider } from 'starknet'
|
|
5
|
-
import { StarknetProcessorConfig } from './types.js'
|
|
6
|
-
import { Abi } from '@sentio/abi-wan-kanabi'
|
|
7
|
-
import { StarknetContractView } from './contract.js'
|
|
8
|
-
|
|
9
|
-
class AbstractContext extends BaseContext {
|
|
10
|
-
constructor(
|
|
11
|
-
readonly provider: Provider,
|
|
12
|
-
readonly contractAddress: string,
|
|
13
|
-
readonly chainId: ChainId | string,
|
|
14
|
-
readonly blockNumber: number,
|
|
15
|
-
readonly blockHash: string,
|
|
16
|
-
readonly transactionHash: string,
|
|
17
|
-
readonly logIndex: number = -1,
|
|
18
|
-
readonly contractName: string = '',
|
|
19
|
-
readonly abi?: Abi
|
|
20
|
-
) {
|
|
21
|
-
super({})
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
protected getMetaDataInternal(name: string, labels: Labels): RecordMetaData {
|
|
25
|
-
return {
|
|
26
|
-
address: this.contractAddress,
|
|
27
|
-
contractName: '',
|
|
28
|
-
blockNumber: BigInt(this.blockNumber),
|
|
29
|
-
transactionIndex: 0,
|
|
30
|
-
transactionHash: this.transactionHash,
|
|
31
|
-
chainId: this.getChainId(),
|
|
32
|
-
name: name,
|
|
33
|
-
logIndex: this.logIndex,
|
|
34
|
-
labels: normalizeLabels(labels)
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
getChainId(): ChainId {
|
|
39
|
-
return this.chainId as ChainId
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export class StarknetContext<CT> extends AbstractContext {
|
|
44
|
-
private _contract: any
|
|
45
|
-
|
|
46
|
-
constructor(
|
|
47
|
-
config: StarknetProcessorConfig,
|
|
48
|
-
provider: RpcProvider,
|
|
49
|
-
blockNumber: number,
|
|
50
|
-
blockHash: string,
|
|
51
|
-
transaction_hash: string,
|
|
52
|
-
logIndex: number,
|
|
53
|
-
readonly classHash: string
|
|
54
|
-
) {
|
|
55
|
-
super(
|
|
56
|
-
provider,
|
|
57
|
-
config.address,
|
|
58
|
-
config.chainId,
|
|
59
|
-
blockNumber,
|
|
60
|
-
blockHash,
|
|
61
|
-
transaction_hash,
|
|
62
|
-
logIndex,
|
|
63
|
-
config.name ?? classHash.slice(0, 8),
|
|
64
|
-
config.abi
|
|
65
|
-
)
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
getContract(): CT {
|
|
69
|
-
if (!this.abi) {
|
|
70
|
-
throw new Error('abi not found')
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
if (!this._contract) {
|
|
74
|
-
this._contract = new StarknetContractView(this.abi, this.contractAddress, this.provider, this.blockNumber)
|
|
75
|
-
}
|
|
76
|
-
return this._contract as CT
|
|
77
|
-
}
|
|
78
|
-
}
|
package/src/stark/contract.ts
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
ArgsOrCalldata,
|
|
3
|
-
ArgsOrCalldataWithOptions,
|
|
4
|
-
AsyncContractFunction,
|
|
5
|
-
CallOptions,
|
|
6
|
-
Contract,
|
|
7
|
-
Result,
|
|
8
|
-
RpcProvider,
|
|
9
|
-
CallData,
|
|
10
|
-
splitArgsAndOptions
|
|
11
|
-
} from 'starknet'
|
|
12
|
-
import { Abi } from '@sentio/abi-wan-kanabi'
|
|
13
|
-
|
|
14
|
-
export class StarknetContractView {
|
|
15
|
-
private _contract: Contract
|
|
16
|
-
|
|
17
|
-
constructor(
|
|
18
|
-
readonly abi: Abi,
|
|
19
|
-
readonly address: string,
|
|
20
|
-
readonly provider: RpcProvider,
|
|
21
|
-
readonly blockNumber: number
|
|
22
|
-
) {
|
|
23
|
-
this._contract = new Contract(abi, address, provider)
|
|
24
|
-
const callData = new CallData(abi)
|
|
25
|
-
|
|
26
|
-
for (const fn of callData.abi) {
|
|
27
|
-
if (fn.type == 'function' && fn.state_mutability == 'view') {
|
|
28
|
-
const signature = fn.name
|
|
29
|
-
Object.defineProperty(this, signature, {
|
|
30
|
-
enumerable: true,
|
|
31
|
-
writable: false,
|
|
32
|
-
value: buildCall(this, signature)
|
|
33
|
-
})
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
call(method: string, args?: ArgsOrCalldata, callOptions?: CallOptions): Promise<Result> {
|
|
39
|
-
return this._contract.call(method, args, {
|
|
40
|
-
...callOptions,
|
|
41
|
-
blockIdentifier: this.blockNumber
|
|
42
|
-
})
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
function buildCall(contract: StarknetContractView, name: string): AsyncContractFunction {
|
|
47
|
-
return async function (...args: ArgsOrCalldataWithOptions): Promise<any> {
|
|
48
|
-
const params = splitArgsAndOptions(args)
|
|
49
|
-
return contract.call(name, params.args, {
|
|
50
|
-
parseRequest: true,
|
|
51
|
-
parseResponse: true,
|
|
52
|
-
...params.options
|
|
53
|
-
})
|
|
54
|
-
}
|
|
55
|
-
}
|