@sentio/sdk 2.62.2-rc.6 → 2.62.2-rc.8

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.
Files changed (69) hide show
  1. package/lib/stark/codegen/codegen.d.ts +2 -0
  2. package/lib/stark/codegen/codegen.d.ts.map +1 -0
  3. package/lib/stark/codegen/codegen.js +110 -0
  4. package/lib/stark/codegen/codegen.js.map +1 -0
  5. package/lib/stark/codegen/index.d.ts +2 -0
  6. package/lib/stark/codegen/index.d.ts.map +1 -0
  7. package/lib/stark/codegen/index.js +2 -0
  8. package/lib/stark/codegen/index.js.map +1 -0
  9. package/lib/stark/codegen/run.d.ts +2 -0
  10. package/lib/stark/codegen/run.d.ts.map +1 -0
  11. package/lib/stark/codegen/run.js +11 -0
  12. package/lib/stark/codegen/run.js.map +1 -0
  13. package/lib/stark/codegen/utils.d.ts +2 -0
  14. package/lib/stark/codegen/utils.d.ts.map +1 -0
  15. package/lib/stark/codegen/utils.js +4 -0
  16. package/lib/stark/codegen/utils.js.map +1 -0
  17. package/lib/stark/context.d.ts +28 -0
  18. package/lib/stark/context.d.ts.map +1 -0
  19. package/lib/stark/context.js +59 -0
  20. package/lib/stark/context.js.map +1 -0
  21. package/lib/stark/contract.d.ts +12 -0
  22. package/lib/stark/contract.d.ts.map +1 -0
  23. package/lib/stark/contract.js +43 -0
  24. package/lib/stark/contract.js.map +1 -0
  25. package/lib/stark/event.d.ts +7 -0
  26. package/lib/stark/event.d.ts.map +1 -0
  27. package/lib/stark/event.js +11 -0
  28. package/lib/stark/event.js.map +1 -0
  29. package/lib/stark/index.d.ts +7 -0
  30. package/lib/stark/index.d.ts.map +1 -0
  31. package/lib/stark/index.js +7 -0
  32. package/lib/stark/index.js.map +1 -0
  33. package/lib/stark/starknet-plugin.d.ts +15 -0
  34. package/lib/stark/starknet-plugin.d.ts.map +1 -0
  35. package/lib/stark/starknet-plugin.js +87 -0
  36. package/lib/stark/starknet-plugin.js.map +1 -0
  37. package/lib/stark/starknet-processor.d.ts +35 -0
  38. package/lib/stark/starknet-processor.d.ts.map +1 -0
  39. package/lib/stark/starknet-processor.js +133 -0
  40. package/lib/stark/starknet-processor.js.map +1 -0
  41. package/lib/stark/types.d.ts +11 -0
  42. package/lib/stark/types.d.ts.map +1 -0
  43. package/lib/stark/types.js +2 -0
  44. package/lib/stark/types.js.map +1 -0
  45. package/lib/testing/starknet-facet.d.ts +9 -0
  46. package/lib/testing/starknet-facet.d.ts.map +1 -0
  47. package/lib/testing/starknet-facet.js +53 -0
  48. package/lib/testing/starknet-facet.js.map +1 -0
  49. package/lib/testing/test-processor-server.d.ts +2 -0
  50. package/lib/testing/test-processor-server.d.ts.map +1 -1
  51. package/lib/testing/test-processor-server.js +3 -0
  52. package/lib/testing/test-processor-server.js.map +1 -1
  53. package/package.json +11 -7
  54. package/src/stark/codegen/codegen.ts +125 -0
  55. package/src/stark/codegen/index.ts +1 -0
  56. package/src/stark/codegen/run.ts +10 -0
  57. package/src/stark/codegen/utils.ts +3 -0
  58. package/src/stark/context.ts +78 -0
  59. package/src/stark/contract.ts +55 -0
  60. package/src/stark/event.ts +7 -0
  61. package/src/stark/index.ts +9 -0
  62. package/src/stark/starknet-plugin.ts +116 -0
  63. package/src/stark/starknet-processor.ts +164 -0
  64. package/src/stark/types.ts +11 -0
  65. package/src/testing/starknet-facet.ts +62 -0
  66. package/src/testing/test-processor-server.ts +3 -0
  67. package/lib/core/base-context.test.d.ts +0 -2
  68. package/lib/core/base-context.test.d.ts.map +0 -1
  69. package/lib/core/base-context.test.js.map +0 -1
