@typemove/sui 1.2.0-rc.2 → 1.2.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.
Files changed (75) hide show
  1. package/dist/cjs/builtin/0x1.d.ts +83 -82
  2. package/dist/cjs/builtin/0x1.d.ts.map +1 -1
  3. package/dist/cjs/builtin/0x1.js +164 -164
  4. package/dist/cjs/builtin/0x1.js.map +1 -1
  5. package/dist/cjs/builtin/0x2.d.ts +353 -349
  6. package/dist/cjs/builtin/0x2.d.ts.map +1 -1
  7. package/dist/cjs/builtin/0x2.js +698 -698
  8. package/dist/cjs/builtin/0x2.js.map +1 -1
  9. package/dist/cjs/builtin/0x3.d.ts +101 -100
  10. package/dist/cjs/builtin/0x3.d.ts.map +1 -1
  11. package/dist/cjs/builtin/0x3.js +200 -200
  12. package/dist/cjs/builtin/0x3.js.map +1 -1
  13. package/dist/cjs/codegen/codegen.d.ts.map +1 -1
  14. package/dist/cjs/codegen/codegen.js +11 -8
  15. package/dist/cjs/codegen/codegen.js.map +1 -1
  16. package/dist/cjs/index.d.ts +1 -1
  17. package/dist/cjs/index.d.ts.map +1 -1
  18. package/dist/cjs/index.js +2 -1
  19. package/dist/cjs/index.js.map +1 -1
  20. package/dist/cjs/models.d.ts +7 -1
  21. package/dist/cjs/models.d.ts.map +1 -1
  22. package/dist/cjs/models.js +0 -3
  23. package/dist/cjs/models.js.map +1 -1
  24. package/dist/cjs/move-coder.d.ts +6 -3
  25. package/dist/cjs/move-coder.d.ts.map +1 -1
  26. package/dist/cjs/move-coder.js +50 -5
  27. package/dist/cjs/move-coder.js.map +1 -1
  28. package/dist/cjs/sui-chain-adapter.d.ts +4 -1
  29. package/dist/cjs/sui-chain-adapter.d.ts.map +1 -1
  30. package/dist/cjs/sui-chain-adapter.js +10 -4
  31. package/dist/cjs/sui-chain-adapter.js.map +1 -1
  32. package/dist/esm/builtin/0x1.d.ts +83 -82
  33. package/dist/esm/builtin/0x1.d.ts.map +1 -1
  34. package/dist/esm/builtin/0x1.js +165 -165
  35. package/dist/esm/builtin/0x1.js.map +1 -1
  36. package/dist/esm/builtin/0x2.d.ts +353 -349
  37. package/dist/esm/builtin/0x2.d.ts.map +1 -1
  38. package/dist/esm/builtin/0x2.js +699 -699
  39. package/dist/esm/builtin/0x2.js.map +1 -1
  40. package/dist/esm/builtin/0x3.d.ts +101 -100
  41. package/dist/esm/builtin/0x3.d.ts.map +1 -1
  42. package/dist/esm/builtin/0x3.js +201 -201
  43. package/dist/esm/builtin/0x3.js.map +1 -1
  44. package/dist/esm/codegen/codegen.d.ts.map +1 -1
  45. package/dist/esm/codegen/codegen.js +12 -9
  46. package/dist/esm/codegen/codegen.js.map +1 -1
  47. package/dist/esm/index.d.ts +1 -1
  48. package/dist/esm/index.d.ts.map +1 -1
  49. package/dist/esm/index.js +1 -1
  50. package/dist/esm/index.js.map +1 -1
  51. package/dist/esm/models.d.ts +7 -1
  52. package/dist/esm/models.d.ts.map +1 -1
  53. package/dist/esm/models.js +0 -3
  54. package/dist/esm/models.js.map +1 -1
  55. package/dist/esm/move-coder.d.ts +6 -3
  56. package/dist/esm/move-coder.d.ts.map +1 -1
  57. package/dist/esm/move-coder.js +48 -4
  58. package/dist/esm/move-coder.js.map +1 -1
  59. package/dist/esm/sui-chain-adapter.d.ts +4 -1
  60. package/dist/esm/sui-chain-adapter.d.ts.map +1 -1
  61. package/dist/esm/sui-chain-adapter.js +10 -4
  62. package/dist/esm/sui-chain-adapter.js.map +1 -1
  63. package/package.json +2 -2
  64. package/src/builtin/0x1.ts +503 -247
  65. package/src/builtin/0x2.ts +2137 -1049
  66. package/src/builtin/0x3.ts +611 -301
  67. package/src/codegen/codegen.ts +14 -10
  68. package/src/index.ts +1 -1
  69. package/src/models.ts +7 -4
  70. package/src/move-coder.ts +57 -6
  71. package/src/sui-chain-adapter.ts +11 -4
  72. package/src/tests/types/testnet/0x1e2b124f746a339b3cf99b9f969393a96594519aafb1d06517aacfeeae20e7a5.ts +29 -13
  73. package/src/tests/types/testnet/0x6c4a21e3e7e6b6d51c4604021633e1d97e24e37a696f8c082cd48f37503e602a.ts +319 -145
  74. package/src/tests/types/testnet/0xdee9.ts +303 -142
  75. package/src/tests/types/testnet/0xebaa2ad3eacc230f309cd933958cc52684df0a41ae7ac214d186b80f830867d2.ts +990 -466
