@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.
- package/lib/stark/codegen/codegen.d.ts +2 -0
- package/lib/stark/codegen/codegen.d.ts.map +1 -0
- package/lib/stark/codegen/codegen.js +110 -0
- package/lib/stark/codegen/codegen.js.map +1 -0
- package/lib/stark/codegen/index.d.ts +2 -0
- package/lib/stark/codegen/index.d.ts.map +1 -0
- package/lib/stark/codegen/index.js +2 -0
- package/lib/stark/codegen/index.js.map +1 -0
- package/lib/stark/codegen/run.d.ts +2 -0
- package/lib/stark/codegen/run.d.ts.map +1 -0
- package/lib/stark/codegen/run.js +11 -0
- package/lib/stark/codegen/run.js.map +1 -0
- package/lib/stark/codegen/utils.d.ts +2 -0
- package/lib/stark/codegen/utils.d.ts.map +1 -0
- package/lib/stark/codegen/utils.js +4 -0
- package/lib/stark/codegen/utils.js.map +1 -0
- package/lib/stark/context.d.ts +28 -0
- package/lib/stark/context.d.ts.map +1 -0
- package/lib/stark/context.js +59 -0
- package/lib/stark/context.js.map +1 -0
- package/lib/stark/contract.d.ts +12 -0
- package/lib/stark/contract.d.ts.map +1 -0
- package/lib/stark/contract.js +43 -0
- package/lib/stark/contract.js.map +1 -0
- package/lib/stark/event.d.ts +7 -0
- package/lib/stark/event.d.ts.map +1 -0
- package/lib/stark/event.js +11 -0
- package/lib/stark/event.js.map +1 -0
- package/lib/stark/index.d.ts +7 -0
- package/lib/stark/index.d.ts.map +1 -0
- package/lib/stark/index.js +7 -0
- package/lib/stark/index.js.map +1 -0
- package/lib/stark/starknet-plugin.d.ts +15 -0
- package/lib/stark/starknet-plugin.d.ts.map +1 -0
- package/lib/stark/starknet-plugin.js +87 -0
- package/lib/stark/starknet-plugin.js.map +1 -0
- package/lib/stark/starknet-processor.d.ts +35 -0
- package/lib/stark/starknet-processor.d.ts.map +1 -0
- package/lib/stark/starknet-processor.js +133 -0
- package/lib/stark/starknet-processor.js.map +1 -0
- package/lib/stark/types.d.ts +11 -0
- package/lib/stark/types.d.ts.map +1 -0
- package/lib/stark/types.js +2 -0
- package/lib/stark/types.js.map +1 -0
- package/lib/testing/starknet-facet.d.ts +9 -0
- package/lib/testing/starknet-facet.d.ts.map +1 -0
- package/lib/testing/starknet-facet.js +53 -0
- package/lib/testing/starknet-facet.js.map +1 -0
- package/lib/testing/test-processor-server.d.ts +2 -0
- package/lib/testing/test-processor-server.d.ts.map +1 -1
- package/lib/testing/test-processor-server.js +3 -0
- package/lib/testing/test-processor-server.js.map +1 -1
- package/package.json +11 -7
- package/src/stark/codegen/codegen.ts +125 -0
- package/src/stark/codegen/index.ts +1 -0
- package/src/stark/codegen/run.ts +10 -0
- package/src/stark/codegen/utils.ts +3 -0
- package/src/stark/context.ts +78 -0
- package/src/stark/contract.ts +55 -0
- package/src/stark/event.ts +7 -0
- package/src/stark/index.ts +9 -0
- package/src/stark/starknet-plugin.ts +116 -0
- package/src/stark/starknet-processor.ts +164 -0
- package/src/stark/types.ts +11 -0
- package/src/testing/starknet-facet.ts +62 -0
- package/src/testing/test-processor-server.ts +3 -0
- package/lib/core/base-context.test.d.ts +0 -2
- package/lib/core/base-context.test.d.ts.map +0 -1
- 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 @@
|
|
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;
|
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":"AAmBA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,oBAAoB,EAAE,KAAK,EAAE,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,OAAO,EAAE,MAAM,MAAM,CAAA;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAEzC,MAAM,CAAC,MAAM,YAAY,GAA6B,EAAE,CAAA;AAExD,MAAM,UAAU,SAAS;IACvB,iCAAiC;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAA;IAC7E,KAAK,CAAC,KAAK,EAAE,CAAA;IACb,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAA;AACxE,CAAC;AAED,MAAM,OAAO,mBAAmB;IAC9B,OAAO,CAAsB;IAC7B,eAAe,CAAkB;IACjC,cAAc,CAAiB;IAC/B,YAAY,CAAc;IAE1B,KAAK,CAAY;IACjB,GAAG,CAAU;IACb,MAAM,CAAa;IACnB,GAAG,CAAU;IACb,IAAI,CAAW;IACf,IAAI,CAAW;IACf,MAAM,CAAa;IACnB,GAAG,CAAgB;IAEnB,YAAY,MAA0B,EAAE,gBAAwC,EAAE;QAChF,SAAS,EAAE,CAAA;QAEX,IAAI,CAAC,OAAO,GAAG,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAA;QAC/C,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAA;QACjC,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAA;QACnC,IAAI,CAAC,GAAG,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAA;QAC7B,IAAI,CAAC,GAAG,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAA;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAA;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAA;QAC/B,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAA;
|
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.
|
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.
|
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": "^
|
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.
|
100
|
-
"@sentio/runtime": "^2.62.2-rc.
|
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,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
|
+
}
|