@sentio/sdk 2.13.2-rc.2 → 2.13.2-rc.4

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.
@@ -34,12 +34,15 @@ class SuiCodegen extends AbstractCodegen {
34
34
  }
35
35
  generateStructs(module, struct, events) {
36
36
  switch (structQname(module, struct)) {
37
+ // TODO they should still have module code generated
38
+ case '0x1::ascii::Char':
39
+ case '0x1::ascii::String':
37
40
  case '0x2::object::ID':
38
41
  return `export type ${struct.name} = string`;
39
42
  case '0x2::coin::Coin':
40
43
  return `export type ${struct.name}<T> = string`;
41
44
  case '0x2::balance::Balance':
42
- return `export type ${struct.name}<T> = string`;
45
+ return `export type ${struct.name}<T> = bigint`;
43
46
  case '0x1::option::Option':
44
47
  return `export type Option<T> = T | undefined`;
45
48
  }
@@ -47,6 +50,8 @@ class SuiCodegen extends AbstractCodegen {
47
50
  }
48
51
  generateOnEvents(module, struct) {
49
52
  switch (structQname(module, struct)) {
53
+ case '0x1::ascii::Char':
54
+ case '0x1::ascii::String':
50
55
  case '0x2::object::ID':
51
56
  case '0x2::coin::Coin':
52
57
  case '0x1::option::Option':
@@ -1 +1 @@
1
- {"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../../src/sui/codegen/codegen.ts"],"names":[],"mappings":"AAEA,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,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAEzD,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,OAAe,EACf,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EACpC,UAAU,GAAG,KAAK,EAClB,OAAO,GAAG,KAAK;IAEf,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QAC3B,OAAM;KACP;IACD,MAAM,GAAG,GAAG,IAAI,UAAU,EAAE,CAAA;IAC5B,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,QAAQ,UAAU,CAAC,CAAC,CAAA;AAC3D,CAAC;AAED,MAAM,UAAW,SAAQ,eAA8E;IACrG,YAAY,GAAG,YAAY,CAAA;IAC3B,0BAA0B;IAC1B,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAA;IAC9B,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAA;IAC9B,MAAM,GAAG,KAAK,CAAA;IACd,+BAA+B;IAC/B,2BAA2B;IAC3B,gBAAgB,GAAG,IAAI,CAAA;IAEvB;QACE,KAAK,CAAC,IAAI,eAAe,EAAE,CAAC,CAAA;IAC9B,CAAC;IAED,eAAe,CAAC,QAAgB;QAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QAC3C,IAAI,GAAG,CAAC,MAAM,EAAE;YACd,OAAO,GAAG,CAAC,MAAM,CAAA;SAClB;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,eAAe,CAAC,MAA0B,EAAE,MAA0B,EAAE,MAAmB;QACzF,QAAQ,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;YACnC,KAAK,iBAAiB;gBACpB,OAAO,eAAe,MAAM,CAAC,IAAI,WAAW,CAAA;YAC9C,KAAK,iBAAiB;gBACpB,OAAO,eAAe,MAAM,CAAC,IAAI,cAAc,CAAA;YACjD,KAAK,uBAAuB;gBAC1B,OAAO,eAAe,MAAM,CAAC,IAAI,cAAc,CAAA;YACjD,KAAK,qBAAqB;gBACxB,OAAO,uCAAuC,CAAA;SACjD;QACD,OAAO,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACtD,CAAC;IAED,gBAAgB,CAAC,MAA0B,EAAE,MAA0B;QACrE,QAAQ,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;YACnC,KAAK,iBAAiB,CAAC;YACvB,KAAK,iBAAiB,CAAC;YACvB,KAAK,qBAAqB,CAAC;YAC3B,KAAK,uBAAuB;gBAC1B,OAAO,EAAE,CAAA;SACZ;QACD,OAAO,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/C,CAAC;CACF","sourcesContent":["import { SuiMoveNormalizedModule, SuiEvent, SuiMoveObject } from '@mysten/sui.js'\n\nimport { 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 { structQname } from '../../move/index.js'\nimport { join } from 'path'\nimport { SuiChainAdapter } from '../sui-chain-adapter.js'\n\nexport async function codegen(\n abisDir: string,\n outDir = join('src', 'types', 'sui'),\n genExample = false,\n builtin = false\n) {\n if (!fs.existsSync(abisDir)) {\n return\n }\n const gen = new SuiCodegen()\n const numFiles = await gen.generate(abisDir, outDir, builtin)\n console.log(chalk.green(`Generated ${numFiles} for Sui`))\n}\n\nclass SuiCodegen extends AbstractCodegen<SuiNetwork, SuiMoveNormalizedModule, SuiEvent | SuiMoveObject> {\n ADDRESS_TYPE = 'SuiAddress'\n // ADDRESS_TYPE = 'string'\n MAIN_NET = SuiNetwork.MAIN_NET\n TEST_NET = SuiNetwork.TEST_NET\n PREFIX = 'Sui'\n // STRUCT_FIELD_NAME = 'fields'\n // GENERATE_ON_ENTRY = true\n PAYLOAD_OPTIONAL = true\n\n constructor() {\n super(new SuiChainAdapter())\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 '0x2::balance::Balance':\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 case '0x2::balance::Balance':\n return ''\n }\n return super.generateOnEvents(module, struct)\n }\n}\n"]}
1
+ {"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../../src/sui/codegen/codegen.ts"],"names":[],"mappings":"AAEA,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,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAEzD,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,OAAe,EACf,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EACpC,UAAU,GAAG,KAAK,EAClB,OAAO,GAAG,KAAK;IAEf,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;QAC3B,OAAM;KACP;IACD,MAAM,GAAG,GAAG,IAAI,UAAU,EAAE,CAAA;IAC5B,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,QAAQ,UAAU,CAAC,CAAC,CAAA;AAC3D,CAAC;AAED,MAAM,UAAW,SAAQ,eAA8E;IACrG,YAAY,GAAG,YAAY,CAAA;IAC3B,0BAA0B;IAC1B,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAA;IAC9B,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAA;IAC9B,MAAM,GAAG,KAAK,CAAA;IACd,+BAA+B;IAC/B,2BAA2B;IAC3B,gBAAgB,GAAG,IAAI,CAAA;IAEvB;QACE,KAAK,CAAC,IAAI,eAAe,EAAE,CAAC,CAAA;IAC9B,CAAC;IAED,eAAe,CAAC,QAAgB;QAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QAC3C,IAAI,GAAG,CAAC,MAAM,EAAE;YACd,OAAO,GAAG,CAAC,MAAM,CAAA;SAClB;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAED,eAAe,CAAC,MAA0B,EAAE,MAA0B,EAAE,MAAmB;QACzF,QAAQ,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;YACnC,oDAAoD;YACpD,KAAK,kBAAkB,CAAC;YACxB,KAAK,oBAAoB,CAAC;YAC1B,KAAK,iBAAiB;gBACpB,OAAO,eAAe,MAAM,CAAC,IAAI,WAAW,CAAA;YAC9C,KAAK,iBAAiB;gBACpB,OAAO,eAAe,MAAM,CAAC,IAAI,cAAc,CAAA;YACjD,KAAK,uBAAuB;gBAC1B,OAAO,eAAe,MAAM,CAAC,IAAI,cAAc,CAAA;YACjD,KAAK,qBAAqB;gBACxB,OAAO,uCAAuC,CAAA;SACjD;QACD,OAAO,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACtD,CAAC;IAED,gBAAgB,CAAC,MAA0B,EAAE,MAA0B;QACrE,QAAQ,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;YACnC,KAAK,kBAAkB,CAAC;YACxB,KAAK,oBAAoB,CAAC;YAC1B,KAAK,iBAAiB,CAAC;YACvB,KAAK,iBAAiB,CAAC;YACvB,KAAK,qBAAqB,CAAC;YAC3B,KAAK,uBAAuB;gBAC1B,OAAO,EAAE,CAAA;SACZ;QACD,OAAO,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/C,CAAC;CACF","sourcesContent":["import { SuiMoveNormalizedModule, SuiEvent, SuiMoveObject } from '@mysten/sui.js'\n\nimport { 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 { structQname } from '../../move/index.js'\nimport { join } from 'path'\nimport { SuiChainAdapter } from '../sui-chain-adapter.js'\n\nexport async function codegen(\n abisDir: string,\n outDir = join('src', 'types', 'sui'),\n genExample = false,\n builtin = false\n) {\n if (!fs.existsSync(abisDir)) {\n return\n }\n const gen = new SuiCodegen()\n const numFiles = await gen.generate(abisDir, outDir, builtin)\n console.log(chalk.green(`Generated ${numFiles} for Sui`))\n}\n\nclass SuiCodegen extends AbstractCodegen<SuiNetwork, SuiMoveNormalizedModule, SuiEvent | SuiMoveObject> {\n ADDRESS_TYPE = 'SuiAddress'\n // ADDRESS_TYPE = 'string'\n MAIN_NET = SuiNetwork.MAIN_NET\n TEST_NET = SuiNetwork.TEST_NET\n PREFIX = 'Sui'\n // STRUCT_FIELD_NAME = 'fields'\n // GENERATE_ON_ENTRY = true\n PAYLOAD_OPTIONAL = true\n\n constructor() {\n super(new SuiChainAdapter())\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 // TODO they should still have module code generated\n case '0x1::ascii::Char':\n case '0x1::ascii::String':\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 '0x2::balance::Balance':\n return `export type ${struct.name}<T> = bigint`\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 '0x1::ascii::Char':\n case '0x1::ascii::String':\n case '0x2::object::ID':\n case '0x2::coin::Coin':\n case '0x1::option::Option':\n case '0x2::balance::Balance':\n return ''\n }\n return super.generateOnEvents(module, struct)\n }\n}\n"]}
@@ -19,10 +19,13 @@ export class MoveCoder extends AbstractMoveCoder {
19
19
  }
20
20
  decode(data, type) {
21
21
  switch (type.qname) {
22
+ case '0x1::ascii::Char':
23
+ case '0x1::ascii::String':
22
24
  case '0x2::object::ID':
23
25
  case '0x2::coin::Coin':
24
- case '0x2::balance::Balance':
25
26
  return data;
27
+ case '0x2::balance::Balance':
28
+ return BigInt(data);
26
29
  case '0x1::option::Option':
27
30
  if (data === null) {
28
31
  return data;
@@ -1 +1 @@
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 { MoveCallSuiTransaction, SuiCallArg, SuiEvent, SuiMoveNormalizedModule, SuiMoveObject } from '@mysten/sui.js'\nimport { toInternalModule } from './move-types.js'\nimport { ANY_TYPE, DecodedStruct, parseMoveType, SPLITTER, TypeDescriptor } from '../move/index.js'\nimport { SuiNetwork } from './network.js'\nimport { SuiChainAdapter } from './sui-chain-adapter.js'\nimport { InternalMoveModule } from '../move/internal-models.js'\nimport { dynamic_field } from './builtin/0x2.js'\n\nexport class MoveCoder extends AbstractMoveCoder<SuiNetwork, SuiMoveNormalizedModule, SuiEvent | SuiMoveObject> {\n constructor(network: SuiNetwork) {\n super(network)\n this.adapter = new SuiChainAdapter()\n }\n\n load(module: SuiMoveNormalizedModule): InternalMoveModule {\n let m = this.moduleMapping.get(module.address + '::' + module.name)\n if (m) {\n return m\n }\n m = toInternalModule(module)\n this.loadInternal(m)\n return m\n }\n\n decode(data: any, type: TypeDescriptor): any {\n switch (type.qname) {\n case '0x2::object::ID':\n case '0x2::coin::Coin':\n case '0x2::balance::Balance':\n return data\n case '0x1::option::Option':\n if (data === null) {\n return data\n }\n return this.decode(data, type.typeArgs[0])\n default:\n return super.decode(data, type)\n }\n }\n\n decodeEvent<T>(event: SuiEvent): Promise<TypedEventInstance<T> | undefined> {\n return this.decodedStruct(event)\n }\n filterAndDecodeEvents<T>(type: TypeDescriptor<T> | string, resources: SuiEvent[]): Promise<TypedEventInstance<T>[]> {\n if (typeof type === 'string') {\n type = parseMoveType(type)\n }\n return this.filterAndDecodeStruct(type, resources)\n }\n\n async getDynamicFields<T1, T2>(\n objects: SuiMoveObject[],\n keyType: TypeDescriptor<T1> = ANY_TYPE,\n valueType: TypeDescriptor<T2> = ANY_TYPE\n ): Promise<dynamic_field.Field<T1, T2>[]> {\n // const type = dynamic_field.Field.TYPE\n // Not using the code above to avoid cycle initialize failed\n const type = new TypeDescriptor<dynamic_field.Field<T1, T2>>('0x2::dynamic_field::Field')\n type.typeArgs = [keyType, valueType]\n const res = await this.filterAndDecodeObjects(type, objects)\n return res.map((o) => o.data_decoded)\n }\n\n filterAndDecodeObjects<T>(\n type: TypeDescriptor<T>,\n objects: SuiMoveObject[]\n ): Promise<DecodedStruct<SuiMoveObject, T>[]> {\n return this.filterAndDecodeStruct(type, objects)\n }\n\n async decodeFunctionPayload(payload: MoveCallSuiTransaction, inputs: SuiCallArg[]): Promise<MoveCallSuiTransaction> {\n const functionType = [payload.package, payload.module, payload.function].join(SPLITTER)\n const func = await this.getMoveFunction(functionType)\n const params = this.adapter.getMeaningfulFunctionParams(func.params)\n const args = []\n for (const value of payload.arguments || []) {\n const argValue = value as any\n if ('Input' in (argValue as any)) {\n const idx = argValue.Input\n const arg = inputs[idx]\n if (arg.type === 'pure') {\n args.push(arg.value)\n } else if (arg.type === 'object') {\n args.push(arg.objectId)\n } else {\n console.error('unexpected function arg value')\n args.push(undefined)\n }\n // args.push(arg) // TODO check why ts not work using arg.push(arg)\n } else {\n args.push(undefined)\n }\n }\n\n const argumentsTyped = await this.decodeArray(args, params)\n return {\n ...payload,\n arguments_decoded: argumentsTyped,\n } as TypedFunctionPayload<any>\n }\n}\n\nconst MOVE_CODER = new MoveCoder(SuiNetwork.MAIN_NET)\nconst TESTNET_MOVE_CODER = new MoveCoder(SuiNetwork.TEST_NET)\n\nexport function defaultMoveCoder(network: SuiNetwork = SuiNetwork.MAIN_NET): MoveCoder {\n if (network == SuiNetwork.MAIN_NET) {\n return MOVE_CODER\n }\n return TESTNET_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 { MoveCallSuiTransaction, SuiCallArg, SuiEvent, SuiMoveNormalizedModule, SuiMoveObject } from '@mysten/sui.js'\nimport { toInternalModule } from './move-types.js'\nimport { ANY_TYPE, DecodedStruct, parseMoveType, SPLITTER, TypeDescriptor } from '../move/index.js'\nimport { SuiNetwork } from './network.js'\nimport { SuiChainAdapter } from './sui-chain-adapter.js'\nimport { InternalMoveModule } from '../move/internal-models.js'\nimport { dynamic_field } from './builtin/0x2.js'\n\nexport class MoveCoder extends AbstractMoveCoder<SuiNetwork, SuiMoveNormalizedModule, SuiEvent | SuiMoveObject> {\n constructor(network: SuiNetwork) {\n super(network)\n this.adapter = new SuiChainAdapter()\n }\n\n load(module: SuiMoveNormalizedModule): InternalMoveModule {\n let m = this.moduleMapping.get(module.address + '::' + module.name)\n if (m) {\n return m\n }\n m = toInternalModule(module)\n this.loadInternal(m)\n return m\n }\n\n decode(data: any, type: TypeDescriptor): any {\n switch (type.qname) {\n case '0x1::ascii::Char':\n case '0x1::ascii::String':\n case '0x2::object::ID':\n case '0x2::coin::Coin':\n return data\n case '0x2::balance::Balance':\n return BigInt(data)\n case '0x1::option::Option':\n if (data === null) {\n return data\n }\n return this.decode(data, type.typeArgs[0])\n default:\n return super.decode(data, type)\n }\n }\n\n decodeEvent<T>(event: SuiEvent): Promise<TypedEventInstance<T> | undefined> {\n return this.decodedStruct(event)\n }\n filterAndDecodeEvents<T>(type: TypeDescriptor<T> | string, resources: SuiEvent[]): Promise<TypedEventInstance<T>[]> {\n if (typeof type === 'string') {\n type = parseMoveType(type)\n }\n return this.filterAndDecodeStruct(type, resources)\n }\n\n async getDynamicFields<T1, T2>(\n objects: SuiMoveObject[],\n keyType: TypeDescriptor<T1> = ANY_TYPE,\n valueType: TypeDescriptor<T2> = ANY_TYPE\n ): Promise<dynamic_field.Field<T1, T2>[]> {\n // const type = dynamic_field.Field.TYPE\n // Not using the code above to avoid cycle initialize failed\n const type = new TypeDescriptor<dynamic_field.Field<T1, T2>>('0x2::dynamic_field::Field')\n type.typeArgs = [keyType, valueType]\n const res = await this.filterAndDecodeObjects(type, objects)\n return res.map((o) => o.data_decoded)\n }\n\n filterAndDecodeObjects<T>(\n type: TypeDescriptor<T>,\n objects: SuiMoveObject[]\n ): Promise<DecodedStruct<SuiMoveObject, T>[]> {\n return this.filterAndDecodeStruct(type, objects)\n }\n\n async decodeFunctionPayload(payload: MoveCallSuiTransaction, inputs: SuiCallArg[]): Promise<MoveCallSuiTransaction> {\n const functionType = [payload.package, payload.module, payload.function].join(SPLITTER)\n const func = await this.getMoveFunction(functionType)\n const params = this.adapter.getMeaningfulFunctionParams(func.params)\n const args = []\n for (const value of payload.arguments || []) {\n const argValue = value as any\n if ('Input' in (argValue as any)) {\n const idx = argValue.Input\n const arg = inputs[idx]\n if (arg.type === 'pure') {\n args.push(arg.value)\n } else if (arg.type === 'object') {\n args.push(arg.objectId)\n } else {\n console.error('unexpected function arg value')\n args.push(undefined)\n }\n // args.push(arg) // TODO check why ts not work using arg.push(arg)\n } else {\n args.push(undefined)\n }\n }\n\n const argumentsTyped = await this.decodeArray(args, params)\n return {\n ...payload,\n arguments_decoded: argumentsTyped,\n } as TypedFunctionPayload<any>\n }\n}\n\nconst MOVE_CODER = new MoveCoder(SuiNetwork.MAIN_NET)\nconst TESTNET_MOVE_CODER = new MoveCoder(SuiNetwork.TEST_NET)\n\nexport function defaultMoveCoder(network: SuiNetwork = SuiNetwork.MAIN_NET): MoveCoder {\n if (network == SuiNetwork.MAIN_NET) {\n return MOVE_CODER\n }\n return TESTNET_MOVE_CODER\n}\n"]}
@@ -98,6 +98,7 @@ export class SuiBaseProcessor {
98
98
  // const address = this.config.address
99
99
  // const moduleName = this.moduleName
100
100
  const processor = this;
101
+ const allFunctionType = new Set(_filters.map((f) => processor.config.address + '::' + f.function));
101
102
  this.callHandlers.push({
102
103
  handler: async function (data) {
103
104
  if (!data.transaction) {
@@ -107,17 +108,25 @@ export class SuiBaseProcessor {
107
108
  const ctx = new SuiContext(processor.moduleName, processor.config.network, processor.config.address, data.timestamp || new Date(0), data.slot, tx, 0);
108
109
  if (tx) {
109
110
  const calls = getMoveCalls(tx);
110
- if (calls.length !== 1) {
111
- throw new ServerError(Status.INVALID_ARGUMENT, 'Unexpected number of call transactions ' + calls.length);
112
- }
111
+ // if (calls.length !== 1) {
112
+ // throw new ServerError(Status.INVALID_ARGUMENT, 'Unexpected number of call transactions ' + calls.length)
113
+ // }
113
114
  const txKind = getTransactionKind(tx);
114
115
  if (!txKind) {
115
116
  throw new ServerError(Status.INVALID_ARGUMENT, 'Unexpected getTransactionKind get empty');
116
117
  }
117
118
  const programmableTx = getProgrammableTransaction(txKind);
118
- const payload = calls[0];
119
- const decoded = await processor.coder.decodeFunctionPayload(payload, programmableTx?.inputs || []);
120
- await handler(decoded, ctx);
119
+ let matched;
120
+ // TODO potential pass index
121
+ for (const call of calls) {
122
+ if (allFunctionType.has(call.function)) {
123
+ matched = call;
124
+ break;
125
+ }
126
+ const payload = calls[0];
127
+ const decoded = await processor.coder.decodeFunctionPayload(payload, programmableTx?.inputs || []);
128
+ await handler(decoded, ctx);
129
+ }
121
130
  }
122
131
  return ctx.getProcessResult();
123
132
  },
@@ -1 +1 @@
1
- {"version":3,"file":"sui-processor.js","sourceRoot":"","sources":["../../src/sui/sui-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Data_SuiCall,\n Data_SuiEvent,\n Data_SuiObject,\n HandleInterval,\n MoveFetchConfig,\n MoveOnIntervalConfig_OwnerType,\n ProcessResult,\n} from '@sentio/protos'\nimport { ListStateStorage, mergeProcessResults } from '@sentio/runtime'\nimport { getChainId, SuiNetwork } from './network.js'\nimport { ServerError, Status } from 'nice-grpc'\nimport { SuiContext, SuiObjectsContext } from './context.js'\nimport {\n getProgrammableTransaction,\n getTransactionKind,\n MoveCallSuiTransaction,\n SuiEvent,\n SuiMoveObject,\n SuiTransactionBlockResponse,\n} from '@mysten/sui.js'\nimport { CallHandler, EventFilter, EventHandler, FunctionNameAndCallFilter, parseMoveType } from '../move/index.js'\nimport { getMoveCalls } from './utils.js'\nimport { defaultMoveCoder, MoveCoder } from './move-coder.js'\nimport { PromiseOrVoid } from '../core/index.js'\n// import { dynamic_field } from './builtin/0x2.js'\n\nconst DEFAULT_FETCH_CONFIG: MoveFetchConfig = {\n resourceChanges: false,\n allEvents: true,\n}\n\nclass IndexConfigure {\n address: string\n network: SuiNetwork\n startCheckpoint: bigint\n}\n\nexport class SuiBindOptions {\n address: string\n network?: SuiNetwork\n startCheckpoint?: bigint\n}\n\nexport class SuiObjectBindOptions {\n objectId: string\n network?: SuiNetwork\n startCheckpoint?: bigint\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 coder: MoveCoder\n\n constructor(name: string, options: SuiBindOptions) {\n this.moduleName = name\n this.config = configure(options)\n SuiProcessorState.INSTANCE.addValue(this)\n this.coder = defaultMoveCoder(this.config.network)\n }\n\n getChainId(): string {\n return getChainId(this.config.network)\n }\n\n public onMoveEvent(\n handler: (event: SuiEvent, ctx: SuiContext) => void,\n filter: EventFilter | EventFilter[],\n fetchConfig?: Partial<MoveFetchConfig>\n ): SuiBaseProcessor {\n let _filters: EventFilter[] = []\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig })\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 const allEventType = new Set(_filters.map((f) => processor.config.address + '::' + f.type))\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 SuiTransactionBlockResponse\n if (!txn.events || !txn.events.length) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'no event in the transactions')\n }\n\n const processResults = []\n for (const [idx, evt] of (txn.events as SuiEvent[]).entries()) {\n const typeQname = parseMoveType(evt.type).qname\n if (!allEventType.has(typeQname)) {\n continue\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 idx\n )\n\n const decoded = await processor.coder.decodeEvent<any>(evt)\n await handler(decoded || evt, ctx)\n processResults.push(ctx.getProcessResult())\n }\n\n return mergeProcessResults(processResults)\n },\n filters: _filters,\n fetchConfig: _fetchConfig,\n })\n return this\n }\n\n public onEntryFunctionCall(\n handler: (call: MoveCallSuiTransaction, ctx: SuiContext) => void,\n filter: FunctionNameAndCallFilter | FunctionNameAndCallFilter[],\n fetchConfig?: Partial<MoveFetchConfig>\n ): SuiBaseProcessor {\n let _filters: FunctionNameAndCallFilter[] = []\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig })\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 SuiTransactionBlockResponse\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 0\n )\n if (tx) {\n const calls: MoveCallSuiTransaction[] = getMoveCalls(tx)\n if (calls.length !== 1) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Unexpected number of call transactions ' + calls.length)\n }\n const txKind = getTransactionKind(tx)\n if (!txKind) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Unexpected getTransactionKind get empty')\n }\n const programmableTx = getProgrammableTransaction(txKind)\n\n const payload = calls[0]\n const decoded = await processor.coder.decodeFunctionPayload(payload, programmableTx?.inputs || [])\n await handler(decoded, ctx)\n }\n return ctx.getProcessResult()\n },\n filters: _filters,\n fetchConfig: _fetchConfig,\n })\n return this\n }\n}\n\nclass ObjectHandler {\n type?: string\n versionInterval?: HandleInterval\n timeIntervalInMinutes?: HandleInterval\n handler: (resource: Data_SuiObject) => Promise<ProcessResult>\n}\n\nexport class SuiAccountProcessorState extends ListStateStorage<SuiBaseObjectsProcessor<any>> {\n static INSTANCE = new SuiAccountProcessorState()\n}\n\nclass SuiObjectsBindOptions extends SuiBindOptions {\n ownerType: MoveOnIntervalConfig_OwnerType\n}\n\nabstract class SuiBaseObjectsProcessor<HandlerType> {\n config: IndexConfigure\n ownerType: MoveOnIntervalConfig_OwnerType\n\n objectHandlers: ObjectHandler[] = []\n\n // static bind(options: SuiObjectsBindOptions): SuiBaseObjectsProcessor<any> {\n // return new SuiBaseObjectsProcessor(options)\n // }\n\n protected constructor(options: SuiObjectsBindOptions) {\n this.config = configure(options)\n this.ownerType = options.ownerType\n SuiAccountProcessorState.INSTANCE.addValue(this)\n }\n\n getChainId(): string {\n return getChainId(this.config.network)\n }\n\n protected abstract transformObjects(objects: SuiMoveObject[]): HandlerType[]\n\n protected onInterval(\n handler: (resources: HandlerType[], ctx: SuiObjectsContext) => PromiseOrVoid,\n timeInterval: HandleInterval | undefined,\n versionInterval: HandleInterval | undefined,\n type: string | undefined\n ): this {\n const processor = this\n this.objectHandlers.push({\n handler: async function (data) {\n const ctx = new SuiObjectsContext(\n processor.config.network,\n processor.config.address,\n data.slot,\n data.timestamp || new Date(0)\n )\n await handler(processor.transformObjects(data.objects as SuiMoveObject[]), ctx)\n return ctx.getProcessResult()\n },\n timeIntervalInMinutes: timeInterval,\n versionInterval: versionInterval,\n type,\n })\n return this\n }\n\n public onTimeInterval(\n handler: (objects: HandlerType[], ctx: SuiObjectsContext) => PromiseOrVoid,\n timeIntervalInMinutes = 60,\n backfillTimeIntervalInMinutes = 240,\n type?: string\n ): this {\n return this.onInterval(\n handler,\n {\n recentInterval: timeIntervalInMinutes,\n backfillInterval: backfillTimeIntervalInMinutes,\n },\n undefined,\n type\n )\n }\n\n public onSlotInterval(\n handler: (objects: HandlerType[], ctx: SuiObjectsContext) => PromiseOrVoid,\n slotInterval = 100000,\n backfillSlotInterval = 400000,\n type?: string\n ): this {\n return this.onInterval(\n handler,\n undefined,\n { recentInterval: slotInterval, backfillInterval: backfillSlotInterval },\n type\n )\n }\n}\n\nfunction configure(options: SuiBindOptions): IndexConfigure {\n return {\n startCheckpoint: options.startCheckpoint || 0n,\n address: options.address,\n network: options.network || SuiNetwork.MAIN_NET,\n }\n}\n\nexport class SuiAddressObjectsProcessor extends SuiBaseObjectsProcessor<SuiMoveObject> {\n static bind(options: SuiBindOptions): SuiAddressObjectsProcessor {\n return new SuiAddressObjectsProcessor({ ...options, ownerType: MoveOnIntervalConfig_OwnerType.ADDRESS })\n }\n\n protected transformObjects(objects: SuiMoveObject[]): SuiMoveObject[] {\n return objects\n }\n}\n// export class SuiDynamicFieldObjectsProcessor extends SuiBaseObjectsProcessor<dynamic_field.Field<any, any>> {\nexport class SuiDynamicFieldObjectsProcessor extends SuiBaseObjectsProcessor<SuiMoveObject> {\n static bind(options: SuiObjectBindOptions): SuiDynamicFieldObjectsProcessor {\n return new SuiDynamicFieldObjectsProcessor({\n address: options.objectId,\n network: options.network,\n startCheckpoint: options.startCheckpoint,\n ownerType: MoveOnIntervalConfig_OwnerType.OBJECT,\n })\n }\n\n protected transformObjects(objects: SuiMoveObject[]) {\n return objects\n // return defaultMoveCoder().getObjectsFromDynamicFields(objects)\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 {\n Data_SuiCall,\n Data_SuiEvent,\n Data_SuiObject,\n HandleInterval,\n MoveFetchConfig,\n MoveOnIntervalConfig_OwnerType,\n ProcessResult,\n} from '@sentio/protos'\nimport { ListStateStorage, mergeProcessResults } from '@sentio/runtime'\nimport { getChainId, SuiNetwork } from './network.js'\nimport { ServerError, Status } from 'nice-grpc'\nimport { SuiContext, SuiObjectsContext } from './context.js'\nimport {\n getProgrammableTransaction,\n getTransactionKind,\n MoveCallSuiTransaction,\n SuiEvent,\n SuiMoveObject,\n SuiTransactionBlockResponse,\n} from '@mysten/sui.js'\nimport { CallHandler, EventFilter, EventHandler, FunctionNameAndCallFilter, parseMoveType } from '../move/index.js'\nimport { getMoveCalls } from './utils.js'\nimport { defaultMoveCoder, MoveCoder } from './move-coder.js'\nimport { PromiseOrVoid } from '../core/index.js'\n// import { dynamic_field } from './builtin/0x2.js'\n\nconst DEFAULT_FETCH_CONFIG: MoveFetchConfig = {\n resourceChanges: false,\n allEvents: true,\n}\n\nclass IndexConfigure {\n address: string\n network: SuiNetwork\n startCheckpoint: bigint\n}\n\nexport class SuiBindOptions {\n address: string\n network?: SuiNetwork\n startCheckpoint?: bigint\n}\n\nexport class SuiObjectBindOptions {\n objectId: string\n network?: SuiNetwork\n startCheckpoint?: bigint\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 coder: MoveCoder\n\n constructor(name: string, options: SuiBindOptions) {\n this.moduleName = name\n this.config = configure(options)\n SuiProcessorState.INSTANCE.addValue(this)\n this.coder = defaultMoveCoder(this.config.network)\n }\n\n getChainId(): string {\n return getChainId(this.config.network)\n }\n\n public onMoveEvent(\n handler: (event: SuiEvent, ctx: SuiContext) => void,\n filter: EventFilter | EventFilter[],\n fetchConfig?: Partial<MoveFetchConfig>\n ): SuiBaseProcessor {\n let _filters: EventFilter[] = []\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig })\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 const allEventType = new Set(_filters.map((f) => processor.config.address + '::' + f.type))\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 SuiTransactionBlockResponse\n if (!txn.events || !txn.events.length) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'no event in the transactions')\n }\n\n const processResults = []\n for (const [idx, evt] of (txn.events as SuiEvent[]).entries()) {\n const typeQname = parseMoveType(evt.type).qname\n if (!allEventType.has(typeQname)) {\n continue\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 idx\n )\n\n const decoded = await processor.coder.decodeEvent<any>(evt)\n await handler(decoded || evt, ctx)\n processResults.push(ctx.getProcessResult())\n }\n\n return mergeProcessResults(processResults)\n },\n filters: _filters,\n fetchConfig: _fetchConfig,\n })\n return this\n }\n\n public onEntryFunctionCall(\n handler: (call: MoveCallSuiTransaction, ctx: SuiContext) => void,\n filter: FunctionNameAndCallFilter | FunctionNameAndCallFilter[],\n fetchConfig?: Partial<MoveFetchConfig>\n ): SuiBaseProcessor {\n let _filters: FunctionNameAndCallFilter[] = []\n const _fetchConfig = MoveFetchConfig.fromPartial({ ...DEFAULT_FETCH_CONFIG, ...fetchConfig })\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 const allFunctionType = new Set(_filters.map((f) => processor.config.address + '::' + f.function))\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 SuiTransactionBlockResponse\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 0\n )\n if (tx) {\n const calls: MoveCallSuiTransaction[] = getMoveCalls(tx)\n // if (calls.length !== 1) {\n // throw new ServerError(Status.INVALID_ARGUMENT, 'Unexpected number of call transactions ' + calls.length)\n // }\n const txKind = getTransactionKind(tx)\n if (!txKind) {\n throw new ServerError(Status.INVALID_ARGUMENT, 'Unexpected getTransactionKind get empty')\n }\n const programmableTx = getProgrammableTransaction(txKind)\n\n let matched: MoveCallSuiTransaction\n // TODO potential pass index\n for (const call of calls) {\n if (allFunctionType.has(call.function)) {\n matched = call\n break\n }\n\n const payload = calls[0]\n const decoded = await processor.coder.decodeFunctionPayload(payload, programmableTx?.inputs || [])\n await handler(decoded, ctx)\n }\n }\n return ctx.getProcessResult()\n },\n filters: _filters,\n fetchConfig: _fetchConfig,\n })\n return this\n }\n}\n\nclass ObjectHandler {\n type?: string\n versionInterval?: HandleInterval\n timeIntervalInMinutes?: HandleInterval\n handler: (resource: Data_SuiObject) => Promise<ProcessResult>\n}\n\nexport class SuiAccountProcessorState extends ListStateStorage<SuiBaseObjectsProcessor<any>> {\n static INSTANCE = new SuiAccountProcessorState()\n}\n\nclass SuiObjectsBindOptions extends SuiBindOptions {\n ownerType: MoveOnIntervalConfig_OwnerType\n}\n\nabstract class SuiBaseObjectsProcessor<HandlerType> {\n config: IndexConfigure\n ownerType: MoveOnIntervalConfig_OwnerType\n\n objectHandlers: ObjectHandler[] = []\n\n // static bind(options: SuiObjectsBindOptions): SuiBaseObjectsProcessor<any> {\n // return new SuiBaseObjectsProcessor(options)\n // }\n\n protected constructor(options: SuiObjectsBindOptions) {\n this.config = configure(options)\n this.ownerType = options.ownerType\n SuiAccountProcessorState.INSTANCE.addValue(this)\n }\n\n getChainId(): string {\n return getChainId(this.config.network)\n }\n\n protected abstract transformObjects(objects: SuiMoveObject[]): HandlerType[]\n\n protected onInterval(\n handler: (resources: HandlerType[], ctx: SuiObjectsContext) => PromiseOrVoid,\n timeInterval: HandleInterval | undefined,\n versionInterval: HandleInterval | undefined,\n type: string | undefined\n ): this {\n const processor = this\n this.objectHandlers.push({\n handler: async function (data) {\n const ctx = new SuiObjectsContext(\n processor.config.network,\n processor.config.address,\n data.slot,\n data.timestamp || new Date(0)\n )\n await handler(processor.transformObjects(data.objects as SuiMoveObject[]), ctx)\n return ctx.getProcessResult()\n },\n timeIntervalInMinutes: timeInterval,\n versionInterval: versionInterval,\n type,\n })\n return this\n }\n\n public onTimeInterval(\n handler: (objects: HandlerType[], ctx: SuiObjectsContext) => PromiseOrVoid,\n timeIntervalInMinutes = 60,\n backfillTimeIntervalInMinutes = 240,\n type?: string\n ): this {\n return this.onInterval(\n handler,\n {\n recentInterval: timeIntervalInMinutes,\n backfillInterval: backfillTimeIntervalInMinutes,\n },\n undefined,\n type\n )\n }\n\n public onSlotInterval(\n handler: (objects: HandlerType[], ctx: SuiObjectsContext) => PromiseOrVoid,\n slotInterval = 100000,\n backfillSlotInterval = 400000,\n type?: string\n ): this {\n return this.onInterval(\n handler,\n undefined,\n { recentInterval: slotInterval, backfillInterval: backfillSlotInterval },\n type\n )\n }\n}\n\nfunction configure(options: SuiBindOptions): IndexConfigure {\n return {\n startCheckpoint: options.startCheckpoint || 0n,\n address: options.address,\n network: options.network || SuiNetwork.MAIN_NET,\n }\n}\n\nexport class SuiAddressObjectsProcessor extends SuiBaseObjectsProcessor<SuiMoveObject> {\n static bind(options: SuiBindOptions): SuiAddressObjectsProcessor {\n return new SuiAddressObjectsProcessor({ ...options, ownerType: MoveOnIntervalConfig_OwnerType.ADDRESS })\n }\n\n protected transformObjects(objects: SuiMoveObject[]): SuiMoveObject[] {\n return objects\n }\n}\n// export class SuiDynamicFieldObjectsProcessor extends SuiBaseObjectsProcessor<dynamic_field.Field<any, any>> {\nexport class SuiDynamicFieldObjectsProcessor extends SuiBaseObjectsProcessor<SuiMoveObject> {\n static bind(options: SuiObjectBindOptions): SuiDynamicFieldObjectsProcessor {\n return new SuiDynamicFieldObjectsProcessor({\n address: options.objectId,\n network: options.network,\n startCheckpoint: options.startCheckpoint,\n ownerType: MoveOnIntervalConfig_OwnerType.OBJECT,\n })\n }\n\n protected transformObjects(objects: SuiMoveObject[]) {\n return objects\n // return defaultMoveCoder().getObjectsFromDynamicFields(objects)\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.13.2-rc.2",
4
+ "version": "2.13.2-rc.4",
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.28",
26
- "@sentio/protos": "^2.13.2-rc.2",
27
- "@sentio/runtime": "^2.13.2-rc.2",
26
+ "@sentio/protos": "^2.13.2-rc.4",
27
+ "@sentio/runtime": "^2.13.2-rc.4",
28
28
  "@solana/web3.js": "^1.74.0",
29
29
  "@types/prettier": "^2.7.2",
30
30
  "aptos-sdk": "npm:aptos@^1.8.3",
@@ -88,5 +88,5 @@
88
88
  "engines": {
89
89
  "node": ">=16"
90
90
  },
91
- "gitHead": "3d612c2c0329322f5fa4f962c39bb6a3a881a861"
91
+ "gitHead": "219e58354c9bc8276061e94dbf41d6de24003e15"
92
92
  }
@@ -20,86 +20,9 @@ import { SuiAddress, ModuleClient } from "@sentio/sdk/sui";
20
20
 
21
21
  export namespace address {}
22
22
 
23
- export class ascii extends SuiBaseProcessor {
24
- constructor(options: SuiBindOptions) {
25
- super("ascii", options);
26
- }
27
- static DEFAULT_OPTIONS: SuiBindOptions = {
28
- address: "0x1",
29
- network: SuiNetwork.MAIN_NET,
30
- };
31
-
32
- static bind(options: Partial<SuiBindOptions> = {}): ascii {
33
- return new ascii({ ...ascii.DEFAULT_OPTIONS, ...options });
34
- }
35
-
36
- onEventChar(
37
- func: (event: ascii.CharInstance, ctx: SuiContext) => void,
38
- fetchConfig?: Partial<MoveFetchConfig>
39
- ): ascii {
40
- this.onMoveEvent(
41
- func,
42
- {
43
- type: "ascii::Char",
44
- },
45
- fetchConfig
46
- );
47
- return this;
48
- }
49
-
50
- onEventString(
51
- func: (event: ascii.StringInstance, ctx: SuiContext) => void,
52
- fetchConfig?: Partial<MoveFetchConfig>
53
- ): ascii {
54
- this.onMoveEvent(
55
- func,
56
- {
57
- type: "ascii::String",
58
- },
59
- fetchConfig
60
- );
61
- return this;
62
- }
63
- }
64
-
65
23
  export namespace ascii {
66
- export interface Char {
67
- byte: number;
68
- }
69
-
70
- export namespace Char {
71
- export const TYPE_QNAME = "0x1::ascii::Char";
72
-
73
- const TYPE = new TypeDescriptor<Char>(Char.TYPE_QNAME);
74
-
75
- export function type(): TypeDescriptor<Char> {
76
- return TYPE.apply();
77
- }
78
- }
79
-
80
- export interface CharInstance extends TypedEventInstance<Char> {
81
- data_decoded: Char;
82
- type_arguments: [];
83
- }
84
-
85
- export interface String {
86
- bytes: number[];
87
- }
88
-
89
- export namespace String {
90
- export const TYPE_QNAME = "0x1::ascii::String";
91
-
92
- const TYPE = new TypeDescriptor<String>(String.TYPE_QNAME);
93
-
94
- export function type(): TypeDescriptor<String> {
95
- return TYPE.apply();
96
- }
97
- }
98
-
99
- export interface StringInstance extends TypedEventInstance<String> {
100
- data_decoded: String;
101
- type_arguments: [];
102
- }
24
+ export type Char = string;
25
+ export type String = string;
103
26
  }
104
27
 
105
28
  export namespace bcs {}
@@ -40,7 +40,7 @@ export namespace bag {
40
40
  }
41
41
 
42
42
  export namespace balance {
43
- export type Balance<T> = string;
43
+ export type Balance<T> = bigint;
44
44
 
45
45
  export interface Supply<T0> {
46
46
  value: bigint;
@@ -47,12 +47,15 @@ class SuiCodegen extends AbstractCodegen<SuiNetwork, SuiMoveNormalizedModule, Su
47
47
 
48
48
  generateStructs(module: InternalMoveModule, struct: InternalMoveStruct, events: Set<string>): string {
49
49
  switch (structQname(module, struct)) {
50
+ // TODO they should still have module code generated
51
+ case '0x1::ascii::Char':
52
+ case '0x1::ascii::String':
50
53
  case '0x2::object::ID':
51
54
  return `export type ${struct.name} = string`
52
55
  case '0x2::coin::Coin':
53
56
  return `export type ${struct.name}<T> = string`
54
57
  case '0x2::balance::Balance':
55
- return `export type ${struct.name}<T> = string`
58
+ return `export type ${struct.name}<T> = bigint`
56
59
  case '0x1::option::Option':
57
60
  return `export type Option<T> = T | undefined`
58
61
  }
@@ -61,6 +64,8 @@ class SuiCodegen extends AbstractCodegen<SuiNetwork, SuiMoveNormalizedModule, Su
61
64
 
62
65
  generateOnEvents(module: InternalMoveModule, struct: InternalMoveStruct): string {
63
66
  switch (structQname(module, struct)) {
67
+ case '0x1::ascii::Char':
68
+ case '0x1::ascii::String':
64
69
  case '0x2::object::ID':
65
70
  case '0x2::coin::Coin':
66
71
  case '0x1::option::Option':
@@ -26,10 +26,13 @@ export class MoveCoder extends AbstractMoveCoder<SuiNetwork, SuiMoveNormalizedMo
26
26
 
27
27
  decode(data: any, type: TypeDescriptor): any {
28
28
  switch (type.qname) {
29
+ case '0x1::ascii::Char':
30
+ case '0x1::ascii::String':
29
31
  case '0x2::object::ID':
30
32
  case '0x2::coin::Coin':
31
- case '0x2::balance::Balance':
32
33
  return data
34
+ case '0x2::balance::Balance':
35
+ return BigInt(data)
33
36
  case '0x1::option::Option':
34
37
  if (data === null) {
35
38
  return data
@@ -148,6 +148,7 @@ export class SuiBaseProcessor {
148
148
  // const address = this.config.address
149
149
  // const moduleName = this.moduleName
150
150
  const processor = this
151
+ const allFunctionType = new Set(_filters.map((f) => processor.config.address + '::' + f.function))
151
152
 
152
153
  this.callHandlers.push({
153
154
  handler: async function (data) {
@@ -167,18 +168,27 @@ export class SuiBaseProcessor {
167
168
  )
168
169
  if (tx) {
169
170
  const calls: MoveCallSuiTransaction[] = getMoveCalls(tx)
170
- if (calls.length !== 1) {
171
- throw new ServerError(Status.INVALID_ARGUMENT, 'Unexpected number of call transactions ' + calls.length)
172
- }
171
+ // if (calls.length !== 1) {
172
+ // throw new ServerError(Status.INVALID_ARGUMENT, 'Unexpected number of call transactions ' + calls.length)
173
+ // }
173
174
  const txKind = getTransactionKind(tx)
174
175
  if (!txKind) {
175
176
  throw new ServerError(Status.INVALID_ARGUMENT, 'Unexpected getTransactionKind get empty')
176
177
  }
177
178
  const programmableTx = getProgrammableTransaction(txKind)
178
179
 
179
- const payload = calls[0]
180
- const decoded = await processor.coder.decodeFunctionPayload(payload, programmableTx?.inputs || [])
181
- await handler(decoded, ctx)
180
+ let matched: MoveCallSuiTransaction
181
+ // TODO potential pass index
182
+ for (const call of calls) {
183
+ if (allFunctionType.has(call.function)) {
184
+ matched = call
185
+ break
186
+ }
187
+
188
+ const payload = calls[0]
189
+ const decoded = await processor.coder.decodeFunctionPayload(payload, programmableTx?.inputs || [])
190
+ await handler(decoded, ctx)
191
+ }
182
192
  }
183
193
  return ctx.getProcessResult()
184
194
  },