@@ -1,4 +1,4 @@
1
- import { SuiMoveNormalizedModule, SuiEvent, SuiMoveObject } from '@mysten/sui.js/client'
1
+ import { SuiMoveNormalizedModule, SuiEvent, SuiMoveObject, SuiClient } from '@mysten/sui.js/client'
2
2
 
3
3
  import * as fs from 'fs'
4
4
  import chalk from 'chalk'
@@ -10,7 +10,7 @@ import {
10
10
  InternalMoveFunction,
11
11
  InternalMoveFunctionVisibility,
12
12
  normalizeToJSName,
13
- camel,
13
+ camel
14
14
  } from '@typemove/move'
15
15
  import { join } from 'path'
16
16
  import { SuiChainAdapter } from '../sui-chain-adapter.js'
@@ -46,7 +46,7 @@ export class SuiCodegen extends AbstractCodegen<
46
46
  PAYLOAD_OPTIONAL = true
47
47
 
48
48
  constructor(endpoint: string) {
49
- super(new SuiChainAdapter(endpoint))
49
+ super(new SuiChainAdapter(new SuiClient({ url: endpoint })))
50
50
  }
51
51
 
52
52
  readModulesFile(fullPath: string) {
@@ -113,7 +113,7 @@ export class SuiCodegen extends AbstractCodegen<
113
113
  if (arg.reference) {
114
114
  args.push({
115
115
  paramType: `${this.ADDRESS_TYPE} | ObjectCallArg | TransactionArgument`,
116
- callValue: `_args.push(TransactionArgument.is(args[${idx}]) ? args[${idx}] : tx.object(args[${idx}]))`,
116
+ callValue: `_args.push(TransactionArgument.is(args[${idx}]) ? args[${idx}] : tx.object(args[${idx}]))`
117
117
  })
118
118
  } else if (arg.isVector()) {
119
119
  args.push({
@@ -121,12 +121,12 @@ export class SuiCodegen extends AbstractCodegen<
121
121
  callValue: `_args.push(TransactionArgument.is(args[${idx}]) ? args[${idx}] : tx.makeMoveVec({
122
122
  objects: args[${idx}].map((a: any) => tx.object(a))
123
123
  // type: TODO
124
- }))`,
124
+ }))`
125
125
  })
126
126
  } else {
127
127
  args.push({
128
128
  paramType: `${this.generateTypeForDescriptor(arg, module.address)} | TransactionArgument`,
129
- callValue: `_args.push(TransactionArgument.is(args[${idx}]) ? args[${idx}] : tx.pure(args[${idx}]))`,
129
+ callValue: `_args.push(TransactionArgument.is(args[${idx}]) ? args[${idx}] : tx.pure(args[${idx}]))`
130
130
  })
131
131
  }
132
132
  }
@@ -146,18 +146,22 @@ export class SuiCodegen extends AbstractCodegen<
146
146
  .join(',')
147
147
 
148
148
  const args = this.generateArgs(module, func)
149
+ const returnType = `${this.generateFunctionReturnTypeParameters(func, module.address)}`
149
150
 
150
151
  return `export async function ${camel(normalizeToJSName(func.name))}${genericString}(
151
152
  client: SuiClient,
152
153
  args: [${args.map((a) => a.paramType).join(',')}],
153
- ${typeParamArg.length > 0 ? `typeArguments: [${typeParamArg}]` : ``} ) {
154
+ ${
155
+ typeParamArg.length > 0 ? `typeArguments: [${typeParamArg}]` : ``
156
+ } ): Promise<TypedDevInspectResults<${returnType}>> {
154
157
  const tx = new TransactionBlock()
155
158
  builder.${camel(normalizeToJSName(func.name))}(tx, args ${typeParamArg.length > 0 ? `, typeArguments` : ''})
156
- const res = await client.devInspectTransactionBlock({
159
+ const insepctRes = await client.devInspectTransactionBlock({
157
160
  transactionBlock: tx,
158
161
  sender: ZERO_ADDRESS
159
162
  })
160
- return res
163
+
164
+ return (await getMoveCoder(client)).decodeDevInspectResult<${returnType}>(insepctRes)
161
165
  }`
162
166
  }
163
167
 
@@ -200,7 +204,7 @@ export class SuiCodegen extends AbstractCodegen<
200
204
  generateImports(): string {
201
205
  return `
202
206
  ${super.generateImports()}
203
- import { ZERO_ADDRESS } from '@typemove/sui'
207
+ import { ZERO_ADDRESS, TypedDevInspectResults, getMoveCoder } from '@typemove/sui'
204
208
  import { TransactionBlock } from '@mysten/sui.js/transactions'
205
209
  import { ObjectCallArg, TransactionArgument } from '@mysten/sui.js'
206
210
  import { SuiClient } from '@mysten/sui.js/client'
package/src/index.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export * from './models.js'
2
2
 
3
- export { MoveCoder, defaultMoveCoder } from './move-coder.js'
3
+ export { MoveCoder, defaultMoveCoder, getMoveCoder } from './move-coder.js'
package/src/models.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { SuiEvent, MoveCallSuiTransaction, SuiMoveObject } from '@mysten/sui.js/client'
1
+ import type { SuiEvent, MoveCallSuiTransaction, SuiMoveObject, DevInspectResults } from '@mysten/sui.js/client'
2
2
  import { DecodedStruct } from '@typemove/move'
3
3
 
4
4
  export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000000000000000000000000000'
@@ -13,6 +13,9 @@ export type TypedFunctionPayload<T extends Array<any>> = MoveCallSuiTransaction
13
13
  arguments_decoded: T
14
14
  }
15
15
 
16
- // export interface TypedExecutionResultType<T> extends ExecutionResultType {
17
- //
18
- // }
16
+ export type TypedDevInspectResults<T extends Array<any>> = DevInspectResults & {
17
+ /**
18
+ * Decoded return values using ABI, undefined if there is decoding error, usually because the ABI/data mismatch
19
+ */
20
+ results_decoded?: T
21
+ }
package/src/move-coder.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { TypedEventInstance, TypedFunctionPayload } from './models.js'
1
+ import { TypedDevInspectResults, TypedEventInstance, TypedFunctionPayload } from './models.js'
2
2
  import {
3
3
  AbstractMoveCoder,
4
4
  ANY_TYPE,
@@ -13,7 +13,9 @@ import {
13
13
  SuiCallArg,
14
14
  SuiEvent,
15
15
  SuiMoveNormalizedModule,
16
- SuiMoveObject
16
+ SuiMoveObject,
17
+ DevInspectResults,
18
+ SuiClient
17
19
  } from '@mysten/sui.js/client'
18
20
  import { toInternalModule } from './to-internal.js'
19
21
  import { SuiChainAdapter } from './sui-chain-adapter.js'
@@ -28,8 +30,8 @@ export class MoveCoder extends AbstractMoveCoder<
28
30
  > {
29
31
  bcs = new BCS(getSuiMoveConfig())
30
32
 
31
- constructor(network: string) {
32
- super(new SuiChainAdapter(network))
33
+ constructor(client: SuiClient) {
34
+ super(new SuiChainAdapter(client))
33
35
  }
34
36
 
35
37
  load(module: SuiMoveNormalizedModule): InternalMoveModule {
@@ -193,8 +195,15 @@ export class MoveCoder extends AbstractMoveCoder<
193
195
  }
194
196
  }
195
197
 
198
+ private bcsRegistered = new Set<string>()
199
+
196
200
  async registerBCSTypes(type: TypeDescriptor): Promise<void> {
197
- // TODO maybe can we get rid of this
201
+ const sig = type.getNormalizedSignature()
202
+ if (this.bcsRegistered.has(sig)) {
203
+ return
204
+ }
205
+ this.bcsRegistered.add(sig)
206
+
198
207
  await this._registerBCSType('0x1::string::String')
199
208
 
200
209
  for (const typeArg of type.dependedTypes()) {
@@ -206,16 +215,58 @@ export class MoveCoder extends AbstractMoveCoder<
206
215
  await this.registerBCSTypes(type)
207
216
  return this.bcs.de(type.getNormalizedSignature(), data, encoding)
208
217
  }
218
+
219
+ async decodeDevInspectResult<T extends any[]>(insepctRes: DevInspectResults): Promise<TypedDevInspectResults<T>> {
220
+ const returnValues = []
221
+ if (insepctRes.results != null) {
222
+ for (const r of insepctRes.results) {
223
+ if (r.returnValues) {
224
+ const type = parseMoveType(r.returnValues[0][1])
225
+ const value = r.returnValues[0][0]
226
+ const bcsDecoded = await this.decodeBCS(type, new Uint8Array(value))
227
+ const decoded = await this.decodedType(bcsDecoded, type)
228
+ returnValues.push(decoded)
229
+ } else {
230
+ returnValues.push(null)
231
+ }
232
+ }
233
+ }
234
+ return { ...insepctRes, results_decoded: returnValues as any }
235
+ }
209
236
  }
210
237
 
211
238
  const DEFAULT_ENDPOINT = 'https://fullnode.mainnet.sui.io/'
212
239
  const CODER_MAP = new Map<string, MoveCoder>()
240
+ const CHAIN_ID_CODER_MAP = new Map<string, MoveCoder>()
213
241
 
214
242
  export function defaultMoveCoder(endpoint: string = DEFAULT_ENDPOINT): MoveCoder {
215
243
  let coder = CODER_MAP.get(endpoint)
216
244
  if (!coder) {
217
- coder = new MoveCoder(DEFAULT_ENDPOINT)
245
+ coder = new MoveCoder(new SuiClient({ url: DEFAULT_ENDPOINT }))
218
246
  CODER_MAP.set(endpoint, coder)
219
247
  }
220
248
  return coder
221
249
  }
250
+
251
+ const PROVIDER_CODER_MAP = new Map<SuiClient, MoveCoder>()
252
+
253
+ let DEFAULT_CHAIN_ID: string | undefined
254
+
255
+ export async function getMoveCoder(client: SuiClient): Promise<MoveCoder> {
256
+ let coder = PROVIDER_CODER_MAP.get(client)
257
+ if (!coder) {
258
+ coder = new MoveCoder(client)
259
+ // TODO how to dedup
260
+ const id = await client.getChainIdentifier()
261
+ const defaultCoder = defaultMoveCoder()
262
+ if (!DEFAULT_CHAIN_ID) {
263
+ DEFAULT_CHAIN_ID = await defaultCoder.adapter.getChainId()
264
+ }
265
+ if (id === DEFAULT_CHAIN_ID) {
266
+ coder = defaultCoder
267
+ }
268
+
269
+ PROVIDER_CODER_MAP.set(client, coder)
270
+ }
271
+ return coder
272
+ }
@@ -15,23 +15,30 @@ export class SuiChainAdapter extends ChainAdapter<
15
15
  SuiMoveNormalizedModule,
16
16
  SuiEvent | SuiMoveObject
17
17
  > {
18
+ async getChainId() {
19
+ return this.client.getChainIdentifier()
20
+ }
18
21
  // static INSTANCE = new SuiChainAdapter()
19
22
 
23
+ client: SuiClient
24
+ constructor(client: SuiClient) {
25
+ super()
26
+ this.client = client
27
+ }
28
+
20
29
  async fetchModule(
21
30
  account: string,
22
31
  module: string
23
32
  // network: SuiNetwork
24
33
  ): Promise<SuiMoveNormalizedModule> {
25
- const client = getRpcClient(this.endpoint)
26
- return await client.getNormalizedMoveModule({ package: account, module })
34
+ return await this.client.getNormalizedMoveModule({ package: account, module })
27
35
  }
28
36
 
29
37
  async fetchModules(
30
38
  account: string
31
39
  // network: SuiNetwork
32
40
  ): Promise<SuiMoveNormalizedModule[]> {
33
- const client = getRpcClient(this.endpoint)
34
- const modules = await client.getNormalizedMoveModulesByPackage({
41
+ const modules = await this.client.getNormalizedMoveModulesByPackage({
35
42
  package: account
36
43
  })
37
44
  return Object.values(modules)
@@ -9,7 +9,11 @@ import { MoveCoder, TypedEventInstance } from "@typemove/sui";
9
9
 
10
10
  import { defaultMoveCoder } from "@typemove/sui";
11
11
 
12
- import { ZERO_ADDRESS } from "@typemove/sui";
12
+ import {
13
+ ZERO_ADDRESS,
14
+ TypedDevInspectResults,
15
+ getMoveCoder,
16
+ } from "@typemove/sui";
13
17
  import { TransactionBlock } from "@mysten/sui.js/transactions";
14
18
  import { ObjectCallArg, TransactionArgument } from "@mysten/sui.js";
15
19
  import { SuiClient } from "@mysten/sui.js/client";
@@ -217,27 +221,33 @@ export namespace oracle {
217
221
  string | ObjectCallArg | TransactionArgument,
218
222
  ],
219
223
  typeArguments: [TypeDescriptor<T0> | string],
220
- ) {
224
+ ): Promise<TypedDevInspectResults<[]>> {
221
225
  const tx = new TransactionBlock();
222
226
  builder.copyKey(tx, args, typeArguments);
223
- const res = await client.devInspectTransactionBlock({
227
+ const insepctRes = await client.devInspectTransactionBlock({
224
228
  transactionBlock: tx,
225
229
  sender: ZERO_ADDRESS,
226
230
  });
227
- return res;
231
+
232
+ return (await getMoveCoder(client)).decodeDevInspectResult<[]>(
233
+ insepctRes,
234
+ );
228
235
  }
229
236
  export async function getOracle<T0 = any>(
230
237
  client: SuiClient,
231
238
  args: [string | ObjectCallArg | TransactionArgument],
232
239
  typeArguments: [TypeDescriptor<T0> | string],
233
- ) {
240
+ ): Promise<TypedDevInspectResults<[bigint, bigint, bigint, bigint]>> {
234
241
  const tx = new TransactionBlock();
235
242
  builder.getOracle(tx, args, typeArguments);
236
- const res = await client.devInspectTransactionBlock({
243
+ const insepctRes = await client.devInspectTransactionBlock({
237
244
  transactionBlock: tx,
238
245
  sender: ZERO_ADDRESS,
239
246
  });
240
- return res;
247
+
248
+ return (await getMoveCoder(client)).decodeDevInspectResult<
249
+ [bigint, bigint, bigint, bigint]
250
+ >(insepctRes);
241
251
  }
242
252
  export async function newOracle<T0 = any>(
243
253
  client: SuiClient,
@@ -246,14 +256,17 @@ export namespace oracle {
246
256
  string | ObjectCallArg | TransactionArgument,
247
257
  ],
248
258
  typeArguments: [TypeDescriptor<T0> | string],
249
- ) {
259
+ ): Promise<TypedDevInspectResults<[]>> {
250
260
  const tx = new TransactionBlock();
251
261
  builder.newOracle(tx, args, typeArguments);
252
- const res = await client.devInspectTransactionBlock({
262
+ const insepctRes = await client.devInspectTransactionBlock({
253
263
  transactionBlock: tx,
254
264
  sender: ZERO_ADDRESS,
255
265
  });
256
- return res;
266
+
267
+ return (await getMoveCoder(client)).decodeDevInspectResult<[]>(
268
+ insepctRes,
269
+ );
257
270
  }
258
271
  export async function update<T0 = any>(
259
272
  client: SuiClient,
@@ -266,14 +279,17 @@ export namespace oracle {
266
279
  string | ObjectCallArg | TransactionArgument,
267
280
  ],
268
281
  typeArguments: [TypeDescriptor<T0> | string],
269
- ) {
282
+ ): Promise<TypedDevInspectResults<[]>> {
270
283
  const tx = new TransactionBlock();
271
284
  builder.update(tx, args, typeArguments);
272
- const res = await client.devInspectTransactionBlock({
285
+ const insepctRes = await client.devInspectTransactionBlock({
273
286
  transactionBlock: tx,
274
287
  sender: ZERO_ADDRESS,
275
288
  });
276
- return res;
289
+
290
+ return (await getMoveCoder(client)).decodeDevInspectResult<[]>(
291
+ insepctRes,
292
+ );
277
293
  }
278
294
  }
279
295
  }