@sentio/sdk 2.6.0-rc.1 → 2.6.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/move/abstract-codegen.d.ts +2 -0
- package/lib/move/abstract-codegen.js +72 -6
- package/lib/move/abstract-codegen.js.map +1 -1
- package/lib/move/abstract-move-coder.js +0 -2
- package/lib/move/abstract-move-coder.js.map +1 -1
- package/lib/move/index.d.ts +0 -1
- package/lib/move/index.js +0 -1
- package/lib/move/index.js.map +1 -1
- package/lib/move/utils.d.ts +2 -0
- package/lib/move/utils.js +3 -0
- package/lib/move/utils.js.map +1 -1
- package/lib/sui/builtin/0x1.d.ts +3 -16
- package/lib/sui/builtin/0x1.js +0 -25
- package/lib/sui/builtin/0x1.js.map +1 -1
- package/lib/sui/builtin/0x2.d.ts +68 -85
- package/lib/sui/builtin/0x2.js +1 -29
- package/lib/sui/builtin/0x2.js.map +1 -1
- package/lib/sui/codegen/codegen.js +21 -1
- package/lib/sui/codegen/codegen.js.map +1 -1
- package/lib/sui/move-coder.d.ts +1 -0
- package/lib/sui/move-coder.js +11 -0
- package/lib/sui/move-coder.js.map +1 -1
- package/lib/sui/sui-processor.js +1 -0
- package/lib/sui/sui-processor.js.map +1 -1
- package/package.json +4 -4
- package/src/move/abstract-codegen.ts +81 -6
- package/src/move/abstract-move-coder.ts +0 -2
- package/src/move/index.ts +0 -1
- package/src/move/utils.ts +6 -0
- package/src/sui/builtin/0x1.ts +3 -39
- package/src/sui/builtin/0x2.ts +69 -108
- package/src/sui/codegen/codegen.ts +23 -1
- package/src/sui/move-coder.ts +12 -0
- package/src/sui/sui-processor.ts +1 -0
- package/lib/move/ts-type.d.ts +0 -2
- package/lib/move/ts-type.js +0 -77
- package/lib/move/ts-type.js.map +0 -1
- package/src/move/ts-type.ts +0 -86
@@ -4,7 +4,7 @@ import chalk from 'chalk';
|
|
4
4
|
import { AbstractCodegen } from '../../move/abstract-codegen.js';
|
5
5
|
import { JsonRpcProvider } from '@mysten/sui.js';
|
6
6
|
import { toInternalModule } from '../move-types.js';
|
7
|
-
import { moduleQname, SPLITTER } from '../../move/index.js';
|
7
|
+
import { moduleQname, SPLITTER, structQname } from '../../move/index.js';
|
8
8
|
import { getMeaningfulFunctionParams } from '../utils.js';
|
9
9
|
export async function codegen(abisDir, outDir = 'src/types/sui') {
|
10
10
|
if (!fs.existsSync(abisDir)) {
|
@@ -58,5 +58,25 @@ class SuiCodegen extends AbstractCodegen {
|
|
58
58
|
}
|
59
59
|
return res;
|
60
60
|
}
|
61
|
+
generateStructs(module, struct, events) {
|
62
|
+
switch (structQname(module, struct)) {
|
63
|
+
case '0x2::object::ID':
|
64
|
+
return `export type ${struct.name} = string`;
|
65
|
+
case '0x2::coin::Coin':
|
66
|
+
return `export type ${struct.name}<T> = string`;
|
67
|
+
case '0x1::option::Option':
|
68
|
+
return `export type Option<T> = T | undefined`;
|
69
|
+
}
|
70
|
+
return super.generateStructs(module, struct, events);
|
71
|
+
}
|
72
|
+
generateOnEvents(module, struct) {
|
73
|
+
switch (structQname(module, struct)) {
|
74
|
+
case '0x2::object::ID':
|
75
|
+
case '0x2::coin::Coin':
|
76
|
+
case '0x1::option::Option':
|
77
|
+
return '';
|
78
|
+
}
|
79
|
+
return super.generateOnEvents(module, struct);
|
80
|
+
}
|
61
81
|
}
|
62
82
|
//# sourceMappingURL=codegen.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../../src/sui/codegen/codegen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,EAAE,eAAe,EAA4B,MAAM,gBAAgB,CAAA;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAkB,MAAM,qBAAqB,CAAA;
|
1
|
+
{"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../../src/sui/codegen/codegen.ts"],"names":[],"mappings":"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","sourcesContent":["import { SuiNetwork } from '../network.js'\nimport * as fs from 'fs'\nimport chalk from 'chalk'\nimport { InternalMoveModule, InternalMoveStruct } from '../../move/internal-models.js'\nimport { AbstractCodegen } from '../../move/abstract-codegen.js'\nimport { JsonRpcProvider, SuiMoveNormalizedModules } from '@mysten/sui.js'\nimport { toInternalModule } from '../move-types.js'\nimport { moduleQname, SPLITTER, structQname, TypeDescriptor } from '../../move/index.js'\nimport { getMeaningfulFunctionParams } from '../utils.js'\n\nexport async function codegen(abisDir: string, outDir = 'src/types/sui') {\n if (!fs.existsSync(abisDir)) {\n return\n }\n console.log(chalk.green('Generated Types for Sui'))\n const gen = new SuiCodegen()\n await gen.generate(abisDir, outDir)\n}\n\nfunction getRpcEndpoint(network: SuiNetwork): string {\n switch (network) {\n case SuiNetwork.TEST_NET:\n return 'https://fullnode.testnet.sui.io/'\n }\n return 'https://fullnode.mainnet.sui.io/'\n}\n\nfunction getRpcClient(network: SuiNetwork): JsonRpcProvider {\n return new JsonRpcProvider(getRpcEndpoint(network))\n}\n\nclass SuiCodegen extends AbstractCodegen<SuiMoveNormalizedModules, SuiNetwork> {\n ADDRESS_TYPE = 'SuiAddress'\n MAIN_NET = SuiNetwork.MAIN_NET\n TEST_NET = SuiNetwork.TEST_NET\n PREFIX = 'Sui'\n STRUCT_FIELD_NAME = 'fields'\n\n async fetchModules(account: string, network: SuiNetwork): Promise<SuiMoveNormalizedModules> {\n const client = getRpcClient(network)\n return await client.getNormalizedMoveModulesByPackage(account)\n }\n\n getMeaningfulFunctionParams(params: TypeDescriptor[]): TypeDescriptor[] {\n return getMeaningfulFunctionParams(params)\n }\n\n toInternalModules(modules: SuiMoveNormalizedModules): InternalMoveModule[] {\n return Object.values(modules).map(toInternalModule)\n }\n\n getEventStructs(module: InternalMoveModule) {\n const qname = moduleQname(module)\n const eventMap = new Map<string, InternalMoveStruct>()\n\n for (const struct of module.structs) {\n const abilities = new Set(struct.abilities)\n if (abilities.has('Drop') && abilities.has('Copy')) {\n eventMap.set(qname + SPLITTER + struct.name, struct)\n }\n }\n return eventMap\n }\n\n readModulesFile(fullPath: string) {\n const res = super.readModulesFile(fullPath)\n if (res.result) {\n return res.result\n }\n return res\n }\n\n generateStructs(module: InternalMoveModule, struct: InternalMoveStruct, events: Set<string>): string {\n switch (structQname(module, struct)) {\n case '0x2::object::ID':\n return `export type ${struct.name} = string`\n case '0x2::coin::Coin':\n return `export type ${struct.name}<T> = string`\n case '0x1::option::Option':\n return `export type Option<T> = T | undefined`\n }\n return super.generateStructs(module, struct, events)\n }\n\n generateOnEvents(module: InternalMoveModule, struct: InternalMoveStruct): string {\n switch (structQname(module, struct)) {\n case '0x2::object::ID':\n case '0x2::coin::Coin':\n case '0x1::option::Option':\n return ''\n }\n return super.generateOnEvents(module, struct)\n }\n}\n"]}
|
package/lib/sui/move-coder.d.ts
CHANGED
@@ -4,6 +4,7 @@ import { MoveCall, MoveEvent, SuiMoveNormalizedModule } from '@mysten/sui.js';
|
|
4
4
|
import { TypeDescriptor } from '../move/index.js';
|
5
5
|
export declare class MoveCoder extends AbstractMoveCoder<MoveEvent> {
|
6
6
|
load(module: SuiMoveNormalizedModule): void;
|
7
|
+
decode(data: any, type: TypeDescriptor): any;
|
7
8
|
decodeEvent<T>(event: MoveEvent): TypedEventInstance<T> | undefined;
|
8
9
|
filterAndDecodeEvents<T>(typeQname: string, resources: MoveEvent[]): TypedEventInstance<T>[];
|
9
10
|
getMeaningfulFunctionParams(params: TypeDescriptor[]): TypeDescriptor[];
|
package/lib/sui/move-coder.js
CHANGED
@@ -9,6 +9,17 @@ export class MoveCoder extends AbstractMoveCoder {
|
|
9
9
|
}
|
10
10
|
this.loadInternal(toInternalModule(module));
|
11
11
|
}
|
12
|
+
decode(data, type) {
|
13
|
+
switch (type.qname) {
|
14
|
+
case '0x2::object::ID':
|
15
|
+
case '0x2::coin::Coin':
|
16
|
+
return data;
|
17
|
+
case '0x1::option::Option':
|
18
|
+
return this.decode(data, type.typeArgs[0]);
|
19
|
+
default:
|
20
|
+
return super.decode(data, type);
|
21
|
+
}
|
22
|
+
}
|
12
23
|
decodeEvent(event) {
|
13
24
|
const res = this.decodedInternal({ ...event, data: event.fields });
|
14
25
|
return { ...event, fields_decoded: res?.data_decoded, type_arguments: res?.type_arguments || [] };
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"move-coder.js","sourceRoot":"","sources":["../../src/sui/move-coder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAElE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAkB,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAA;AAExD,MAAM,OAAO,SAAU,SAAQ,iBAA4B;IACzD,IAAI,CAAC,MAA+B;QAClC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE;YAC9C,OAAM;SACP;QACD,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAA;IAC7C,CAAC;IAED,WAAW,CAAI,KAAgB;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAI,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;QACrE,OAAO,EAAE,GAAG,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,YAAiB,EAAE,cAAc,EAAE,GAAG,EAAE,cAAc,IAAI,EAAE,EAAE,CAAA;IACxG,CAAC;IACD,qBAAqB,CAAI,SAAiB,EAAE,SAAsB;QAChE,MAAM,IAAI,GAAG,IAAI,CAAC,uBAAuB,CACvC,SAAS,EACT,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACtB,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAA;QAC3D,CAAC,CAAC,CACH,CAAA;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YACtB,OAAO,GAAG,CAAC,YAAY,CAAA;YACvB,MAAM,KAAK,GAAG,GAAgB,CAAA;YAC9B,OAAO,EAAE,GAAG,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,YAAiB,EAAE,cAAc,EAAE,GAAG,EAAE,cAAc,IAAI,EAAE,EAAE,CAAA;QACxG,CAAC,CAAC,CAAA;IACJ,CAAC;IACD,2BAA2B,CAAC,MAAwB;QAClD,OAAO,2BAA2B,CAAC,MAAM,CAAC,CAAA;IAC5C,CAAC;IAED,qBAAqB,CAAC,OAAiB;QACrC,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAChG,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAA;QAC/C,MAAM,MAAM,GAAG,2BAA2B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACvD,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,EAAE,MAAM,CAAC,CAAA;QACxE,OAAO;YACL,GAAG,OAAO;YACV,iBAAiB,EAAE,cAAc;SACL,CAAA;IAChC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,SAAS,EAAE,CAAA;AAEzC,MAAM,UAAU,gBAAgB;IAC9B,OAAO,UAAU,CAAA;AACnB,CAAC","sourcesContent":["import { TypedEventInstance, TypedFunctionPayload } from './models.js'\nimport { AbstractMoveCoder } from '../move/abstract-move-coder.js'\nimport { MoveCall, MoveEvent, SuiMoveNormalizedModule } from '@mysten/sui.js'\nimport { toInternalModule } from './move-types.js'\nimport { SPLITTER, TypeDescriptor } from '../move/index.js'\nimport { getMeaningfulFunctionParams } from './utils.js'\n\nexport class MoveCoder extends AbstractMoveCoder<MoveEvent> {\n load(module: SuiMoveNormalizedModule) {\n if (this.contains(module.address, module.name)) {\n return\n }\n this.loadInternal(toInternalModule(module))\n }\n\n decodeEvent<T>(event: MoveEvent): TypedEventInstance<T> | undefined {\n const res = this.decodedInternal<T>({ ...event, data: event.fields })\n return { ...event, fields_decoded: res?.data_decoded as T, type_arguments: res?.type_arguments || [] }\n }\n filterAndDecodeEvents<T>(typeQname: string, resources: MoveEvent[]): TypedEventInstance<T>[] {\n const resp = this.filterAndDecodeInternal(\n typeQname,\n resources.map((event) => {\n return { ...event, data: event.fields, type: event.type }\n })\n )\n return resp.map((res) => {\n delete res.data_decoded\n const event = res as MoveEvent\n return { ...event, fields_decoded: res?.data_decoded as T, type_arguments: res?.type_arguments || [] }\n })\n }\n getMeaningfulFunctionParams(params: TypeDescriptor[]): TypeDescriptor[] {\n return getMeaningfulFunctionParams(params)\n }\n\n decodeFunctionPayload(payload: MoveCall): MoveCall {\n const functionType = [payload.package.objectId, payload.module, payload.function].join(SPLITTER)\n const func = this.getMoveFunction(functionType)\n const params = getMeaningfulFunctionParams(func.params)\n const argumentsTyped = this.decodeArray(payload.arguments || [], params)\n return {\n ...payload,\n arguments_decoded: argumentsTyped,\n } as TypedFunctionPayload<any>\n }\n}\n\nexport const MOVE_CODER = new MoveCoder()\n\nexport function defaultMoveCoder(): MoveCoder {\n return MOVE_CODER\n}\n"]}
|
1
|
+
{"version":3,"file":"move-coder.js","sourceRoot":"","sources":["../../src/sui/move-coder.ts"],"names":[],"mappings":"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","sourcesContent":["import { TypedEventInstance, TypedFunctionPayload } from './models.js'\nimport { AbstractMoveCoder } from '../move/abstract-move-coder.js'\nimport { MoveCall, MoveEvent, SuiMoveNormalizedModule } from '@mysten/sui.js'\nimport { toInternalModule } from './move-types.js'\nimport { SPLITTER, TypeDescriptor } from '../move/index.js'\nimport { getMeaningfulFunctionParams } from './utils.js'\n\nexport class MoveCoder extends AbstractMoveCoder<MoveEvent> {\n load(module: SuiMoveNormalizedModule) {\n if (this.contains(module.address, module.name)) {\n return\n }\n this.loadInternal(toInternalModule(module))\n }\n\n decode(data: any, type: TypeDescriptor): any {\n switch (type.qname) {\n case '0x2::object::ID':\n case '0x2::coin::Coin':\n return data\n case '0x1::option::Option':\n return this.decode(data, type.typeArgs[0])\n default:\n return super.decode(data, type)\n }\n }\n\n decodeEvent<T>(event: MoveEvent): TypedEventInstance<T> | undefined {\n const res = this.decodedInternal<T>({ ...event, data: event.fields })\n return { ...event, fields_decoded: res?.data_decoded as T, type_arguments: res?.type_arguments || [] }\n }\n filterAndDecodeEvents<T>(typeQname: string, resources: MoveEvent[]): TypedEventInstance<T>[] {\n const resp = this.filterAndDecodeInternal(\n typeQname,\n resources.map((event) => {\n return { ...event, data: event.fields, type: event.type }\n })\n )\n return resp.map((res) => {\n delete res.data_decoded\n const event = res as MoveEvent\n return { ...event, fields_decoded: res?.data_decoded as T, type_arguments: res?.type_arguments || [] }\n })\n }\n getMeaningfulFunctionParams(params: TypeDescriptor[]): TypeDescriptor[] {\n return getMeaningfulFunctionParams(params)\n }\n\n decodeFunctionPayload(payload: MoveCall): MoveCall {\n const functionType = [payload.package.objectId, payload.module, payload.function].join(SPLITTER)\n const func = this.getMoveFunction(functionType)\n const params = getMeaningfulFunctionParams(func.params)\n const argumentsTyped = this.decodeArray(payload.arguments || [], params)\n return {\n ...payload,\n arguments_decoded: argumentsTyped,\n } as TypedFunctionPayload<any>\n }\n}\n\nexport const MOVE_CODER = new MoveCoder()\n\nexport function defaultMoveCoder(): MoveCoder {\n return MOVE_CODER\n}\n"]}
|
package/lib/sui/sui-processor.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"sui-processor.js","sourceRoot":"","sources":["../../src/sui/sui-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import { Data_SuiCall, Data_SuiEvent, MoveFetchConfig } from '@sentio/protos'\nimport { ListStateStorage } from '@sentio/runtime'\nimport { SuiNetwork, getChainId } from './network.js'\nimport { ServerError, Status } from 'nice-grpc'\nimport { SuiContext } from './context.js'\nimport { MoveEvent, SuiTransactionResponse, MoveCall } from '@mysten/sui.js'\nimport { CallHandler, EventFilter, EventHandler, FunctionNameAndCallFilter } from '../move/index.js'\nimport { getMoveCalls } from './utils.js'\nimport { defaultMoveCoder } from './move-coder.js'\n\nclass IndexConfigure {\n address: string\n network: SuiNetwork\n startTimestamp: number\n}\n\nexport class SuiBindOptions {\n address: string\n network?: SuiNetwork\n startTimestamp?: number\n}\n\nexport class SuiProcessorState extends ListStateStorage<SuiBaseProcessor> {\n static INSTANCE = new SuiProcessorState()\n}\n\nexport class SuiBaseProcessor {\n readonly moduleName: string\n config: IndexConfigure\n\n eventHandlers: EventHandler<Data_SuiEvent>[] = []\n callHandlers: CallHandler<Data_SuiCall>[] = []\n\n constructor(name: string, options: SuiBindOptions) {\n this.config = configure(options)\n SuiProcessorState.INSTANCE.addValue(this)\n }\n\n getChainId(): string {\n return getChainId(this.config.network)\n }\n\n public onMoveEvent(\n handler: (event: MoveEvent, ctx: SuiContext) => void,\n filter: EventFilter | EventFilter[],\n fetchConfig?: MoveFetchConfig\n ): SuiBaseProcessor {\n let _filters: EventFilter[] = []\n const _fetchConfig = fetchConfig || MoveFetchConfig.fromPartial({})\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n // const address = this.config.address\n // const moduleName = this.moduleName\n\n const processor = this\n\n this.eventHandlers.push({\n handler: async function (data) {\n if (!data.transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'event is null')\n }\n const txn = data.transaction as SuiTransactionResponse\n if (!txn.effects.events || !txn.effects.events.length) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'no event in the transactions')\n }\n\n const ctx = new SuiContext(\n processor.moduleName,\n processor.config.network,\n processor.config.address,\n data.timestamp || new Date(0),\n data.slot,\n txn\n )\n\n const events = txn.effects.events\n txn.effects.events = []\n for (const evt of events) {\n if ('moveEvent' in evt) {\n const eventInstance = evt.moveEvent as MoveEvent\n const decoded = defaultMoveCoder().decodeEvent<any>(eventInstance)\n await handler(decoded || eventInstance, ctx)\n }\n }\n\n return ctx.getProcessResult()\n },\n filters: _filters,\n fetchConfig: _fetchConfig,\n })\n return this\n }\n\n public onEntryFunctionCall(\n handler: (call: MoveCall, ctx: SuiContext) => void,\n filter: FunctionNameAndCallFilter | FunctionNameAndCallFilter[],\n fetchConfig?: MoveFetchConfig\n ): SuiBaseProcessor {\n let _filters: FunctionNameAndCallFilter[] = []\n const _fetchConfig = fetchConfig || MoveFetchConfig.fromPartial({})\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n // const address = this.config.address\n // const moduleName = this.moduleName\n const processor = this\n\n this.callHandlers.push({\n handler: async function (data) {\n if (!data.transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'call is null')\n }\n const tx = data.transaction as SuiTransactionResponse\n\n const ctx = new SuiContext(\n processor.moduleName,\n processor.config.network,\n processor.config.address,\n data.timestamp || new Date(0),\n data.slot,\n tx\n )\n if (tx) {\n const calls: MoveCall[] = getMoveCalls(tx)\n if (calls.length !== 1) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Unexpected number of call transactions ' + calls.length)\n }\n const payload = calls[0]\n const decoded = defaultMoveCoder().decodeFunctionPayload(payload)\n await handler(decoded, ctx)\n }\n return ctx.getProcessResult()\n },\n filters: _filters,\n fetchConfig: _fetchConfig,\n })\n return this\n }\n}\n\nfunction configure(options: SuiBindOptions): IndexConfigure {\n return {\n startTimestamp: options.startTimestamp || 0,\n address: options.address,\n network: options.network || SuiNetwork.MAIN_NET,\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"sui-processor.js","sourceRoot":"","sources":["../../src/sui/sui-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import { Data_SuiCall, Data_SuiEvent, MoveFetchConfig } from '@sentio/protos'\nimport { ListStateStorage } from '@sentio/runtime'\nimport { SuiNetwork, getChainId } from './network.js'\nimport { ServerError, Status } from 'nice-grpc'\nimport { SuiContext } from './context.js'\nimport { MoveEvent, SuiTransactionResponse, MoveCall } from '@mysten/sui.js'\nimport { CallHandler, EventFilter, EventHandler, FunctionNameAndCallFilter } from '../move/index.js'\nimport { getMoveCalls } from './utils.js'\nimport { defaultMoveCoder } from './move-coder.js'\n\nclass IndexConfigure {\n address: string\n network: SuiNetwork\n startTimestamp: number\n}\n\nexport class SuiBindOptions {\n address: string\n network?: SuiNetwork\n startTimestamp?: number\n}\n\nexport class SuiProcessorState extends ListStateStorage<SuiBaseProcessor> {\n static INSTANCE = new SuiProcessorState()\n}\n\nexport class SuiBaseProcessor {\n readonly moduleName: string\n config: IndexConfigure\n\n eventHandlers: EventHandler<Data_SuiEvent>[] = []\n callHandlers: CallHandler<Data_SuiCall>[] = []\n\n constructor(name: string, options: SuiBindOptions) {\n this.moduleName = name\n this.config = configure(options)\n SuiProcessorState.INSTANCE.addValue(this)\n }\n\n getChainId(): string {\n return getChainId(this.config.network)\n }\n\n public onMoveEvent(\n handler: (event: MoveEvent, ctx: SuiContext) => void,\n filter: EventFilter | EventFilter[],\n fetchConfig?: MoveFetchConfig\n ): SuiBaseProcessor {\n let _filters: EventFilter[] = []\n const _fetchConfig = fetchConfig || MoveFetchConfig.fromPartial({})\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n // const address = this.config.address\n // const moduleName = this.moduleName\n\n const processor = this\n\n this.eventHandlers.push({\n handler: async function (data) {\n if (!data.transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'event is null')\n }\n const txn = data.transaction as SuiTransactionResponse\n if (!txn.effects.events || !txn.effects.events.length) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'no event in the transactions')\n }\n\n const ctx = new SuiContext(\n processor.moduleName,\n processor.config.network,\n processor.config.address,\n data.timestamp || new Date(0),\n data.slot,\n txn\n )\n\n const events = txn.effects.events\n txn.effects.events = []\n for (const evt of events) {\n if ('moveEvent' in evt) {\n const eventInstance = evt.moveEvent as MoveEvent\n const decoded = defaultMoveCoder().decodeEvent<any>(eventInstance)\n await handler(decoded || eventInstance, ctx)\n }\n }\n\n return ctx.getProcessResult()\n },\n filters: _filters,\n fetchConfig: _fetchConfig,\n })\n return this\n }\n\n public onEntryFunctionCall(\n handler: (call: MoveCall, ctx: SuiContext) => void,\n filter: FunctionNameAndCallFilter | FunctionNameAndCallFilter[],\n fetchConfig?: MoveFetchConfig\n ): SuiBaseProcessor {\n let _filters: FunctionNameAndCallFilter[] = []\n const _fetchConfig = fetchConfig || MoveFetchConfig.fromPartial({})\n\n if (Array.isArray(filter)) {\n _filters = filter\n } else {\n _filters.push(filter)\n }\n\n // const address = this.config.address\n // const moduleName = this.moduleName\n const processor = this\n\n this.callHandlers.push({\n handler: async function (data) {\n if (!data.transaction) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'call is null')\n }\n const tx = data.transaction as SuiTransactionResponse\n\n const ctx = new SuiContext(\n processor.moduleName,\n processor.config.network,\n processor.config.address,\n data.timestamp || new Date(0),\n data.slot,\n tx\n )\n if (tx) {\n const calls: MoveCall[] = getMoveCalls(tx)\n if (calls.length !== 1) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Unexpected number of call transactions ' + calls.length)\n }\n const payload = calls[0]\n const decoded = defaultMoveCoder().decodeFunctionPayload(payload)\n await handler(decoded, ctx)\n }\n return ctx.getProcessResult()\n },\n filters: _filters,\n fetchConfig: _fetchConfig,\n })\n return this\n }\n}\n\nfunction configure(options: SuiBindOptions): IndexConfigure {\n return {\n startTimestamp: options.startTimestamp || 0,\n address: options.address,\n network: options.network || SuiNetwork.MAIN_NET,\n }\n}\n"]}
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "@sentio/sdk",
|
3
3
|
"license": "Apache-2.0",
|
4
|
-
"version": "2.6.0-rc.
|
4
|
+
"version": "2.6.0-rc.3",
|
5
5
|
"type": "module",
|
6
6
|
"scripts": {
|
7
7
|
"compile": "tsc && cp src/utils/*.csv lib/utils && cp src/tsup.config.ts lib",
|
@@ -23,8 +23,8 @@
|
|
23
23
|
"@project-serum/anchor": "^0.26.0",
|
24
24
|
"@sentio/bigdecimal": "^9.1.1-patch.3",
|
25
25
|
"@sentio/ethers-v6": "^1.0.25",
|
26
|
-
"@sentio/protos": "^2.6.0-rc.
|
27
|
-
"@sentio/runtime": "^2.6.0-rc.
|
26
|
+
"@sentio/protos": "^2.6.0-rc.3",
|
27
|
+
"@sentio/runtime": "^2.6.0-rc.3",
|
28
28
|
"@solana/web3.js": "^1.73.2",
|
29
29
|
"@types/prettier": "^2.7.2",
|
30
30
|
"aptos-sdk": "npm:@sentio/aptos@^1.6.0",
|
@@ -78,5 +78,5 @@
|
|
78
78
|
"engines": {
|
79
79
|
"node": ">=16"
|
80
80
|
},
|
81
|
-
"gitHead": "
|
81
|
+
"gitHead": "8192328cf06a42ae6cc0ca033f2167f1cce6fdcc"
|
82
82
|
}
|
@@ -9,8 +9,7 @@ import fs from 'fs'
|
|
9
9
|
import { AccountModulesImportInfo, AccountRegister } from './account.js'
|
10
10
|
import chalk from 'chalk'
|
11
11
|
import { format } from 'prettier'
|
12
|
-
import { isFrameworkAccount, moduleQname, normalizeToJSName, SPLITTER } from './utils.js'
|
13
|
-
import { generateTypeForDescriptor } from './ts-type.js'
|
12
|
+
import { isFrameworkAccount, moduleQname, normalizeToJSName, SPLITTER, VECTOR_STR } from './utils.js'
|
14
13
|
import { camelCase, upperFirst } from 'lodash-es'
|
15
14
|
import { TypeDescriptor } from './types.js'
|
16
15
|
|
@@ -219,7 +218,7 @@ export abstract class AbstractCodegen<ModuleTypes, NetworkType> {
|
|
219
218
|
const structName = normalizeToJSName(struct.name)
|
220
219
|
|
221
220
|
const fields = struct.fields.map((field) => {
|
222
|
-
const type = generateTypeForDescriptor(field.type, module.address
|
221
|
+
const type = this.generateTypeForDescriptor(field.type, module.address)
|
223
222
|
return `${field.name}: ${type}`
|
224
223
|
})
|
225
224
|
|
@@ -277,7 +276,7 @@ export abstract class AbstractCodegen<ModuleTypes, NetworkType> {
|
|
277
276
|
}
|
278
277
|
|
279
278
|
const fields = this.getMeaningfulFunctionParams(func.params).map((param) => {
|
280
|
-
return generateTypeForDescriptor(param, module.address
|
279
|
+
return this.generateTypeForDescriptor(param, module.address)
|
281
280
|
})
|
282
281
|
|
283
282
|
const camelFuncName = upperFirst(camelCase(func.name))
|
@@ -302,12 +301,12 @@ export abstract class AbstractCodegen<ModuleTypes, NetworkType> {
|
|
302
301
|
// const moduleName = normalizeToJSName(module.name)
|
303
302
|
const funcName = camelCase(func.name)
|
304
303
|
const fields = this.getMeaningfulFunctionParams(func.params).map((param) => {
|
305
|
-
return generateTypeForDescriptor(param, module.address
|
304
|
+
return this.generateTypeForDescriptor(param, module.address)
|
306
305
|
})
|
307
306
|
const genericString = this.generateFunctionTypeParameters(func)
|
308
307
|
|
309
308
|
const returns = func.return.map((param) => {
|
310
|
-
return generateTypeForDescriptor(param, module.address
|
309
|
+
return this.generateTypeForDescriptor(param, module.address)
|
311
310
|
})
|
312
311
|
|
313
312
|
const source = `
|
@@ -363,6 +362,82 @@ export abstract class AbstractCodegen<ModuleTypes, NetworkType> {
|
|
363
362
|
`
|
364
363
|
return source
|
365
364
|
}
|
365
|
+
|
366
|
+
generateTypeForDescriptor(type: TypeDescriptor, currentAddress: string): string {
|
367
|
+
if (type.reference) {
|
368
|
+
return this.ADDRESS_TYPE
|
369
|
+
}
|
370
|
+
|
371
|
+
switch (type.qname) {
|
372
|
+
case 'signer': // TODO check this
|
373
|
+
case 'address':
|
374
|
+
case 'Address':
|
375
|
+
return this.ADDRESS_TYPE
|
376
|
+
case '0x1::string::String':
|
377
|
+
return 'string'
|
378
|
+
case 'bool':
|
379
|
+
case 'Bool':
|
380
|
+
return 'Boolean'
|
381
|
+
case 'u8':
|
382
|
+
case 'U8':
|
383
|
+
case 'u16':
|
384
|
+
case 'U16':
|
385
|
+
case 'u32':
|
386
|
+
case 'U32':
|
387
|
+
return 'number'
|
388
|
+
case 'u64':
|
389
|
+
case 'U64':
|
390
|
+
case 'u128':
|
391
|
+
case 'U128':
|
392
|
+
case 'u256':
|
393
|
+
case 'U256':
|
394
|
+
return 'bigint'
|
395
|
+
}
|
396
|
+
|
397
|
+
if (type.qname.toLowerCase() === VECTOR_STR) {
|
398
|
+
// vector<u8> as hex string
|
399
|
+
const elementTypeQname = type.typeArgs[0].qname
|
400
|
+
if (elementTypeQname === 'u8') {
|
401
|
+
// only for aptos
|
402
|
+
return 'string'
|
403
|
+
}
|
404
|
+
if (elementTypeQname.startsWith('T') && !elementTypeQname.includes(SPLITTER)) {
|
405
|
+
return `${elementTypeQname}[] | string`
|
406
|
+
}
|
407
|
+
return this.generateTypeForDescriptor(type.typeArgs[0], currentAddress) + '[]'
|
408
|
+
}
|
409
|
+
|
410
|
+
const simpleName = this.generateSimpleType(type.qname, currentAddress)
|
411
|
+
if (simpleName.length === 0) {
|
412
|
+
console.error('unexpected error')
|
413
|
+
}
|
414
|
+
if (simpleName.toLowerCase() === VECTOR_STR || simpleName.toLowerCase().startsWith(VECTOR_STR + SPLITTER)) {
|
415
|
+
console.error('unexpected vector type error')
|
416
|
+
}
|
417
|
+
if (type.typeArgs.length > 0) {
|
418
|
+
// return simpleName
|
419
|
+
return (
|
420
|
+
simpleName + '<' + type.typeArgs.map((t) => this.generateTypeForDescriptor(t, currentAddress)).join(',') + '>'
|
421
|
+
)
|
422
|
+
}
|
423
|
+
return simpleName
|
424
|
+
}
|
425
|
+
|
426
|
+
generateSimpleType(type: string, currentAddress: string): string {
|
427
|
+
const parts = type.split(SPLITTER)
|
428
|
+
|
429
|
+
for (let i = 0; i < parts.length; i++) {
|
430
|
+
parts[i] = normalizeToJSName(parts[i])
|
431
|
+
}
|
432
|
+
|
433
|
+
if (parts.length < 2) {
|
434
|
+
return parts[0]
|
435
|
+
}
|
436
|
+
if (parts[0] === currentAddress) {
|
437
|
+
return parts.slice(1).join('.')
|
438
|
+
}
|
439
|
+
return '_' + parts.join('.')
|
440
|
+
}
|
366
441
|
}
|
367
442
|
|
368
443
|
export class AccountCodegen<ModuleType, NetworkType> {
|
package/src/move/index.ts
CHANGED
package/src/move/utils.ts
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
import { InternalMoveModule, InternalMoveStruct } from './internal-models.js'
|
2
|
+
|
1
3
|
export const SPLITTER = '::'
|
2
4
|
|
3
5
|
export const VECTOR_STR = 'vector'
|
@@ -23,3 +25,7 @@ export function moduleQnameForType(type: string): [string, string] {
|
|
23
25
|
export function moduleQname(module: { address: string; name: string }): string {
|
24
26
|
return module.address.toLowerCase() + SPLITTER + module.name
|
25
27
|
}
|
28
|
+
|
29
|
+
export function structQname(module: InternalMoveModule, struct: InternalMoveStruct): string {
|
30
|
+
return [module.address, module.name, struct.name].join(SPLITTER)
|
31
|
+
}
|
package/src/sui/builtin/0x1.ts
CHANGED
@@ -75,7 +75,7 @@ export namespace ascii {
|
|
75
75
|
|
76
76
|
export class String {
|
77
77
|
static TYPE_QNAME = "0x1::ascii::String";
|
78
|
-
bytes:
|
78
|
+
bytes: number[];
|
79
79
|
}
|
80
80
|
|
81
81
|
export interface StringInstance extends TypedEventInstance<String> {
|
@@ -172,44 +172,8 @@ export namespace fixed_point32 {
|
|
172
172
|
|
173
173
|
export namespace hash {}
|
174
174
|
|
175
|
-
export class option extends SuiBaseProcessor {
|
176
|
-
constructor(options: SuiBindOptions) {
|
177
|
-
super("option", options);
|
178
|
-
}
|
179
|
-
static DEFAULT_OPTIONS: SuiBindOptions = {
|
180
|
-
address: "0x1",
|
181
|
-
network: SuiNetwork.MAIN_NET,
|
182
|
-
};
|
183
|
-
|
184
|
-
static bind(options: Partial<SuiBindOptions> = {}): option {
|
185
|
-
return new option({ ...option.DEFAULT_OPTIONS, ...options });
|
186
|
-
}
|
187
|
-
|
188
|
-
onEventOption(
|
189
|
-
func: (event: option.OptionInstance, ctx: SuiContext) => void,
|
190
|
-
fetchConfig?: MoveFetchConfig
|
191
|
-
): option {
|
192
|
-
this.onMoveEvent(
|
193
|
-
func,
|
194
|
-
{
|
195
|
-
type: "option::Option",
|
196
|
-
},
|
197
|
-
fetchConfig
|
198
|
-
);
|
199
|
-
return this;
|
200
|
-
}
|
201
|
-
}
|
202
|
-
|
203
175
|
export namespace option {
|
204
|
-
export
|
205
|
-
static TYPE_QNAME = "0x1::option::Option";
|
206
|
-
vec: T0[] | string;
|
207
|
-
}
|
208
|
-
|
209
|
-
export interface OptionInstance extends TypedEventInstance<Option<any>> {
|
210
|
-
fields_decoded: Option<any>;
|
211
|
-
type_arguments: [string];
|
212
|
-
}
|
176
|
+
export type Option<T> = T | undefined;
|
213
177
|
}
|
214
178
|
|
215
179
|
export class string_ extends SuiBaseProcessor {
|
@@ -243,7 +207,7 @@ export class string_ extends SuiBaseProcessor {
|
|
243
207
|
export namespace string_ {
|
244
208
|
export class String {
|
245
209
|
static TYPE_QNAME = "0x1::string::String";
|
246
|
-
bytes:
|
210
|
+
bytes: number[];
|
247
211
|
}
|
248
212
|
|
249
213
|
export interface StringInstance extends TypedEventInstance<String> {
|