@sentio/sdk 3.0.0-rc-next.2 → 3.0.0-rc-next.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.
Files changed (75) hide show
  1. package/lib/fuel/asset-processor.d.ts.map +1 -1
  2. package/lib/fuel/asset-processor.js +5 -1
  3. package/lib/fuel/asset-processor.js.map +1 -1
  4. package/lib/stark/codegen/codegen.d.ts +2 -0
  5. package/lib/stark/codegen/codegen.d.ts.map +1 -0
  6. package/lib/stark/codegen/codegen.js +110 -0
  7. package/lib/stark/codegen/codegen.js.map +1 -0
  8. package/lib/stark/codegen/index.d.ts +2 -0
  9. package/lib/stark/codegen/index.d.ts.map +1 -0
  10. package/lib/stark/codegen/index.js +2 -0
  11. package/lib/stark/codegen/index.js.map +1 -0
  12. package/lib/stark/codegen/run.d.ts +2 -0
  13. package/lib/stark/codegen/run.d.ts.map +1 -0
  14. package/lib/stark/codegen/run.js +11 -0
  15. package/lib/stark/codegen/run.js.map +1 -0
  16. package/lib/stark/codegen/utils.d.ts +2 -0
  17. package/lib/stark/codegen/utils.d.ts.map +1 -0
  18. package/lib/stark/codegen/utils.js +4 -0
  19. package/lib/stark/codegen/utils.js.map +1 -0
  20. package/lib/stark/context.d.ts +28 -0
  21. package/lib/stark/context.d.ts.map +1 -0
  22. package/lib/stark/context.js +59 -0
  23. package/lib/stark/context.js.map +1 -0
  24. package/lib/stark/contract.d.ts +12 -0
  25. package/lib/stark/contract.d.ts.map +1 -0
  26. package/lib/stark/contract.js +43 -0
  27. package/lib/stark/contract.js.map +1 -0
  28. package/lib/stark/event.d.ts +7 -0
  29. package/lib/stark/event.d.ts.map +1 -0
  30. package/lib/stark/event.js +11 -0
  31. package/lib/stark/event.js.map +1 -0
  32. package/lib/stark/index.d.ts +7 -0
  33. package/lib/stark/index.d.ts.map +1 -0
  34. package/lib/stark/index.js +7 -0
  35. package/lib/stark/index.js.map +1 -0
  36. package/lib/stark/starknet-plugin.d.ts +15 -0
  37. package/lib/stark/starknet-plugin.d.ts.map +1 -0
  38. package/lib/stark/starknet-plugin.js +87 -0
  39. package/lib/stark/starknet-plugin.js.map +1 -0
  40. package/lib/stark/starknet-processor.d.ts +35 -0
  41. package/lib/stark/starknet-processor.d.ts.map +1 -0
  42. package/lib/stark/starknet-processor.js +133 -0
  43. package/lib/stark/starknet-processor.js.map +1 -0
  44. package/lib/stark/types.d.ts +11 -0
  45. package/lib/stark/types.d.ts.map +1 -0
  46. package/lib/stark/types.js +2 -0
  47. package/lib/stark/types.js.map +1 -0
  48. package/lib/testing/starknet-facet.d.ts +9 -0
  49. package/lib/testing/starknet-facet.d.ts.map +1 -0
  50. package/lib/testing/starknet-facet.js +53 -0
  51. package/lib/testing/starknet-facet.js.map +1 -0
  52. package/lib/testing/test-processor-server.d.ts +2 -0
  53. package/lib/testing/test-processor-server.d.ts.map +1 -1
  54. package/lib/testing/test-processor-server.js +3 -0
  55. package/lib/testing/test-processor-server.js.map +1 -1
  56. package/lib/utils/price.js +1 -1
  57. package/package.json +9 -5
  58. package/src/fuel/asset-processor.ts +5 -2
  59. package/src/stark/codegen/codegen.ts +125 -0
  60. package/src/stark/codegen/index.ts +1 -0
  61. package/src/stark/codegen/run.ts +10 -0
  62. package/src/stark/codegen/utils.ts +3 -0
  63. package/src/stark/context.ts +78 -0
  64. package/src/stark/contract.ts +55 -0
  65. package/src/stark/event.ts +7 -0
  66. package/src/stark/index.ts +9 -0
  67. package/src/stark/starknet-plugin.ts +116 -0
  68. package/src/stark/starknet-processor.ts +164 -0
  69. package/src/stark/types.ts +11 -0
  70. package/src/testing/starknet-facet.ts +62 -0
  71. package/src/testing/test-processor-server.ts +3 -0
  72. package/src/utils/price.ts +1 -1
  73. package/lib/core/base-context.test.d.ts +0 -2
  74. package/lib/core/base-context.test.d.ts.map +0 -1
  75. 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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"}
@@ -20,7 +20,7 @@ export function getPriceClient(basePath = Endpoints.INSTANCE.priceFeedAPI) {
20
20
  basePath = basePath.slice(0, -1);
21
21
  }
22
22
  client.setConfig({
23
- baseUrl: basePath || 'https://app.sentio.xyz',
23
+ baseUrl: basePath || 'https://api.sentio.xyz',
24
24
  auth: getApiKey()
25
25
  });
26
26
  return PriceService;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentio/sdk",
3
- "version": "3.0.0-rc-next.2",
3
+ "version": "3.0.0-rc-next.3",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "exports": {
@@ -93,11 +93,12 @@
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": "3.0.0-rc-next.2",
100
- "@sentio/runtime": "^3.0.0-rc-next.2"
100
+ "@sentio/protos": "3.0.0-rc-next.3",
101
+ "@sentio/runtime": "^3.0.0-rc-next.3"
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
  }
@@ -61,6 +61,7 @@ export class FuelAssetProcessor implements FuelBaseProcessor<FuelAssetProcessorC
61
61
  from: [],
62
62
  to: []
63
63
  }
64
+ let assetId = ''
64
65
  for (const input of tx.transaction.inputs || []) {
65
66
  if (input.type == InputType.Coin) {
66
67
  transfer.from.push({
@@ -68,6 +69,7 @@ export class FuelAssetProcessor implements FuelBaseProcessor<FuelAssetProcessorC
68
69
  assetId: input.assetId,
69
70
  amount: BigInt(input.amount.toString(10))
70
71
  })
72
+ assetId = input.assetId
71
73
  }
72
74
  }
73
75
 
@@ -82,11 +84,12 @@ export class FuelAssetProcessor implements FuelBaseProcessor<FuelAssetProcessorC
82
84
  amount: BigInt(value),
83
85
  assetId: output.assetId
84
86
  })
87
+ if (assetId == '') {
88
+ assetId = output.assetId
89
+ }
85
90
  }
86
91
  }
87
92
 
88
- const assetId = transfer.from[0].assetId || ''
89
-
90
93
  const ctx = new FuelContext(
91
94
  this.config.chainId,
92
95
  assetId,
@@ -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
+ }