@@ -0,0 +1,133 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"starknet-processor.js","sourceRoot":"","sources":["../../src/stark/starknet-processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/stark/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,53 @@
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
@@ -0,0 +1 @@
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"}
@@ -7,6 +7,7 @@ import { EthFacet } from './eth-facet.js';
7
7
  import { SuiFacet } from './sui-facet.js';
8
8
  import { FuelFacet } from './fuel-facet.js';
9
9
  import { CosmosFacet } from './cosmos-facet.js';
10
+ import { StarknetFacet } from './starknet-facet.js';
10
11
  import { MemoryDatabase } from './memory-database.js';
11
12
  import { IotaFacet } from './iota-facet.js';
12
13
  export declare const TEST_CONTEXT: CallContext;
@@ -23,6 +24,7 @@ export declare class TestProcessorServer implements ProcessorServiceImplementati
23
24
  iota: IotaFacet;
24
25
  fuel: FuelFacet;
25
26
  cosmos: CosmosFacet;
27
+ starknet: StarknetFacet;
26
28
  _db: MemoryDatabase;
27
29
  constructor(loader: () => Promise<any>, httpEndpoints?: Record<string, string>);
28
30
  start(request?: StartRequest, context?: CallContext): Promise<Empty>;
@@ -1 +1 @@
1
- {"version":3,"file":"test-processor-server.d.ts","sourceRoot":"","sources":["../../src/testing/test-processor-server.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,cAAc,EACd,WAAW,EACX,WAAW,EACX,KAAK,EACL,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,8BAA8B,EAC9B,oBAAoB,EACpB,qBAAqB,EACrB,2BAA2B,EAC3B,YAAY,EACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAA4B,oBAAoB,EAAS,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAErG,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAG3C,eAAO,MAAM,YAAY,EAAE,WAA6B,CAAA;AAExD,wBAAgB,SAAS,SAKxB;AAED,qBAAa,mBAAoB,YAAW,8BAA8B;IACxE,OAAO,EAAE,oBAAoB,CAAA;IAC7B,eAAe,EAAE,cAAc,EAAE,CAAA;IACjC,cAAc,EAAE,aAAa,EAAE,CAAA;IAC/B,YAAY,EAAE,YAAY,CAAA;IAE1B,KAAK,EAAE,UAAU,CAAA;IACjB,GAAG,EAAE,QAAQ,CAAA;IACb,MAAM,EAAE,WAAW,CAAA;IACnB,GAAG,EAAE,QAAQ,CAAA;IACb,IAAI,EAAE,SAAS,CAAA;IACf,IAAI,EAAE,SAAS,CAAA;IACf,MAAM,EAAE,WAAW,CAAA;IACnB,GAAG,EAAE,cAAc,CAAA;gBAEP,MAAM,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,EAAE,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAuB5E,KAAK,CAAC,OAAO,GAAE,YAAwC,EAAE,OAAO,cAAe,GAAG,OAAO,CAAC,KAAK,CAAC;IAStG,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,cAAe,GAAG,OAAO,CAAC,KAAK,CAAC;IAI5D,SAAS,CAAC,OAAO,EAAE,oBAAoB,EAAE,OAAO,cAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAIhG,eAAe,CACb,OAAO,EAAE,sBAAsB,EAC/B,OAAO,GAAE,WAA0B,GAClC,OAAO,CAAC,sBAAsB,CAAC;IAMlC,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,WAA0B,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAM1G,qBAAqB,CACnB,QAAQ,EAAE,aAAa,CAAC,oBAAoB,CAAC,EAC7C,OAAO,EAAE,WAAW,GACnB,2BAA2B,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;IAIlE,wBAAwB,CACtB,QAAQ,EAAE,aAAa,CAAC,uBAAuB,CAAC,EAChD,OAAO,EAAE,WAAW,GACnB,2BAA2B,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IAOrE,IAAI,EAAE,mBAEL;IAED,IAAI,KAAK,sCAER;CACF"}
1
+ {"version":3,"file":"test-processor-server.d.ts","sourceRoot":"","sources":["../../src/testing/test-processor-server.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,cAAc,EACd,WAAW,EACX,WAAW,EACX,KAAK,EACL,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,8BAA8B,EAC9B,oBAAoB,EACpB,qBAAqB,EACrB,2BAA2B,EAC3B,YAAY,EACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAA4B,oBAAoB,EAAS,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAErG,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAG3C,eAAO,MAAM,YAAY,EAAE,WAA6B,CAAA;AAExD,wBAAgB,SAAS,SAKxB;AAED,qBAAa,mBAAoB,YAAW,8BAA8B;IACxE,OAAO,EAAE,oBAAoB,CAAA;IAC7B,eAAe,EAAE,cAAc,EAAE,CAAA;IACjC,cAAc,EAAE,aAAa,EAAE,CAAA;IAC/B,YAAY,EAAE,YAAY,CAAA;IAE1B,KAAK,EAAE,UAAU,CAAA;IACjB,GAAG,EAAE,QAAQ,CAAA;IACb,MAAM,EAAE,WAAW,CAAA;IACnB,GAAG,EAAE,QAAQ,CAAA;IACb,IAAI,EAAE,SAAS,CAAA;IACf,IAAI,EAAE,SAAS,CAAA;IACf,MAAM,EAAE,WAAW,CAAA;IACnB,QAAQ,EAAE,aAAa,CAAA;IACvB,GAAG,EAAE,cAAc,CAAA;gBAEP,MAAM,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,EAAE,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM;IAwB5E,KAAK,CAAC,OAAO,GAAE,YAAwC,EAAE,OAAO,cAAe,GAAG,OAAO,CAAC,KAAK,CAAC;IAStG,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,cAAe,GAAG,OAAO,CAAC,KAAK,CAAC;IAI5D,SAAS,CAAC,OAAO,EAAE,oBAAoB,EAAE,OAAO,cAAe,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAIhG,eAAe,CACb,OAAO,EAAE,sBAAsB,EAC/B,OAAO,GAAE,WAA0B,GAClC,OAAO,CAAC,sBAAsB,CAAC;IAMlC,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,WAA0B,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAM1G,qBAAqB,CACnB,QAAQ,EAAE,aAAa,CAAC,oBAAoB,CAAC,EAC7C,OAAO,EAAE,WAAW,GACnB,2BAA2B,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;IAIlE,wBAAwB,CACtB,QAAQ,EAAE,aAAa,CAAC,uBAAuB,CAAC,EAChD,OAAO,EAAE,WAAW,GACnB,2BAA2B,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;IAOrE,IAAI,EAAE,mBAEL;IAED,IAAI,KAAK,sCAER;CACF"}
@@ -5,6 +5,7 @@ import { EthFacet } from './eth-facet.js';
5
5
  import { SuiFacet } from './sui-facet.js';
6
6
  import { FuelFacet } from './fuel-facet.js';
7
7
  import { CosmosFacet } from './cosmos-facet.js';
8
+ import { StarknetFacet } from './starknet-facet.js';
8
9
  import { Subject } from 'rxjs';
9
10
  import { MemoryDatabase } from './memory-database.js';
10
11
  import { DatabaseSchemaState } from '../core/database-schema.js';
@@ -29,6 +30,7 @@ export class TestProcessorServer {
29
30
  iota;
30
31
  fuel;
31
32
  cosmos;
33
+ starknet;
32
34
  _db;
33
35
  constructor(loader, httpEndpoints = {}) {
34
36
  cleanTest();
@@ -40,6 +42,7 @@ export class TestProcessorServer {
40
42
  this.iota = new IotaFacet(this);
41
43
  this.fuel = new FuelFacet(this);
42
44
  this.cosmos = new CosmosFacet(this);
45
+ this.starknet = new StarknetFacet(this);
43
46
  for (const k of Object.keys(ChainInfo)) {
44
47
  const http = httpEndpoints[k] || '';
45
48
  Endpoints.INSTANCE.chainServer.set(k, http);
@@ -1 +1 @@
1
- {"version":3,"file":"test-processor-server.js","sourceRoot":"","sources":["../../src/testing/test-processor-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test-processor-server.js","sourceRoot":"","sources":["../../src/testing/test-processor-server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentio/sdk",
3
- "version": "2.62.2-rc.6",
3
+ "version": "2.62.2-rc.8",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "exports": {
@@ -66,7 +66,7 @@
66
66
  "@sentio/abi-wan-kanabi": "2.2.2-1",
67
67
  "@sentio/api": "1.0.2",
68
68
  "@sentio/bigdecimal": "9.1.1-patch.3",
69
- "@sentio/chain": "~3.4.7",
69
+ "@sentio/chain": "~3.4.8",
70
70
  "@sentio/ethers-v6": "^1.0.29",
71
71
  "@solana/web3.js": "^1.98.3",
72
72
  "@typemove/aptos": "~1.13.3",
@@ -88,16 +88,17 @@
88
88
  "nice-grpc-common": "^2.0.2",
89
89
  "nice-grpc-prometheus": "^0.2.2",
90
90
  "node-fetch": "^3.3.2",
91
- "p-queue": "^8.0.1",
91
+ "p-queue": "^9.0.0",
92
92
  "piscina": "^5.1.3",
93
93
  "radash": "^12.0.0",
94
94
  "reflect-metadata": "^0.2.2",
95
95
  "rxjs": "^7.8.1",
96
+ "starknet": "^6.11.0",
96
97
  "typechain": "^8.3.2",
97
98
  "utility-types": "^3.11.0",
98
99
  "yaml": "^2.3.4",
99
- "@sentio/protos": "2.62.2-rc.6",
100
- "@sentio/runtime": "^2.62.2-rc.6"
100
+ "@sentio/protos": "2.62.2-rc.8",
101
+ "@sentio/runtime": "^2.62.2-rc.8"
101
102
  },
102
103
  "peerDependencies": {
103
104
  "@sentio/tsup": "^8.3.5-rc.1"
@@ -116,7 +117,7 @@
116
117
  "bundle": "tsup --config src/bundle.config.ts",
117
118
  "bundle:dts": "tsc --emitDeclarationOnly --declaration",
118
119
  "compile": "tsc && cp src/tsup.config.ts lib",
119
- "gen": "pnpm gen:eth && pnpm gen:aptos && pnpm gen:sui && pnpm gen:iota && pnpm gen:solana && pnpm gen:fuel && pnpm gen:store",
120
+ "gen": "pnpm gen:eth && pnpm gen:aptos && pnpm gen:sui && pnpm gen:iota && pnpm gen:solana && pnpm gen:fuel && pnpm gen:starknet && pnpm gen:store",
120
121
  "gen:aptos": "cp ../../node_modules/@typemove/aptos/src/abis/*.json src/aptos/abis && tsx src/aptos/codegen/run.ts src/aptos/abis src/aptos/builtin && pnpm gen:aptos_test",
121
122
  "gen:aptos_test": "tsx src/aptos/codegen/run.ts src/aptos/tests/abis src/aptos/tests/types",
122
123
  "gen:docs": "typedoc --options typedoc.json",
@@ -127,11 +128,14 @@
127
128
  "gen:iota": "cp ../../node_modules/@typemove/iota/src/abis/*.json src/iota/abis && tsx src/iota/codegen/run.ts src/iota/abis src/iota/builtin && pnpm gen:iota_test",
128
129
  "gen:iota_test": "tsx src/iota/codegen/run.ts src/iota/tests/abis src/iota/tests/types",
129
130
  "gen:solana": "tsx src/solana/codegen/run.ts src/solana/tests/abis src/solana/tests/types",
131
+ "gen:starknet": "tsx src/stark/codegen/run.ts src/stark/abis src/stark/builtin && pnpm gen:starknet_test",
132
+ "gen:starknet_test": "tsx src/stark/codegen/run.ts src/stark/tests/abis src/stark/tests/types",
130
133
  "gen:store": "tsx src/store/run.ts src/store/tests src/store/tests/generated",
131
134
  "gen:sui": "cp ../../node_modules/@typemove/sui/src/abis/*.json src/sui/abis && tsx src/sui/codegen/run.ts src/sui/abis src/sui/builtin && pnpm gen:sui_test",
132
135
  "gen:sui_test": "tsx src/sui/codegen/run.ts src/sui/tests/abis src/sui/tests/types",
133
136
  "sync_sui_to_iota": "tsx sync-sui-to-iota.ts",
134
137
  "test": "glob -c 'tsx --test' '**/*.test.ts'",
135
- "test:db": "glob -c 'tsx --test' 'src/store/tests/database.test.ts'"
138
+ "test:db": "glob -c 'tsx --test' 'src/store/tests/database.test.ts'",
139
+ "test:starknet": "tsx --test src/stark/tests/event.test.ts"
136
140
  }
137
141
  }
@@ -0,0 +1,125 @@
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
+ }
@@ -0,0 +1 @@
1
+ export * from './codegen.js'
@@ -0,0 +1,10 @@
1
+ import { codegen } from './index.js'
2
+
3
+ if (process.argv.length > 3) {
4
+ const abisDir = process.argv[2]
5
+ const targetDir = process.argv[3]
6
+ await codegen(abisDir, targetDir)
7
+ } else {
8
+ console.error('Not enough argument')
9
+ process.exit(1)
10
+ }
@@ -0,0 +1,3 @@
1
+ export function upperFirst(str: string): string {
2
+ return str.charAt(0).toUpperCase() + str.slice(1)
3
+ }
@@ -0,0 +1,78 @@
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
+ }
@@ -0,0 +1,55 @@
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
+ }