@mysten/sui 2.9.0 → 2.10.0

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 (45) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/bcs/bcs.d.mts +6 -6
  3. package/dist/client/core-resolver.mjs +5 -0
  4. package/dist/client/core-resolver.mjs.map +1 -1
  5. package/dist/client/core.d.mts +1 -0
  6. package/dist/client/core.d.mts.map +1 -1
  7. package/dist/client/core.mjs +17 -4
  8. package/dist/client/core.mjs.map +1 -1
  9. package/dist/client/types.d.mts +16 -0
  10. package/dist/client/types.d.mts.map +1 -1
  11. package/dist/graphql/core.d.mts +1 -0
  12. package/dist/graphql/core.d.mts.map +1 -1
  13. package/dist/graphql/core.mjs +13 -1
  14. package/dist/graphql/core.mjs.map +1 -1
  15. package/dist/graphql/generated/queries.d.mts.map +1 -1
  16. package/dist/graphql/generated/queries.mjs +18 -1
  17. package/dist/graphql/generated/queries.mjs.map +1 -1
  18. package/dist/grpc/core.d.mts +1 -0
  19. package/dist/grpc/core.d.mts.map +1 -1
  20. package/dist/grpc/core.mjs +12 -0
  21. package/dist/grpc/core.mjs.map +1 -1
  22. package/dist/grpc/proto/sui/rpc/v2/ledger_service.client.d.mts +4 -4
  23. package/dist/grpc/proto/sui/rpc/v2/move_package_service.client.d.mts +4 -4
  24. package/dist/grpc/proto/sui/rpc/v2/signature_verification_service.client.d.mts +4 -4
  25. package/dist/grpc/proto/sui/rpc/v2/state_service.client.d.mts +4 -4
  26. package/dist/grpc/proto/sui/rpc/v2/subscription_service.client.d.mts +4 -4
  27. package/dist/grpc/proto/sui/rpc/v2/transaction_execution_service.client.d.mts +4 -4
  28. package/dist/jsonRpc/core.d.mts +1 -0
  29. package/dist/jsonRpc/core.d.mts.map +1 -1
  30. package/dist/jsonRpc/core.mjs +19 -0
  31. package/dist/jsonRpc/core.mjs.map +1 -1
  32. package/dist/version.mjs +1 -1
  33. package/dist/version.mjs.map +1 -1
  34. package/dist/zklogin/bcs.d.mts +14 -14
  35. package/dist/zklogin/bcs.d.mts.map +1 -1
  36. package/package.json +1 -1
  37. package/src/client/core-resolver.ts +15 -0
  38. package/src/client/core.ts +34 -4
  39. package/src/client/types.ts +20 -0
  40. package/src/graphql/core.ts +27 -0
  41. package/src/graphql/generated/queries.ts +22 -0
  42. package/src/graphql/queries/getProtocolConfig.graphql +18 -0
  43. package/src/grpc/core.ts +27 -0
  44. package/src/jsonRpc/core.ts +34 -0
  45. package/src/version.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"core.mjs","names":["#jsonRpcClient","result","bcs"],"sources":["../../src/jsonRpc/core.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { fromBase64, type InferBcsInput } from '@mysten/bcs';\n\nimport { bcs, TypeTagSerializer } from '../bcs/index.js';\nimport type {\n\tExecutionStatus as JsonRpcExecutionStatus,\n\tObjectOwner,\n\tSuiMoveAbilitySet,\n\tSuiMoveAbort,\n\tSuiMoveNormalizedType,\n\tSuiMoveVisibility,\n\tSuiObjectChange,\n\tSuiObjectData,\n\tSuiObjectDataFilter,\n\tSuiTransactionBlockResponse,\n\tTransactionEffects,\n} from './types/index.js';\nimport { Transaction } from '../transactions/Transaction.js';\nimport { coreClientResolveTransactionPlugin } from '../client/core-resolver.js';\nimport { TransactionDataBuilder } from '../transactions/TransactionData.js';\nimport { chunk } from '@mysten/utils';\nimport { normalizeSuiAddress, normalizeStructTag } from '../utils/sui-types.js';\nimport { deriveDynamicFieldID } from '../utils/dynamic-fields.js';\nimport { SUI_FRAMEWORK_ADDRESS, SUI_SYSTEM_ADDRESS } from '../utils/constants.js';\nimport { CoreClient } from '../client/core.js';\nimport type { SuiClientTypes } from '../client/types.js';\nimport { ObjectError } from '../client/errors.js';\nimport {\n\tformatMoveAbortMessage,\n\tparseTransactionBcs,\n\tparseTransactionEffectsBcs,\n} from '../client/index.js';\nimport type { SuiJsonRpcClient } from './client.js';\n\nconst MAX_GAS = 50_000_000_000;\n\nfunction parseJsonRpcExecutionStatus(\n\tstatus: JsonRpcExecutionStatus,\n\tabortError?: SuiMoveAbort | null,\n): SuiClientTypes.ExecutionStatus {\n\tif (status.status === 'success') {\n\t\treturn { success: true, error: null };\n\t}\n\n\tconst rawMessage = status.error ?? 'Unknown';\n\n\tif (abortError) {\n\t\tconst commandMatch = rawMessage.match(/in command (\\d+)/);\n\t\tconst command = commandMatch ? parseInt(commandMatch[1], 10) : undefined;\n\n\t\tconst instructionMatch = rawMessage.match(/instruction:\\s*(\\d+)/);\n\t\tconst instruction = instructionMatch ? parseInt(instructionMatch[1], 10) : undefined;\n\n\t\tconst moduleParts = abortError.module_id?.split('::') ?? [];\n\t\tconst pkg = moduleParts[0] ? normalizeSuiAddress(moduleParts[0]) : undefined;\n\t\tconst module = moduleParts[1];\n\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: {\n\t\t\t\t$kind: 'MoveAbort',\n\t\t\t\tmessage: formatMoveAbortMessage({\n\t\t\t\t\tcommand,\n\t\t\t\t\tlocation:\n\t\t\t\t\t\tpkg && module\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tpackage: pkg,\n\t\t\t\t\t\t\t\t\tmodule,\n\t\t\t\t\t\t\t\t\tfunctionName: abortError.function ?? undefined,\n\t\t\t\t\t\t\t\t\tinstruction,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\tabortCode: String(abortError.error_code ?? 0),\n\t\t\t\t\tcleverError: abortError.line != null ? { lineNumber: abortError.line } : undefined,\n\t\t\t\t}),\n\t\t\t\tcommand,\n\t\t\t\tMoveAbort: {\n\t\t\t\t\tabortCode: String(abortError.error_code ?? 0),\n\t\t\t\t\tlocation: abortError.module_id\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tpackage: normalizeSuiAddress(abortError.module_id.split('::')[0] ?? ''),\n\t\t\t\t\t\t\t\tmodule: abortError.module_id.split('::')[1] ?? '',\n\t\t\t\t\t\t\t\tfunctionName: abortError.function ?? undefined,\n\t\t\t\t\t\t\t\tinstruction,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined,\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\n\treturn {\n\t\tsuccess: false,\n\t\terror: {\n\t\t\t$kind: 'Unknown',\n\t\t\tmessage: rawMessage,\n\t\t\tUnknown: null,\n\t\t},\n\t};\n}\n\nexport class JSONRpcCoreClient extends CoreClient {\n\t#jsonRpcClient: SuiJsonRpcClient;\n\n\tconstructor({\n\t\tjsonRpcClient,\n\t\tmvr,\n\t}: {\n\t\tjsonRpcClient: SuiJsonRpcClient;\n\t\tmvr?: SuiClientTypes.MvrOptions;\n\t}) {\n\t\tsuper({ network: jsonRpcClient.network, base: jsonRpcClient, mvr });\n\t\tthis.#jsonRpcClient = jsonRpcClient;\n\t}\n\n\tasync getObjects<Include extends SuiClientTypes.ObjectInclude = {}>(\n\t\toptions: SuiClientTypes.GetObjectsOptions<Include>,\n\t) {\n\t\tconst batches = chunk(options.objectIds, 50);\n\t\tconst results: SuiClientTypes.GetObjectsResponse<Include>['objects'] = [];\n\t\tfor (const batch of batches) {\n\t\t\tconst objects = await this.#jsonRpcClient.multiGetObjects({\n\t\t\t\tids: batch,\n\t\t\t\toptions: {\n\t\t\t\t\tshowOwner: true,\n\t\t\t\t\tshowType: true,\n\t\t\t\t\tshowBcs: options.include?.content || options.include?.objectBcs ? true : false,\n\t\t\t\t\tshowPreviousTransaction:\n\t\t\t\t\t\toptions.include?.previousTransaction || options.include?.objectBcs ? true : false,\n\t\t\t\t\tshowStorageRebate: options.include?.objectBcs ?? false,\n\t\t\t\t\tshowContent: options.include?.json ?? false,\n\t\t\t\t\tshowDisplay: options.include?.display ?? false,\n\t\t\t\t},\n\t\t\t\tsignal: options.signal,\n\t\t\t});\n\n\t\t\tfor (const [idx, object] of objects.entries()) {\n\t\t\t\tif (object.error) {\n\t\t\t\t\tresults.push(ObjectError.fromResponse(object.error, batch[idx]));\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(parseObject(object.data!, options.include));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tobjects: results,\n\t\t};\n\t}\n\tasync listOwnedObjects<Include extends SuiClientTypes.ObjectInclude = {}>(\n\t\toptions: SuiClientTypes.ListOwnedObjectsOptions<Include>,\n\t) {\n\t\tlet filter: SuiObjectDataFilter | null = null;\n\t\tif (options.type) {\n\t\t\tconst parts = options.type.split('::');\n\t\t\tif (parts.length === 1) {\n\t\t\t\tfilter = { Package: options.type };\n\t\t\t} else if (parts.length === 2) {\n\t\t\t\tfilter = { MoveModule: { package: parts[0], module: parts[1] } };\n\t\t\t} else {\n\t\t\t\tfilter = { StructType: options.type };\n\t\t\t}\n\t\t}\n\n\t\tconst objects = await this.#jsonRpcClient.getOwnedObjects({\n\t\t\towner: options.owner,\n\t\t\tlimit: options.limit,\n\t\t\tcursor: options.cursor,\n\t\t\toptions: {\n\t\t\t\tshowOwner: true,\n\t\t\t\tshowType: true,\n\t\t\t\tshowBcs: options.include?.content || options.include?.objectBcs ? true : false,\n\t\t\t\tshowPreviousTransaction:\n\t\t\t\t\toptions.include?.previousTransaction || options.include?.objectBcs ? true : false,\n\t\t\t\tshowStorageRebate: options.include?.objectBcs ?? false,\n\t\t\t\tshowContent: options.include?.json ?? false,\n\t\t\t\tshowDisplay: options.include?.display ?? false,\n\t\t\t},\n\t\t\tfilter,\n\t\t\tsignal: options.signal,\n\t\t});\n\n\t\treturn {\n\t\t\tobjects: objects.data.map((result) => {\n\t\t\t\tif (result.error) {\n\t\t\t\t\tthrow ObjectError.fromResponse(result.error);\n\t\t\t\t}\n\n\t\t\t\treturn parseObject(result.data!, options.include);\n\t\t\t}),\n\t\t\thasNextPage: objects.hasNextPage,\n\t\t\tcursor: objects.nextCursor ?? null,\n\t\t};\n\t}\n\n\tasync listCoins(options: SuiClientTypes.ListCoinsOptions) {\n\t\tconst coins = await this.#jsonRpcClient.getCoins({\n\t\t\towner: options.owner,\n\t\t\tcoinType: options.coinType,\n\t\t\tlimit: options.limit,\n\t\t\tcursor: options.cursor,\n\t\t\tsignal: options.signal,\n\t\t});\n\n\t\treturn {\n\t\t\tobjects: coins.data.map(\n\t\t\t\t(coin): SuiClientTypes.Coin => ({\n\t\t\t\t\tobjectId: coin.coinObjectId,\n\t\t\t\t\tversion: coin.version,\n\t\t\t\t\tdigest: coin.digest,\n\t\t\t\t\tbalance: coin.balance,\n\t\t\t\t\ttype: normalizeStructTag(`0x2::coin::Coin<${coin.coinType}>`),\n\t\t\t\t\towner: {\n\t\t\t\t\t\t$kind: 'AddressOwner' as const,\n\t\t\t\t\t\tAddressOwner: options.owner,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t),\n\t\t\thasNextPage: coins.hasNextPage,\n\t\t\tcursor: coins.nextCursor ?? null,\n\t\t};\n\t}\n\n\tasync getBalance(options: SuiClientTypes.GetBalanceOptions) {\n\t\tconst balance = await this.#jsonRpcClient.getBalance({\n\t\t\towner: options.owner,\n\t\t\tcoinType: options.coinType,\n\t\t\tsignal: options.signal,\n\t\t});\n\n\t\tconst addressBalance = balance.fundsInAddressBalance ?? '0';\n\t\tconst coinBalance = String(BigInt(balance.totalBalance) - BigInt(addressBalance));\n\n\t\treturn {\n\t\t\tbalance: {\n\t\t\t\tcoinType: normalizeStructTag(balance.coinType),\n\t\t\t\tbalance: balance.totalBalance,\n\t\t\t\tcoinBalance,\n\t\t\t\taddressBalance,\n\t\t\t},\n\t\t};\n\t}\n\tasync getCoinMetadata(\n\t\toptions: SuiClientTypes.GetCoinMetadataOptions,\n\t): Promise<SuiClientTypes.GetCoinMetadataResponse> {\n\t\tconst coinType = (await this.mvr.resolveType({ type: options.coinType })).type;\n\n\t\tconst result = await this.#jsonRpcClient.getCoinMetadata({\n\t\t\tcoinType,\n\t\t\tsignal: options.signal,\n\t\t});\n\n\t\tif (!result) {\n\t\t\treturn { coinMetadata: null };\n\t\t}\n\n\t\treturn {\n\t\t\tcoinMetadata: {\n\t\t\t\tid: result.id ?? null,\n\t\t\t\tdecimals: result.decimals,\n\t\t\t\tname: result.name,\n\t\t\t\tsymbol: result.symbol,\n\t\t\t\tdescription: result.description,\n\t\t\t\ticonUrl: result.iconUrl ?? null,\n\t\t\t},\n\t\t};\n\t}\n\n\tasync listBalances(options: SuiClientTypes.ListBalancesOptions) {\n\t\tconst balances = await this.#jsonRpcClient.getAllBalances({\n\t\t\towner: options.owner,\n\t\t\tsignal: options.signal,\n\t\t});\n\n\t\treturn {\n\t\t\tbalances: balances.map((balance) => {\n\t\t\t\tconst addressBalance = balance.fundsInAddressBalance ?? '0';\n\t\t\t\tconst coinBalance = String(BigInt(balance.totalBalance) - BigInt(addressBalance));\n\t\t\t\treturn {\n\t\t\t\t\tcoinType: normalizeStructTag(balance.coinType),\n\t\t\t\t\tbalance: balance.totalBalance,\n\t\t\t\t\tcoinBalance,\n\t\t\t\t\taddressBalance,\n\t\t\t\t};\n\t\t\t}),\n\t\t\thasNextPage: false,\n\t\t\tcursor: null,\n\t\t};\n\t}\n\tasync getTransaction<Include extends SuiClientTypes.TransactionInclude = {}>(\n\t\toptions: SuiClientTypes.GetTransactionOptions<Include>,\n\t): Promise<SuiClientTypes.TransactionResult<Include>> {\n\t\tconst transaction = await this.#jsonRpcClient.getTransactionBlock({\n\t\t\tdigest: options.digest,\n\t\t\toptions: {\n\t\t\t\t// showRawInput is always needed to extract signatures from SenderSignedData\n\t\t\t\tshowRawInput: true,\n\t\t\t\t// showEffects is always needed to get status\n\t\t\t\tshowEffects: true,\n\t\t\t\tshowObjectChanges: options.include?.objectTypes ?? false,\n\t\t\t\tshowRawEffects: options.include?.effects ?? false,\n\t\t\t\tshowEvents: options.include?.events ?? false,\n\t\t\t\tshowBalanceChanges: options.include?.balanceChanges ?? false,\n\t\t\t},\n\t\t\tsignal: options.signal,\n\t\t});\n\n\t\treturn parseTransaction(transaction, options.include);\n\t}\n\tasync executeTransaction<Include extends SuiClientTypes.TransactionInclude = {}>(\n\t\toptions: SuiClientTypes.ExecuteTransactionOptions<Include>,\n\t): Promise<SuiClientTypes.TransactionResult<Include>> {\n\t\tconst transaction = await this.#jsonRpcClient.executeTransactionBlock({\n\t\t\ttransactionBlock: options.transaction,\n\t\t\tsignature: options.signatures,\n\t\t\toptions: {\n\t\t\t\t// showRawInput is always needed to extract signatures from SenderSignedData\n\t\t\t\tshowRawInput: true,\n\t\t\t\t// showEffects is always needed to get status\n\t\t\t\tshowEffects: true,\n\t\t\t\tshowRawEffects: options.include?.effects ?? false,\n\t\t\t\tshowEvents: options.include?.events ?? false,\n\t\t\t\tshowObjectChanges: options.include?.objectTypes ?? false,\n\t\t\t\tshowBalanceChanges: options.include?.balanceChanges ?? false,\n\t\t\t},\n\t\t\tsignal: options.signal,\n\t\t});\n\n\t\treturn parseTransaction(transaction, options.include);\n\t}\n\tasync simulateTransaction<Include extends SuiClientTypes.SimulateTransactionInclude = {}>(\n\t\toptions: SuiClientTypes.SimulateTransactionOptions<Include>,\n\t): Promise<SuiClientTypes.SimulateTransactionResult<Include>> {\n\t\tif (!(options.transaction instanceof Uint8Array)) {\n\t\t\tawait options.transaction.prepareForSerialization({ client: this });\n\t\t}\n\n\t\tconst tx = Transaction.from(options.transaction);\n\n\t\tconst data =\n\t\t\toptions.transaction instanceof Uint8Array\n\t\t\t\t? null\n\t\t\t\t: TransactionDataBuilder.restore(options.transaction.getData());\n\n\t\tconst transactionBytes = data\n\t\t\t? data.build({\n\t\t\t\t\toverrides: {\n\t\t\t\t\t\tgasData: {\n\t\t\t\t\t\t\tbudget: data.gasData.budget ?? String(MAX_GAS),\n\t\t\t\t\t\t\tprice: data.gasData.price ?? String(await this.#jsonRpcClient.getReferenceGasPrice()),\n\t\t\t\t\t\t\tpayment: data.gasData.payment ?? [],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t: (options.transaction as Uint8Array);\n\n\t\tconst result = await this.#jsonRpcClient.dryRunTransactionBlock({\n\t\t\ttransactionBlock: transactionBytes,\n\t\t\tsignal: options.signal,\n\t\t});\n\n\t\tconst { effects, objectTypes } = parseTransactionEffectsJson({\n\t\t\teffects: result.effects,\n\t\t\tobjectChanges: result.objectChanges,\n\t\t});\n\n\t\tconst transactionData: SuiClientTypes.Transaction<Include> = {\n\t\t\tdigest: TransactionDataBuilder.getDigestFromBytes(transactionBytes),\n\t\t\tepoch: null,\n\t\t\tstatus: effects.status,\n\t\t\teffects: (options.include?.effects\n\t\t\t\t? effects\n\t\t\t\t: undefined) as SuiClientTypes.Transaction<Include>['effects'],\n\t\t\tobjectTypes: (options.include?.objectTypes\n\t\t\t\t? objectTypes\n\t\t\t\t: undefined) as SuiClientTypes.Transaction<Include>['objectTypes'],\n\t\t\tsignatures: [],\n\t\t\ttransaction: (options.include?.transaction\n\t\t\t\t? parseTransactionBcs(\n\t\t\t\t\t\toptions.transaction instanceof Uint8Array\n\t\t\t\t\t\t\t? options.transaction\n\t\t\t\t\t\t\t: await options.transaction\n\t\t\t\t\t\t\t\t\t.build({\n\t\t\t\t\t\t\t\t\t\tclient: this,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t.catch(() => null as never),\n\t\t\t\t\t)\n\t\t\t\t: undefined) as SuiClientTypes.Transaction<Include>['transaction'],\n\t\t\tbcs: (options.include?.bcs\n\t\t\t\t? transactionBytes\n\t\t\t\t: undefined) as SuiClientTypes.Transaction<Include>['bcs'],\n\t\t\tbalanceChanges: (options.include?.balanceChanges\n\t\t\t\t? result.balanceChanges.map((change) => ({\n\t\t\t\t\t\tcoinType: normalizeStructTag(change.coinType),\n\t\t\t\t\t\taddress: parseOwnerAddress(change.owner)!,\n\t\t\t\t\t\tamount: change.amount,\n\t\t\t\t\t}))\n\t\t\t\t: undefined) as SuiClientTypes.Transaction<Include>['balanceChanges'],\n\t\t\tevents: (options.include?.events\n\t\t\t\t? (result.events?.map((event) => ({\n\t\t\t\t\t\tpackageId: event.packageId,\n\t\t\t\t\t\tmodule: event.transactionModule,\n\t\t\t\t\t\tsender: event.sender,\n\t\t\t\t\t\teventType: event.type,\n\t\t\t\t\t\tbcs: 'bcs' in event ? fromBase64(event.bcs) : new Uint8Array(),\n\t\t\t\t\t\tjson: (event.parsedJson as Record<string, unknown>) ?? null,\n\t\t\t\t\t})) ?? [])\n\t\t\t\t: undefined) as SuiClientTypes.Transaction<Include>['events'],\n\t\t};\n\n\t\tlet commandResults: SuiClientTypes.CommandResult[] | undefined;\n\t\tif (options.include?.commandResults) {\n\t\t\ttry {\n\t\t\t\tconst sender = tx.getData().sender ?? normalizeSuiAddress('0x0');\n\t\t\t\tconst devInspectResult = await this.#jsonRpcClient.devInspectTransactionBlock({\n\t\t\t\t\tsender,\n\t\t\t\t\ttransactionBlock: tx,\n\t\t\t\t\tsignal: options.signal,\n\t\t\t\t});\n\n\t\t\t\tif (devInspectResult.results) {\n\t\t\t\t\tcommandResults = devInspectResult.results.map((result) => ({\n\t\t\t\t\t\treturnValues: (result.returnValues ?? []).map(([bytes]) => ({\n\t\t\t\t\t\t\tbcs: new Uint8Array(bytes),\n\t\t\t\t\t\t})),\n\t\t\t\t\t\tmutatedReferences: (result.mutableReferenceOutputs ?? []).map(([, bytes]) => ({\n\t\t\t\t\t\t\tbcs: new Uint8Array(bytes),\n\t\t\t\t\t\t})),\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t} catch {}\n\t\t}\n\n\t\treturn effects.status.success\n\t\t\t? {\n\t\t\t\t\t$kind: 'Transaction',\n\t\t\t\t\tTransaction: transactionData,\n\t\t\t\t\tcommandResults:\n\t\t\t\t\t\tcommandResults as SuiClientTypes.SimulateTransactionResult<Include>['commandResults'],\n\t\t\t\t}\n\t\t\t: {\n\t\t\t\t\t$kind: 'FailedTransaction',\n\t\t\t\t\tFailedTransaction: transactionData,\n\t\t\t\t\tcommandResults:\n\t\t\t\t\t\tcommandResults as SuiClientTypes.SimulateTransactionResult<Include>['commandResults'],\n\t\t\t\t};\n\t}\n\tasync getReferenceGasPrice(options?: SuiClientTypes.GetReferenceGasPriceOptions) {\n\t\tconst referenceGasPrice = await this.#jsonRpcClient.getReferenceGasPrice({\n\t\t\tsignal: options?.signal,\n\t\t});\n\n\t\treturn {\n\t\t\treferenceGasPrice: String(referenceGasPrice),\n\t\t};\n\t}\n\n\tasync getCurrentSystemState(\n\t\toptions?: SuiClientTypes.GetCurrentSystemStateOptions,\n\t): Promise<SuiClientTypes.GetCurrentSystemStateResponse> {\n\t\tconst systemState = await this.#jsonRpcClient.getLatestSuiSystemState({\n\t\t\tsignal: options?.signal,\n\t\t});\n\n\t\treturn {\n\t\t\tsystemState: {\n\t\t\t\tsystemStateVersion: systemState.systemStateVersion,\n\t\t\t\tepoch: systemState.epoch,\n\t\t\t\tprotocolVersion: systemState.protocolVersion,\n\t\t\t\treferenceGasPrice: systemState.referenceGasPrice?.toString() ?? (null as never),\n\t\t\t\tepochStartTimestampMs: systemState.epochStartTimestampMs,\n\t\t\t\tsafeMode: systemState.safeMode,\n\t\t\t\tsafeModeStorageRewards: systemState.safeModeStorageRewards,\n\t\t\t\tsafeModeComputationRewards: systemState.safeModeComputationRewards,\n\t\t\t\tsafeModeStorageRebates: systemState.safeModeStorageRebates,\n\t\t\t\tsafeModeNonRefundableStorageFee: systemState.safeModeNonRefundableStorageFee,\n\t\t\t\tparameters: {\n\t\t\t\t\tepochDurationMs: systemState.epochDurationMs,\n\t\t\t\t\tstakeSubsidyStartEpoch: systemState.stakeSubsidyStartEpoch,\n\t\t\t\t\tmaxValidatorCount: systemState.maxValidatorCount,\n\t\t\t\t\tminValidatorJoiningStake: systemState.minValidatorJoiningStake,\n\t\t\t\t\tvalidatorLowStakeThreshold: systemState.validatorLowStakeThreshold,\n\t\t\t\t\tvalidatorLowStakeGracePeriod: systemState.validatorLowStakeGracePeriod,\n\t\t\t\t},\n\t\t\t\tstorageFund: {\n\t\t\t\t\ttotalObjectStorageRebates: systemState.storageFundTotalObjectStorageRebates,\n\t\t\t\t\tnonRefundableBalance: systemState.storageFundNonRefundableBalance,\n\t\t\t\t},\n\t\t\t\tstakeSubsidy: {\n\t\t\t\t\tbalance: systemState.stakeSubsidyBalance,\n\t\t\t\t\tdistributionCounter: systemState.stakeSubsidyDistributionCounter,\n\t\t\t\t\tcurrentDistributionAmount: systemState.stakeSubsidyCurrentDistributionAmount,\n\t\t\t\t\tstakeSubsidyPeriodLength: systemState.stakeSubsidyPeriodLength,\n\t\t\t\t\tstakeSubsidyDecreaseRate: systemState.stakeSubsidyDecreaseRate,\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\n\tasync listDynamicFields(options: SuiClientTypes.ListDynamicFieldsOptions) {\n\t\tconst dynamicFields = await this.#jsonRpcClient.getDynamicFields({\n\t\t\tparentId: options.parentId,\n\t\t\tlimit: options.limit,\n\t\t\tcursor: options.cursor,\n\t\t});\n\n\t\treturn {\n\t\t\tdynamicFields: dynamicFields.data.map((dynamicField): SuiClientTypes.DynamicFieldEntry => {\n\t\t\t\tconst isDynamicObject = dynamicField.type === 'DynamicObject';\n\t\t\t\tconst fullType = isDynamicObject\n\t\t\t\t\t? `0x2::dynamic_field::Field<0x2::dynamic_object_field::Wrapper<${dynamicField.name.type}>, 0x2::object::ID>`\n\t\t\t\t\t: `0x2::dynamic_field::Field<${dynamicField.name.type}, ${dynamicField.objectType}>`;\n\n\t\t\t\tconst bcsBytes = fromBase64(dynamicField.bcsName);\n\t\t\t\tconst derivedNameType = isDynamicObject\n\t\t\t\t\t? `0x2::dynamic_object_field::Wrapper<${dynamicField.name.type}>`\n\t\t\t\t\t: dynamicField.name.type;\n\t\t\t\treturn {\n\t\t\t\t\t$kind: isDynamicObject ? 'DynamicObject' : 'DynamicField',\n\t\t\t\t\tfieldId: deriveDynamicFieldID(options.parentId, derivedNameType, bcsBytes),\n\t\t\t\t\ttype: normalizeStructTag(fullType),\n\t\t\t\t\tname: {\n\t\t\t\t\t\ttype: dynamicField.name.type,\n\t\t\t\t\t\tbcs: bcsBytes,\n\t\t\t\t\t},\n\t\t\t\t\tvalueType: dynamicField.objectType,\n\t\t\t\t\tchildId: isDynamicObject ? dynamicField.objectId : undefined,\n\t\t\t\t} as SuiClientTypes.DynamicFieldEntry;\n\t\t\t}),\n\t\t\thasNextPage: dynamicFields.hasNextPage,\n\t\t\tcursor: dynamicFields.nextCursor,\n\t\t};\n\t}\n\n\tasync verifyZkLoginSignature(options: SuiClientTypes.VerifyZkLoginSignatureOptions) {\n\t\tconst result = await this.#jsonRpcClient.verifyZkLoginSignature({\n\t\t\tbytes: options.bytes,\n\t\t\tsignature: options.signature,\n\t\t\tintentScope: options.intentScope,\n\t\t\tauthor: options.address,\n\t\t});\n\n\t\treturn {\n\t\t\tsuccess: result.success,\n\t\t\terrors: result.errors,\n\t\t};\n\t}\n\n\tasync defaultNameServiceName(\n\t\toptions: SuiClientTypes.DefaultNameServiceNameOptions,\n\t): Promise<SuiClientTypes.DefaultNameServiceNameResponse> {\n\t\tconst name = (await this.#jsonRpcClient.resolveNameServiceNames(options)).data[0];\n\t\treturn {\n\t\t\tdata: {\n\t\t\t\tname,\n\t\t\t},\n\t\t};\n\t}\n\n\tresolveTransactionPlugin() {\n\t\treturn coreClientResolveTransactionPlugin;\n\t}\n\n\tasync getMoveFunction(\n\t\toptions: SuiClientTypes.GetMoveFunctionOptions,\n\t): Promise<SuiClientTypes.GetMoveFunctionResponse> {\n\t\tconst resolvedPackageId = (await this.mvr.resolvePackage({ package: options.packageId }))\n\t\t\t.package;\n\t\tconst result = await this.#jsonRpcClient.getNormalizedMoveFunction({\n\t\t\tpackage: resolvedPackageId,\n\t\t\tmodule: options.moduleName,\n\t\t\tfunction: options.name,\n\t\t});\n\n\t\treturn {\n\t\t\tfunction: {\n\t\t\t\tpackageId: normalizeSuiAddress(resolvedPackageId),\n\t\t\t\tmoduleName: options.moduleName,\n\t\t\t\tname: options.name,\n\t\t\t\tvisibility: parseVisibility(result.visibility),\n\t\t\t\tisEntry: result.isEntry,\n\t\t\t\ttypeParameters: result.typeParameters.map((abilities) => ({\n\t\t\t\t\tisPhantom: false,\n\t\t\t\t\tconstraints: parseAbilities(abilities),\n\t\t\t\t})),\n\t\t\t\tparameters: result.parameters.map((param) => parseNormalizedSuiMoveType(param)),\n\t\t\t\treturns: result.return.map((ret) => parseNormalizedSuiMoveType(ret)),\n\t\t\t},\n\t\t};\n\t}\n\n\tasync getChainIdentifier(\n\t\t_options?: SuiClientTypes.GetChainIdentifierOptions,\n\t): Promise<SuiClientTypes.GetChainIdentifierResponse> {\n\t\treturn this.cache.read(['chainIdentifier'], async () => {\n\t\t\tconst checkpoint = await this.#jsonRpcClient.getCheckpoint({ id: '0' });\n\t\t\treturn {\n\t\t\t\tchainIdentifier: checkpoint.digest,\n\t\t\t};\n\t\t});\n\t}\n}\n\nfunction serializeObjectToBcs(object: SuiObjectData): Uint8Array | undefined {\n\tif (object.bcs?.dataType !== 'moveObject') {\n\t\treturn undefined;\n\t}\n\n\ttry {\n\t\t// Normalize the type string to ensure consistent address formatting (0x2 vs 0x00...02)\n\t\tconst typeStr = normalizeStructTag(object.bcs.type);\n\t\tlet moveObjectType: InferBcsInput<typeof bcs.MoveObjectType>;\n\n\t\t// Normalize constants for comparison\n\t\tconst normalizedSuiFramework = normalizeSuiAddress(SUI_FRAMEWORK_ADDRESS);\n\t\tconst gasCoinType = normalizeStructTag(\n\t\t\t`${SUI_FRAMEWORK_ADDRESS}::coin::Coin<${SUI_FRAMEWORK_ADDRESS}::sui::SUI>`,\n\t\t);\n\t\tconst stakedSuiType = normalizeStructTag(`${SUI_SYSTEM_ADDRESS}::staking_pool::StakedSui`);\n\t\tconst coinPrefix = `${normalizedSuiFramework}::coin::Coin<`;\n\n\t\tif (typeStr === gasCoinType) {\n\t\t\tmoveObjectType = { GasCoin: null };\n\t\t} else if (typeStr === stakedSuiType) {\n\t\t\tmoveObjectType = { StakedSui: null };\n\t\t} else if (typeStr.startsWith(coinPrefix)) {\n\t\t\tconst innerTypeMatch = typeStr.match(\n\t\t\t\tnew RegExp(\n\t\t\t\t\t`${normalizedSuiFramework.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}::coin::Coin<(.+)>$`,\n\t\t\t\t),\n\t\t\t);\n\t\t\tif (innerTypeMatch) {\n\t\t\t\tconst innerTypeTag = TypeTagSerializer.parseFromStr(innerTypeMatch[1], true);\n\t\t\t\tmoveObjectType = { Coin: innerTypeTag };\n\t\t\t} else {\n\t\t\t\tthrow new Error('Failed to parse Coin type');\n\t\t\t}\n\t\t} else {\n\t\t\tconst typeTag = TypeTagSerializer.parseFromStr(typeStr, true);\n\t\t\tif (typeof typeTag !== 'object' || !('struct' in typeTag)) {\n\t\t\t\tthrow new Error('Expected struct type tag');\n\t\t\t}\n\t\t\tmoveObjectType = { Other: typeTag.struct };\n\t\t}\n\n\t\tconst contents = fromBase64(object.bcs.bcsBytes);\n\t\tconst owner = convertOwnerToBcs(object.owner!);\n\n\t\treturn bcs.Object.serialize({\n\t\t\tdata: {\n\t\t\t\tMove: {\n\t\t\t\t\ttype: moveObjectType,\n\t\t\t\t\thasPublicTransfer: object.bcs.hasPublicTransfer,\n\t\t\t\t\tversion: object.bcs.version,\n\t\t\t\t\tcontents,\n\t\t\t\t},\n\t\t\t},\n\t\t\towner,\n\t\t\tpreviousTransaction: object.previousTransaction!,\n\t\t\tstorageRebate: object.storageRebate!,\n\t\t}).toBytes();\n\t} catch {\n\t\t// If serialization fails, return undefined\n\t\treturn undefined;\n\t}\n}\n\nfunction parseObject<Include extends SuiClientTypes.ObjectInclude = {}>(\n\tobject: SuiObjectData,\n\tinclude?: Include,\n): SuiClientTypes.Object<Include> {\n\tconst bcsContent =\n\t\tobject.bcs?.dataType === 'moveObject' ? fromBase64(object.bcs.bcsBytes) : undefined;\n\n\tconst objectBcs = include?.objectBcs ? serializeObjectToBcs(object) : undefined;\n\n\t// Package objects have type \"package\" which is not a struct tag, so don't normalize it\n\tconst type =\n\t\tobject.type && object.type.includes('::')\n\t\t\t? normalizeStructTag(object.type)\n\t\t\t: (object.type ?? '');\n\n\tconst jsonContent =\n\t\tinclude?.json && object.content?.dataType === 'moveObject'\n\t\t\t? (object.content.fields as Record<string, unknown>)\n\t\t\t: include?.json\n\t\t\t\t? null\n\t\t\t\t: undefined;\n\n\tconst displayData = include?.display\n\t\t? object.display?.data != null\n\t\t\t? { output: object.display.data as Record<string, string>, errors: null }\n\t\t\t: null\n\t\t: undefined;\n\n\treturn {\n\t\tobjectId: object.objectId,\n\t\tversion: object.version,\n\t\tdigest: object.digest,\n\t\ttype,\n\t\tcontent: (include?.content\n\t\t\t? bcsContent\n\t\t\t: undefined) as SuiClientTypes.Object<Include>['content'],\n\t\towner: parseOwner(object.owner!),\n\t\tpreviousTransaction: (include?.previousTransaction\n\t\t\t? (object.previousTransaction ?? undefined)\n\t\t\t: undefined) as SuiClientTypes.Object<Include>['previousTransaction'],\n\t\tobjectBcs: objectBcs as SuiClientTypes.Object<Include>['objectBcs'],\n\t\tjson: jsonContent as SuiClientTypes.Object<Include>['json'],\n\t\tdisplay: displayData as SuiClientTypes.Object<Include>['display'],\n\t};\n}\n\nfunction parseOwner(owner: ObjectOwner): SuiClientTypes.ObjectOwner {\n\tif (owner === 'Immutable') {\n\t\treturn {\n\t\t\t$kind: 'Immutable',\n\t\t\tImmutable: true,\n\t\t};\n\t}\n\n\tif ('ConsensusAddressOwner' in owner) {\n\t\treturn {\n\t\t\t$kind: 'ConsensusAddressOwner',\n\t\t\tConsensusAddressOwner: {\n\t\t\t\towner: owner.ConsensusAddressOwner.owner,\n\t\t\t\tstartVersion: owner.ConsensusAddressOwner.start_version,\n\t\t\t},\n\t\t};\n\t}\n\n\tif ('AddressOwner' in owner) {\n\t\treturn {\n\t\t\t$kind: 'AddressOwner',\n\t\t\tAddressOwner: owner.AddressOwner,\n\t\t};\n\t}\n\n\tif ('ObjectOwner' in owner) {\n\t\treturn {\n\t\t\t$kind: 'ObjectOwner',\n\t\t\tObjectOwner: owner.ObjectOwner,\n\t\t};\n\t}\n\n\tif ('Shared' in owner) {\n\t\treturn {\n\t\t\t$kind: 'Shared',\n\t\t\tShared: {\n\t\t\t\tinitialSharedVersion: owner.Shared.initial_shared_version,\n\t\t\t},\n\t\t};\n\t}\n\n\tthrow new Error(`Unknown owner type: ${JSON.stringify(owner)}`);\n}\n\nfunction convertOwnerToBcs(owner: ObjectOwner) {\n\tif (owner === 'Immutable') {\n\t\treturn { Immutable: null };\n\t}\n\n\tif ('AddressOwner' in owner) {\n\t\treturn { AddressOwner: owner.AddressOwner };\n\t}\n\n\tif ('ObjectOwner' in owner) {\n\t\treturn { ObjectOwner: owner.ObjectOwner };\n\t}\n\n\tif ('Shared' in owner) {\n\t\treturn {\n\t\t\tShared: { initialSharedVersion: owner.Shared.initial_shared_version },\n\t\t};\n\t}\n\n\tif (typeof owner === 'object' && owner !== null && 'ConsensusAddressOwner' in owner) {\n\t\treturn {\n\t\t\tConsensusAddressOwner: {\n\t\t\t\tstartVersion: owner.ConsensusAddressOwner.start_version,\n\t\t\t\towner: owner.ConsensusAddressOwner.owner,\n\t\t\t},\n\t\t};\n\t}\n\n\tthrow new Error(`Unknown owner type: ${JSON.stringify(owner)}`);\n}\n\nfunction parseOwnerAddress(owner: ObjectOwner): string | null {\n\tif (owner === 'Immutable') {\n\t\treturn null;\n\t}\n\n\tif ('ConsensusAddressOwner' in owner) {\n\t\treturn owner.ConsensusAddressOwner.owner;\n\t}\n\n\tif ('AddressOwner' in owner) {\n\t\treturn owner.AddressOwner;\n\t}\n\n\tif ('ObjectOwner' in owner) {\n\t\treturn owner.ObjectOwner;\n\t}\n\n\tif ('Shared' in owner) {\n\t\treturn null;\n\t}\n\n\tthrow new Error(`Unknown owner type: ${JSON.stringify(owner)}`);\n}\n\nfunction parseTransaction<Include extends SuiClientTypes.TransactionInclude = {}>(\n\ttransaction: SuiTransactionBlockResponse,\n\tinclude?: Include,\n): SuiClientTypes.TransactionResult<Include> {\n\tconst objectTypes: Record<string, string> = {};\n\n\tif (include?.objectTypes) {\n\t\ttransaction.objectChanges?.forEach((change) => {\n\t\t\tif (change.type !== 'published') {\n\t\t\t\tobjectTypes[change.objectId] = normalizeStructTag(change.objectType);\n\t\t\t}\n\t\t});\n\t}\n\n\tlet transactionData: SuiClientTypes.TransactionData | undefined;\n\tlet signatures: string[] = [];\n\tlet bcsBytes: Uint8Array | undefined;\n\n\tif (transaction.rawTransaction) {\n\t\tconst parsedTx = bcs.SenderSignedData.parse(fromBase64(transaction.rawTransaction))[0];\n\t\tsignatures = parsedTx.txSignatures;\n\n\t\tif (include?.transaction || include?.bcs) {\n\t\t\tconst bytes = bcs.TransactionData.serialize(parsedTx.intentMessage.value).toBytes();\n\n\t\t\tif (include?.bcs) {\n\t\t\t\tbcsBytes = bytes;\n\t\t\t}\n\n\t\t\tif (include?.transaction) {\n\t\t\t\tconst data = TransactionDataBuilder.restore({\n\t\t\t\t\tversion: 2,\n\t\t\t\t\tsender: parsedTx.intentMessage.value.V1.sender,\n\t\t\t\t\texpiration: parsedTx.intentMessage.value.V1.expiration,\n\t\t\t\t\tgasData: parsedTx.intentMessage.value.V1.gasData,\n\t\t\t\t\tinputs: parsedTx.intentMessage.value.V1.kind.ProgrammableTransaction!.inputs,\n\t\t\t\t\tcommands: parsedTx.intentMessage.value.V1.kind.ProgrammableTransaction!.commands,\n\t\t\t\t});\n\t\t\t\ttransactionData = { ...data };\n\t\t\t}\n\t\t}\n\t}\n\n\t// Get status from JSON-RPC response\n\tconst status: SuiClientTypes.ExecutionStatus = transaction.effects?.status\n\t\t? parseJsonRpcExecutionStatus(transaction.effects.status, transaction.effects.abortError)\n\t\t: {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: {\n\t\t\t\t\t$kind: 'Unknown',\n\t\t\t\t\tmessage: 'Unknown',\n\t\t\t\t\tUnknown: null,\n\t\t\t\t},\n\t\t\t};\n\n\tconst effectsBytes = transaction.rawEffects ? new Uint8Array(transaction.rawEffects) : null;\n\n\tconst result: SuiClientTypes.Transaction<Include> = {\n\t\tdigest: transaction.digest,\n\t\tepoch: transaction.effects?.executedEpoch ?? null,\n\t\tstatus,\n\t\teffects: (include?.effects && effectsBytes\n\t\t\t? parseTransactionEffectsBcs(effectsBytes)\n\t\t\t: undefined) as SuiClientTypes.Transaction<Include>['effects'],\n\t\tobjectTypes: (include?.objectTypes\n\t\t\t? objectTypes\n\t\t\t: undefined) as SuiClientTypes.Transaction<Include>['objectTypes'],\n\t\ttransaction: transactionData as SuiClientTypes.Transaction<Include>['transaction'],\n\t\tbcs: bcsBytes as SuiClientTypes.Transaction<Include>['bcs'],\n\t\tsignatures,\n\t\tbalanceChanges: (include?.balanceChanges\n\t\t\t? (transaction.balanceChanges?.map((change) => ({\n\t\t\t\t\tcoinType: normalizeStructTag(change.coinType),\n\t\t\t\t\taddress: parseOwnerAddress(change.owner)!,\n\t\t\t\t\tamount: change.amount,\n\t\t\t\t})) ?? [])\n\t\t\t: undefined) as SuiClientTypes.Transaction<Include>['balanceChanges'],\n\t\tevents: (include?.events\n\t\t\t? (transaction.events?.map((event) => ({\n\t\t\t\t\tpackageId: event.packageId,\n\t\t\t\t\tmodule: event.transactionModule,\n\t\t\t\t\tsender: event.sender,\n\t\t\t\t\teventType: event.type,\n\t\t\t\t\tbcs: 'bcs' in event ? fromBase64(event.bcs) : new Uint8Array(),\n\t\t\t\t\tjson: (event.parsedJson as Record<string, unknown>) ?? null,\n\t\t\t\t})) ?? [])\n\t\t\t: undefined) as SuiClientTypes.Transaction<Include>['events'],\n\t};\n\n\treturn status.success\n\t\t? {\n\t\t\t\t$kind: 'Transaction',\n\t\t\t\tTransaction: result,\n\t\t\t}\n\t\t: {\n\t\t\t\t$kind: 'FailedTransaction',\n\t\t\t\tFailedTransaction: result,\n\t\t\t};\n}\n\nfunction parseTransactionEffectsJson({\n\tbytes,\n\teffects,\n\tobjectChanges,\n}: {\n\tbytes?: Uint8Array;\n\teffects: TransactionEffects;\n\tobjectChanges: SuiObjectChange[] | null;\n}): {\n\teffects: SuiClientTypes.TransactionEffects;\n\tobjectTypes: Record<string, string>;\n} {\n\tconst changedObjects: SuiClientTypes.ChangedObject[] = [];\n\tconst unchangedConsensusObjects: SuiClientTypes.UnchangedConsensusObject[] = [];\n\tconst objectTypes: Record<string, string> = {};\n\n\tobjectChanges?.forEach((change) => {\n\t\tswitch (change.type) {\n\t\t\tcase 'published':\n\t\t\t\tchangedObjects.push({\n\t\t\t\t\tobjectId: change.packageId,\n\t\t\t\t\tinputState: 'DoesNotExist',\n\t\t\t\t\tinputVersion: null,\n\t\t\t\t\tinputDigest: null,\n\t\t\t\t\tinputOwner: null,\n\t\t\t\t\toutputState: 'PackageWrite',\n\t\t\t\t\toutputVersion: change.version,\n\t\t\t\t\toutputDigest: change.digest,\n\t\t\t\t\toutputOwner: null,\n\t\t\t\t\tidOperation: 'Created',\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase 'transferred':\n\t\t\t\tchangedObjects.push({\n\t\t\t\t\tobjectId: change.objectId,\n\t\t\t\t\tinputState: 'Exists',\n\t\t\t\t\tinputVersion: change.version,\n\t\t\t\t\tinputDigest: change.digest,\n\t\t\t\t\tinputOwner: {\n\t\t\t\t\t\t$kind: 'AddressOwner' as const,\n\t\t\t\t\t\tAddressOwner: change.sender,\n\t\t\t\t\t},\n\t\t\t\t\toutputState: 'ObjectWrite',\n\t\t\t\t\toutputVersion: change.version,\n\t\t\t\t\toutputDigest: change.digest,\n\t\t\t\t\toutputOwner: parseOwner(change.recipient),\n\t\t\t\t\tidOperation: 'None',\n\t\t\t\t});\n\t\t\t\tobjectTypes[change.objectId] = normalizeStructTag(change.objectType);\n\t\t\t\tbreak;\n\t\t\tcase 'mutated':\n\t\t\t\tchangedObjects.push({\n\t\t\t\t\tobjectId: change.objectId,\n\t\t\t\t\tinputState: 'Exists',\n\t\t\t\t\tinputVersion: change.previousVersion,\n\t\t\t\t\tinputDigest: null,\n\t\t\t\t\tinputOwner: parseOwner(change.owner),\n\t\t\t\t\toutputState: 'ObjectWrite',\n\t\t\t\t\toutputVersion: change.version,\n\t\t\t\t\toutputDigest: change.digest,\n\t\t\t\t\toutputOwner: parseOwner(change.owner),\n\t\t\t\t\tidOperation: 'None',\n\t\t\t\t});\n\t\t\t\tobjectTypes[change.objectId] = normalizeStructTag(change.objectType);\n\t\t\t\tbreak;\n\t\t\tcase 'deleted':\n\t\t\t\tchangedObjects.push({\n\t\t\t\t\tobjectId: change.objectId,\n\t\t\t\t\tinputState: 'Exists',\n\t\t\t\t\tinputVersion: change.version,\n\t\t\t\t\tinputDigest: effects.deleted?.find((d) => d.objectId === change.objectId)?.digest ?? null,\n\t\t\t\t\tinputOwner: null,\n\t\t\t\t\toutputState: 'DoesNotExist',\n\t\t\t\t\toutputVersion: null,\n\t\t\t\t\toutputDigest: null,\n\t\t\t\t\toutputOwner: null,\n\t\t\t\t\tidOperation: 'Deleted',\n\t\t\t\t});\n\t\t\t\tobjectTypes[change.objectId] = normalizeStructTag(change.objectType);\n\t\t\t\tbreak;\n\t\t\tcase 'wrapped':\n\t\t\t\tchangedObjects.push({\n\t\t\t\t\tobjectId: change.objectId,\n\t\t\t\t\tinputState: 'Exists',\n\t\t\t\t\tinputVersion: change.version,\n\t\t\t\t\tinputDigest: null,\n\t\t\t\t\tinputOwner: {\n\t\t\t\t\t\t$kind: 'AddressOwner' as const,\n\t\t\t\t\t\tAddressOwner: change.sender,\n\t\t\t\t\t},\n\t\t\t\t\toutputState: 'ObjectWrite',\n\t\t\t\t\toutputVersion: change.version,\n\t\t\t\t\toutputDigest:\n\t\t\t\t\t\teffects.wrapped?.find((w) => w.objectId === change.objectId)?.digest ?? null,\n\t\t\t\t\toutputOwner: {\n\t\t\t\t\t\t$kind: 'ObjectOwner' as const,\n\t\t\t\t\t\tObjectOwner: change.sender,\n\t\t\t\t\t},\n\t\t\t\t\tidOperation: 'None',\n\t\t\t\t});\n\t\t\t\tobjectTypes[change.objectId] = normalizeStructTag(change.objectType);\n\t\t\t\tbreak;\n\t\t\tcase 'created':\n\t\t\t\tchangedObjects.push({\n\t\t\t\t\tobjectId: change.objectId,\n\t\t\t\t\tinputState: 'DoesNotExist',\n\t\t\t\t\tinputVersion: null,\n\t\t\t\t\tinputDigest: null,\n\t\t\t\t\tinputOwner: null,\n\t\t\t\t\toutputState: 'ObjectWrite',\n\t\t\t\t\toutputVersion: change.version,\n\t\t\t\t\toutputDigest: change.digest,\n\t\t\t\t\toutputOwner: parseOwner(change.owner),\n\t\t\t\t\tidOperation: 'Created',\n\t\t\t\t});\n\t\t\t\tobjectTypes[change.objectId] = normalizeStructTag(change.objectType);\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\treturn {\n\t\tobjectTypes,\n\t\teffects: {\n\t\t\tbcs: bytes ?? null,\n\t\t\tversion: 2,\n\t\t\tstatus: parseJsonRpcExecutionStatus(effects.status, effects.abortError),\n\t\t\tgasUsed: effects.gasUsed,\n\t\t\ttransactionDigest: effects.transactionDigest,\n\t\t\tgasObject: {\n\t\t\t\tobjectId: effects.gasObject?.reference.objectId,\n\t\t\t\tinputState: 'Exists',\n\t\t\t\tinputVersion: null,\n\t\t\t\tinputDigest: null,\n\t\t\t\tinputOwner: null,\n\t\t\t\toutputState: 'ObjectWrite',\n\t\t\t\toutputVersion: effects.gasObject.reference.version,\n\t\t\t\toutputDigest: effects.gasObject.reference.digest,\n\t\t\t\toutputOwner: parseOwner(effects.gasObject.owner),\n\t\t\t\tidOperation: 'None',\n\t\t\t},\n\t\t\teventsDigest: effects.eventsDigest ?? null,\n\t\t\tdependencies: effects.dependencies ?? [],\n\t\t\tlamportVersion: effects.gasObject.reference.version,\n\t\t\tchangedObjects,\n\t\t\tunchangedConsensusObjects,\n\t\t\tauxiliaryDataDigest: null,\n\t\t},\n\t};\n}\n\nfunction parseNormalizedSuiMoveType(type: SuiMoveNormalizedType): SuiClientTypes.OpenSignature {\n\tif (typeof type !== 'string') {\n\t\tif ('Reference' in type) {\n\t\t\treturn {\n\t\t\t\treference: 'immutable',\n\t\t\t\tbody: parseNormalizedSuiMoveTypeBody(type.Reference),\n\t\t\t};\n\t\t}\n\n\t\tif ('MutableReference' in type) {\n\t\t\treturn {\n\t\t\t\treference: 'mutable',\n\t\t\t\tbody: parseNormalizedSuiMoveTypeBody(type.MutableReference),\n\t\t\t};\n\t\t}\n\t}\n\n\treturn {\n\t\treference: null,\n\t\tbody: parseNormalizedSuiMoveTypeBody(type),\n\t};\n}\n\nfunction parseNormalizedSuiMoveTypeBody(\n\ttype: SuiMoveNormalizedType,\n): SuiClientTypes.OpenSignatureBody {\n\tswitch (type) {\n\t\tcase 'Address':\n\t\t\treturn { $kind: 'address' };\n\t\tcase 'Bool':\n\t\t\treturn { $kind: 'bool' };\n\t\tcase 'U8':\n\t\t\treturn { $kind: 'u8' };\n\t\tcase 'U16':\n\t\t\treturn { $kind: 'u16' };\n\t\tcase 'U32':\n\t\t\treturn { $kind: 'u32' };\n\t\tcase 'U64':\n\t\t\treturn { $kind: 'u64' };\n\t\tcase 'U128':\n\t\t\treturn { $kind: 'u128' };\n\t\tcase 'U256':\n\t\t\treturn { $kind: 'u256' };\n\t}\n\n\tif (typeof type === 'string') {\n\t\tthrow new Error(`Unknown type: ${type}`);\n\t}\n\n\tif ('Vector' in type) {\n\t\treturn {\n\t\t\t$kind: 'vector',\n\t\t\tvector: parseNormalizedSuiMoveTypeBody(type.Vector),\n\t\t};\n\t}\n\n\tif ('Struct' in type) {\n\t\treturn {\n\t\t\t$kind: 'datatype',\n\t\t\tdatatype: {\n\t\t\t\ttypeName: `${normalizeSuiAddress(type.Struct.address)}::${type.Struct.module}::${type.Struct.name}`,\n\t\t\t\ttypeParameters: type.Struct.typeArguments.map((t) => parseNormalizedSuiMoveTypeBody(t)),\n\t\t\t},\n\t\t};\n\t}\n\n\tif ('TypeParameter' in type) {\n\t\treturn {\n\t\t\t$kind: 'typeParameter',\n\t\t\tindex: type.TypeParameter,\n\t\t};\n\t}\n\n\tthrow new Error(`Unknown type: ${JSON.stringify(type)}`);\n}\n\nfunction parseAbilities(abilitySet: SuiMoveAbilitySet): SuiClientTypes.Ability[] {\n\treturn abilitySet.abilities.map((ability) => {\n\t\tswitch (ability) {\n\t\t\tcase 'Copy':\n\t\t\t\treturn 'copy';\n\t\t\tcase 'Drop':\n\t\t\t\treturn 'drop';\n\t\t\tcase 'Store':\n\t\t\t\treturn 'store';\n\t\t\tcase 'Key':\n\t\t\t\treturn 'key';\n\t\t\tdefault:\n\t\t\t\treturn 'unknown';\n\t\t}\n\t});\n}\n\nfunction parseVisibility(visibility: SuiMoveVisibility): SuiClientTypes.Visibility {\n\tswitch (visibility) {\n\t\tcase 'Public':\n\t\t\treturn 'public';\n\t\tcase 'Private':\n\t\t\treturn 'private';\n\t\tcase 'Friend':\n\t\t\treturn 'friend';\n\t\tdefault:\n\t\t\treturn 'unknown';\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"core.mjs","names":["#jsonRpcClient","result","bcs"],"sources":["../../src/jsonRpc/core.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { fromBase64, type InferBcsInput } from '@mysten/bcs';\n\nimport { bcs, TypeTagSerializer } from '../bcs/index.js';\nimport type {\n\tExecutionStatus as JsonRpcExecutionStatus,\n\tObjectOwner,\n\tSuiMoveAbilitySet,\n\tSuiMoveAbort,\n\tSuiMoveNormalizedType,\n\tSuiMoveVisibility,\n\tSuiObjectChange,\n\tSuiObjectData,\n\tSuiObjectDataFilter,\n\tSuiTransactionBlockResponse,\n\tTransactionEffects,\n} from './types/index.js';\nimport { Transaction } from '../transactions/Transaction.js';\nimport { coreClientResolveTransactionPlugin } from '../client/core-resolver.js';\nimport { TransactionDataBuilder } from '../transactions/TransactionData.js';\nimport { chunk } from '@mysten/utils';\nimport { normalizeSuiAddress, normalizeStructTag } from '../utils/sui-types.js';\nimport { deriveDynamicFieldID } from '../utils/dynamic-fields.js';\nimport { SUI_FRAMEWORK_ADDRESS, SUI_SYSTEM_ADDRESS } from '../utils/constants.js';\nimport { CoreClient } from '../client/core.js';\nimport type { SuiClientTypes } from '../client/types.js';\nimport { ObjectError } from '../client/errors.js';\nimport {\n\tformatMoveAbortMessage,\n\tparseTransactionBcs,\n\tparseTransactionEffectsBcs,\n} from '../client/index.js';\nimport type { SuiJsonRpcClient } from './client.js';\n\nconst MAX_GAS = 50_000_000_000;\n\nfunction parseJsonRpcExecutionStatus(\n\tstatus: JsonRpcExecutionStatus,\n\tabortError?: SuiMoveAbort | null,\n): SuiClientTypes.ExecutionStatus {\n\tif (status.status === 'success') {\n\t\treturn { success: true, error: null };\n\t}\n\n\tconst rawMessage = status.error ?? 'Unknown';\n\n\tif (abortError) {\n\t\tconst commandMatch = rawMessage.match(/in command (\\d+)/);\n\t\tconst command = commandMatch ? parseInt(commandMatch[1], 10) : undefined;\n\n\t\tconst instructionMatch = rawMessage.match(/instruction:\\s*(\\d+)/);\n\t\tconst instruction = instructionMatch ? parseInt(instructionMatch[1], 10) : undefined;\n\n\t\tconst moduleParts = abortError.module_id?.split('::') ?? [];\n\t\tconst pkg = moduleParts[0] ? normalizeSuiAddress(moduleParts[0]) : undefined;\n\t\tconst module = moduleParts[1];\n\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: {\n\t\t\t\t$kind: 'MoveAbort',\n\t\t\t\tmessage: formatMoveAbortMessage({\n\t\t\t\t\tcommand,\n\t\t\t\t\tlocation:\n\t\t\t\t\t\tpkg && module\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\tpackage: pkg,\n\t\t\t\t\t\t\t\t\tmodule,\n\t\t\t\t\t\t\t\t\tfunctionName: abortError.function ?? undefined,\n\t\t\t\t\t\t\t\t\tinstruction,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\tabortCode: String(abortError.error_code ?? 0),\n\t\t\t\t\tcleverError: abortError.line != null ? { lineNumber: abortError.line } : undefined,\n\t\t\t\t}),\n\t\t\t\tcommand,\n\t\t\t\tMoveAbort: {\n\t\t\t\t\tabortCode: String(abortError.error_code ?? 0),\n\t\t\t\t\tlocation: abortError.module_id\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tpackage: normalizeSuiAddress(abortError.module_id.split('::')[0] ?? ''),\n\t\t\t\t\t\t\t\tmodule: abortError.module_id.split('::')[1] ?? '',\n\t\t\t\t\t\t\t\tfunctionName: abortError.function ?? undefined,\n\t\t\t\t\t\t\t\tinstruction,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined,\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\n\treturn {\n\t\tsuccess: false,\n\t\terror: {\n\t\t\t$kind: 'Unknown',\n\t\t\tmessage: rawMessage,\n\t\t\tUnknown: null,\n\t\t},\n\t};\n}\n\nexport class JSONRpcCoreClient extends CoreClient {\n\t#jsonRpcClient: SuiJsonRpcClient;\n\n\tconstructor({\n\t\tjsonRpcClient,\n\t\tmvr,\n\t}: {\n\t\tjsonRpcClient: SuiJsonRpcClient;\n\t\tmvr?: SuiClientTypes.MvrOptions;\n\t}) {\n\t\tsuper({ network: jsonRpcClient.network, base: jsonRpcClient, mvr });\n\t\tthis.#jsonRpcClient = jsonRpcClient;\n\t}\n\n\tasync getObjects<Include extends SuiClientTypes.ObjectInclude = {}>(\n\t\toptions: SuiClientTypes.GetObjectsOptions<Include>,\n\t) {\n\t\tconst batches = chunk(options.objectIds, 50);\n\t\tconst results: SuiClientTypes.GetObjectsResponse<Include>['objects'] = [];\n\t\tfor (const batch of batches) {\n\t\t\tconst objects = await this.#jsonRpcClient.multiGetObjects({\n\t\t\t\tids: batch,\n\t\t\t\toptions: {\n\t\t\t\t\tshowOwner: true,\n\t\t\t\t\tshowType: true,\n\t\t\t\t\tshowBcs: options.include?.content || options.include?.objectBcs ? true : false,\n\t\t\t\t\tshowPreviousTransaction:\n\t\t\t\t\t\toptions.include?.previousTransaction || options.include?.objectBcs ? true : false,\n\t\t\t\t\tshowStorageRebate: options.include?.objectBcs ?? false,\n\t\t\t\t\tshowContent: options.include?.json ?? false,\n\t\t\t\t\tshowDisplay: options.include?.display ?? false,\n\t\t\t\t},\n\t\t\t\tsignal: options.signal,\n\t\t\t});\n\n\t\t\tfor (const [idx, object] of objects.entries()) {\n\t\t\t\tif (object.error) {\n\t\t\t\t\tresults.push(ObjectError.fromResponse(object.error, batch[idx]));\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(parseObject(object.data!, options.include));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tobjects: results,\n\t\t};\n\t}\n\tasync listOwnedObjects<Include extends SuiClientTypes.ObjectInclude = {}>(\n\t\toptions: SuiClientTypes.ListOwnedObjectsOptions<Include>,\n\t) {\n\t\tlet filter: SuiObjectDataFilter | null = null;\n\t\tif (options.type) {\n\t\t\tconst parts = options.type.split('::');\n\t\t\tif (parts.length === 1) {\n\t\t\t\tfilter = { Package: options.type };\n\t\t\t} else if (parts.length === 2) {\n\t\t\t\tfilter = { MoveModule: { package: parts[0], module: parts[1] } };\n\t\t\t} else {\n\t\t\t\tfilter = { StructType: options.type };\n\t\t\t}\n\t\t}\n\n\t\tconst objects = await this.#jsonRpcClient.getOwnedObjects({\n\t\t\towner: options.owner,\n\t\t\tlimit: options.limit,\n\t\t\tcursor: options.cursor,\n\t\t\toptions: {\n\t\t\t\tshowOwner: true,\n\t\t\t\tshowType: true,\n\t\t\t\tshowBcs: options.include?.content || options.include?.objectBcs ? true : false,\n\t\t\t\tshowPreviousTransaction:\n\t\t\t\t\toptions.include?.previousTransaction || options.include?.objectBcs ? true : false,\n\t\t\t\tshowStorageRebate: options.include?.objectBcs ?? false,\n\t\t\t\tshowContent: options.include?.json ?? false,\n\t\t\t\tshowDisplay: options.include?.display ?? false,\n\t\t\t},\n\t\t\tfilter,\n\t\t\tsignal: options.signal,\n\t\t});\n\n\t\treturn {\n\t\t\tobjects: objects.data.map((result) => {\n\t\t\t\tif (result.error) {\n\t\t\t\t\tthrow ObjectError.fromResponse(result.error);\n\t\t\t\t}\n\n\t\t\t\treturn parseObject(result.data!, options.include);\n\t\t\t}),\n\t\t\thasNextPage: objects.hasNextPage,\n\t\t\tcursor: objects.nextCursor ?? null,\n\t\t};\n\t}\n\n\tasync listCoins(options: SuiClientTypes.ListCoinsOptions) {\n\t\tconst coins = await this.#jsonRpcClient.getCoins({\n\t\t\towner: options.owner,\n\t\t\tcoinType: options.coinType,\n\t\t\tlimit: options.limit,\n\t\t\tcursor: options.cursor,\n\t\t\tsignal: options.signal,\n\t\t});\n\n\t\treturn {\n\t\t\tobjects: coins.data.map(\n\t\t\t\t(coin): SuiClientTypes.Coin => ({\n\t\t\t\t\tobjectId: coin.coinObjectId,\n\t\t\t\t\tversion: coin.version,\n\t\t\t\t\tdigest: coin.digest,\n\t\t\t\t\tbalance: coin.balance,\n\t\t\t\t\ttype: normalizeStructTag(`0x2::coin::Coin<${coin.coinType}>`),\n\t\t\t\t\towner: {\n\t\t\t\t\t\t$kind: 'AddressOwner' as const,\n\t\t\t\t\t\tAddressOwner: options.owner,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t),\n\t\t\thasNextPage: coins.hasNextPage,\n\t\t\tcursor: coins.nextCursor ?? null,\n\t\t};\n\t}\n\n\tasync getBalance(options: SuiClientTypes.GetBalanceOptions) {\n\t\tconst balance = await this.#jsonRpcClient.getBalance({\n\t\t\towner: options.owner,\n\t\t\tcoinType: options.coinType,\n\t\t\tsignal: options.signal,\n\t\t});\n\n\t\tconst addressBalance = balance.fundsInAddressBalance ?? '0';\n\t\tconst coinBalance = String(BigInt(balance.totalBalance) - BigInt(addressBalance));\n\n\t\treturn {\n\t\t\tbalance: {\n\t\t\t\tcoinType: normalizeStructTag(balance.coinType),\n\t\t\t\tbalance: balance.totalBalance,\n\t\t\t\tcoinBalance,\n\t\t\t\taddressBalance,\n\t\t\t},\n\t\t};\n\t}\n\tasync getCoinMetadata(\n\t\toptions: SuiClientTypes.GetCoinMetadataOptions,\n\t): Promise<SuiClientTypes.GetCoinMetadataResponse> {\n\t\tconst coinType = (await this.mvr.resolveType({ type: options.coinType })).type;\n\n\t\tconst result = await this.#jsonRpcClient.getCoinMetadata({\n\t\t\tcoinType,\n\t\t\tsignal: options.signal,\n\t\t});\n\n\t\tif (!result) {\n\t\t\treturn { coinMetadata: null };\n\t\t}\n\n\t\treturn {\n\t\t\tcoinMetadata: {\n\t\t\t\tid: result.id ?? null,\n\t\t\t\tdecimals: result.decimals,\n\t\t\t\tname: result.name,\n\t\t\t\tsymbol: result.symbol,\n\t\t\t\tdescription: result.description,\n\t\t\t\ticonUrl: result.iconUrl ?? null,\n\t\t\t},\n\t\t};\n\t}\n\n\tasync listBalances(options: SuiClientTypes.ListBalancesOptions) {\n\t\tconst balances = await this.#jsonRpcClient.getAllBalances({\n\t\t\towner: options.owner,\n\t\t\tsignal: options.signal,\n\t\t});\n\n\t\treturn {\n\t\t\tbalances: balances.map((balance) => {\n\t\t\t\tconst addressBalance = balance.fundsInAddressBalance ?? '0';\n\t\t\t\tconst coinBalance = String(BigInt(balance.totalBalance) - BigInt(addressBalance));\n\t\t\t\treturn {\n\t\t\t\t\tcoinType: normalizeStructTag(balance.coinType),\n\t\t\t\t\tbalance: balance.totalBalance,\n\t\t\t\t\tcoinBalance,\n\t\t\t\t\taddressBalance,\n\t\t\t\t};\n\t\t\t}),\n\t\t\thasNextPage: false,\n\t\t\tcursor: null,\n\t\t};\n\t}\n\tasync getTransaction<Include extends SuiClientTypes.TransactionInclude = {}>(\n\t\toptions: SuiClientTypes.GetTransactionOptions<Include>,\n\t): Promise<SuiClientTypes.TransactionResult<Include>> {\n\t\tconst transaction = await this.#jsonRpcClient.getTransactionBlock({\n\t\t\tdigest: options.digest,\n\t\t\toptions: {\n\t\t\t\t// showRawInput is always needed to extract signatures from SenderSignedData\n\t\t\t\tshowRawInput: true,\n\t\t\t\t// showEffects is always needed to get status\n\t\t\t\tshowEffects: true,\n\t\t\t\tshowObjectChanges: options.include?.objectTypes ?? false,\n\t\t\t\tshowRawEffects: options.include?.effects ?? false,\n\t\t\t\tshowEvents: options.include?.events ?? false,\n\t\t\t\tshowBalanceChanges: options.include?.balanceChanges ?? false,\n\t\t\t},\n\t\t\tsignal: options.signal,\n\t\t});\n\n\t\treturn parseTransaction(transaction, options.include);\n\t}\n\tasync executeTransaction<Include extends SuiClientTypes.TransactionInclude = {}>(\n\t\toptions: SuiClientTypes.ExecuteTransactionOptions<Include>,\n\t): Promise<SuiClientTypes.TransactionResult<Include>> {\n\t\tconst transaction = await this.#jsonRpcClient.executeTransactionBlock({\n\t\t\ttransactionBlock: options.transaction,\n\t\t\tsignature: options.signatures,\n\t\t\toptions: {\n\t\t\t\t// showRawInput is always needed to extract signatures from SenderSignedData\n\t\t\t\tshowRawInput: true,\n\t\t\t\t// showEffects is always needed to get status\n\t\t\t\tshowEffects: true,\n\t\t\t\tshowRawEffects: options.include?.effects ?? false,\n\t\t\t\tshowEvents: options.include?.events ?? false,\n\t\t\t\tshowObjectChanges: options.include?.objectTypes ?? false,\n\t\t\t\tshowBalanceChanges: options.include?.balanceChanges ?? false,\n\t\t\t},\n\t\t\tsignal: options.signal,\n\t\t});\n\n\t\treturn parseTransaction(transaction, options.include);\n\t}\n\tasync simulateTransaction<Include extends SuiClientTypes.SimulateTransactionInclude = {}>(\n\t\toptions: SuiClientTypes.SimulateTransactionOptions<Include>,\n\t): Promise<SuiClientTypes.SimulateTransactionResult<Include>> {\n\t\tif (!(options.transaction instanceof Uint8Array)) {\n\t\t\tawait options.transaction.prepareForSerialization({ client: this });\n\t\t}\n\n\t\tconst tx = Transaction.from(options.transaction);\n\n\t\tconst data =\n\t\t\toptions.transaction instanceof Uint8Array\n\t\t\t\t? null\n\t\t\t\t: TransactionDataBuilder.restore(options.transaction.getData());\n\n\t\tconst transactionBytes = data\n\t\t\t? data.build({\n\t\t\t\t\toverrides: {\n\t\t\t\t\t\tgasData: {\n\t\t\t\t\t\t\tbudget: data.gasData.budget ?? String(MAX_GAS),\n\t\t\t\t\t\t\tprice: data.gasData.price ?? String(await this.#jsonRpcClient.getReferenceGasPrice()),\n\t\t\t\t\t\t\tpayment: data.gasData.payment ?? [],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t: (options.transaction as Uint8Array);\n\n\t\tconst result = await this.#jsonRpcClient.dryRunTransactionBlock({\n\t\t\ttransactionBlock: transactionBytes,\n\t\t\tsignal: options.signal,\n\t\t});\n\n\t\tconst { effects, objectTypes } = parseTransactionEffectsJson({\n\t\t\teffects: result.effects,\n\t\t\tobjectChanges: result.objectChanges,\n\t\t});\n\n\t\tconst transactionData: SuiClientTypes.Transaction<Include> = {\n\t\t\tdigest: TransactionDataBuilder.getDigestFromBytes(transactionBytes),\n\t\t\tepoch: null,\n\t\t\tstatus: effects.status,\n\t\t\teffects: (options.include?.effects\n\t\t\t\t? effects\n\t\t\t\t: undefined) as SuiClientTypes.Transaction<Include>['effects'],\n\t\t\tobjectTypes: (options.include?.objectTypes\n\t\t\t\t? objectTypes\n\t\t\t\t: undefined) as SuiClientTypes.Transaction<Include>['objectTypes'],\n\t\t\tsignatures: [],\n\t\t\ttransaction: (options.include?.transaction\n\t\t\t\t? parseTransactionBcs(\n\t\t\t\t\t\toptions.transaction instanceof Uint8Array\n\t\t\t\t\t\t\t? options.transaction\n\t\t\t\t\t\t\t: await options.transaction\n\t\t\t\t\t\t\t\t\t.build({\n\t\t\t\t\t\t\t\t\t\tclient: this,\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t.catch(() => null as never),\n\t\t\t\t\t)\n\t\t\t\t: undefined) as SuiClientTypes.Transaction<Include>['transaction'],\n\t\t\tbcs: (options.include?.bcs\n\t\t\t\t? transactionBytes\n\t\t\t\t: undefined) as SuiClientTypes.Transaction<Include>['bcs'],\n\t\t\tbalanceChanges: (options.include?.balanceChanges\n\t\t\t\t? result.balanceChanges.map((change) => ({\n\t\t\t\t\t\tcoinType: normalizeStructTag(change.coinType),\n\t\t\t\t\t\taddress: parseOwnerAddress(change.owner)!,\n\t\t\t\t\t\tamount: change.amount,\n\t\t\t\t\t}))\n\t\t\t\t: undefined) as SuiClientTypes.Transaction<Include>['balanceChanges'],\n\t\t\tevents: (options.include?.events\n\t\t\t\t? (result.events?.map((event) => ({\n\t\t\t\t\t\tpackageId: event.packageId,\n\t\t\t\t\t\tmodule: event.transactionModule,\n\t\t\t\t\t\tsender: event.sender,\n\t\t\t\t\t\teventType: event.type,\n\t\t\t\t\t\tbcs: 'bcs' in event ? fromBase64(event.bcs) : new Uint8Array(),\n\t\t\t\t\t\tjson: (event.parsedJson as Record<string, unknown>) ?? null,\n\t\t\t\t\t})) ?? [])\n\t\t\t\t: undefined) as SuiClientTypes.Transaction<Include>['events'],\n\t\t};\n\n\t\tlet commandResults: SuiClientTypes.CommandResult[] | undefined;\n\t\tif (options.include?.commandResults) {\n\t\t\ttry {\n\t\t\t\tconst sender = tx.getData().sender ?? normalizeSuiAddress('0x0');\n\t\t\t\tconst devInspectResult = await this.#jsonRpcClient.devInspectTransactionBlock({\n\t\t\t\t\tsender,\n\t\t\t\t\ttransactionBlock: tx,\n\t\t\t\t\tsignal: options.signal,\n\t\t\t\t});\n\n\t\t\t\tif (devInspectResult.results) {\n\t\t\t\t\tcommandResults = devInspectResult.results.map((result) => ({\n\t\t\t\t\t\treturnValues: (result.returnValues ?? []).map(([bytes]) => ({\n\t\t\t\t\t\t\tbcs: new Uint8Array(bytes),\n\t\t\t\t\t\t})),\n\t\t\t\t\t\tmutatedReferences: (result.mutableReferenceOutputs ?? []).map(([, bytes]) => ({\n\t\t\t\t\t\t\tbcs: new Uint8Array(bytes),\n\t\t\t\t\t\t})),\n\t\t\t\t\t}));\n\t\t\t\t}\n\t\t\t} catch {}\n\t\t}\n\n\t\treturn effects.status.success\n\t\t\t? {\n\t\t\t\t\t$kind: 'Transaction',\n\t\t\t\t\tTransaction: transactionData,\n\t\t\t\t\tcommandResults:\n\t\t\t\t\t\tcommandResults as SuiClientTypes.SimulateTransactionResult<Include>['commandResults'],\n\t\t\t\t}\n\t\t\t: {\n\t\t\t\t\t$kind: 'FailedTransaction',\n\t\t\t\t\tFailedTransaction: transactionData,\n\t\t\t\t\tcommandResults:\n\t\t\t\t\t\tcommandResults as SuiClientTypes.SimulateTransactionResult<Include>['commandResults'],\n\t\t\t\t};\n\t}\n\tasync getReferenceGasPrice(options?: SuiClientTypes.GetReferenceGasPriceOptions) {\n\t\tconst referenceGasPrice = await this.#jsonRpcClient.getReferenceGasPrice({\n\t\t\tsignal: options?.signal,\n\t\t});\n\n\t\treturn {\n\t\t\treferenceGasPrice: String(referenceGasPrice),\n\t\t};\n\t}\n\n\tasync getProtocolConfig(\n\t\toptions?: SuiClientTypes.GetProtocolConfigOptions,\n\t): Promise<SuiClientTypes.GetProtocolConfigResponse> {\n\t\tconst result = await this.#jsonRpcClient.getProtocolConfig({ signal: options?.signal });\n\n\t\tconst attributes: Record<string, string | null> = {};\n\t\tfor (const [key, value] of Object.entries(result.attributes)) {\n\t\t\tif (value === null) {\n\t\t\t\tattributes[key] = null;\n\t\t\t} else if ('u16' in value) {\n\t\t\t\tattributes[key] = value.u16;\n\t\t\t} else if ('u32' in value) {\n\t\t\t\tattributes[key] = value.u32;\n\t\t\t} else if ('u64' in value) {\n\t\t\t\tattributes[key] = value.u64;\n\t\t\t} else if ('f64' in value) {\n\t\t\t\tattributes[key] = value.f64;\n\t\t\t} else if ('bool' in value) {\n\t\t\t\tattributes[key] = value.bool;\n\t\t\t} else {\n\t\t\t\tconst entries = Object.entries(value);\n\t\t\t\tattributes[key] = entries.length === 1 ? String(entries[0][1]) : JSON.stringify(value);\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tprotocolConfig: {\n\t\t\t\tprotocolVersion: result.protocolVersion,\n\t\t\t\tfeatureFlags: { ...result.featureFlags },\n\t\t\t\tattributes,\n\t\t\t},\n\t\t};\n\t}\n\n\tasync getCurrentSystemState(\n\t\toptions?: SuiClientTypes.GetCurrentSystemStateOptions,\n\t): Promise<SuiClientTypes.GetCurrentSystemStateResponse> {\n\t\tconst systemState = await this.#jsonRpcClient.getLatestSuiSystemState({\n\t\t\tsignal: options?.signal,\n\t\t});\n\n\t\treturn {\n\t\t\tsystemState: {\n\t\t\t\tsystemStateVersion: systemState.systemStateVersion,\n\t\t\t\tepoch: systemState.epoch,\n\t\t\t\tprotocolVersion: systemState.protocolVersion,\n\t\t\t\treferenceGasPrice: systemState.referenceGasPrice?.toString() ?? (null as never),\n\t\t\t\tepochStartTimestampMs: systemState.epochStartTimestampMs,\n\t\t\t\tsafeMode: systemState.safeMode,\n\t\t\t\tsafeModeStorageRewards: systemState.safeModeStorageRewards,\n\t\t\t\tsafeModeComputationRewards: systemState.safeModeComputationRewards,\n\t\t\t\tsafeModeStorageRebates: systemState.safeModeStorageRebates,\n\t\t\t\tsafeModeNonRefundableStorageFee: systemState.safeModeNonRefundableStorageFee,\n\t\t\t\tparameters: {\n\t\t\t\t\tepochDurationMs: systemState.epochDurationMs,\n\t\t\t\t\tstakeSubsidyStartEpoch: systemState.stakeSubsidyStartEpoch,\n\t\t\t\t\tmaxValidatorCount: systemState.maxValidatorCount,\n\t\t\t\t\tminValidatorJoiningStake: systemState.minValidatorJoiningStake,\n\t\t\t\t\tvalidatorLowStakeThreshold: systemState.validatorLowStakeThreshold,\n\t\t\t\t\tvalidatorLowStakeGracePeriod: systemState.validatorLowStakeGracePeriod,\n\t\t\t\t},\n\t\t\t\tstorageFund: {\n\t\t\t\t\ttotalObjectStorageRebates: systemState.storageFundTotalObjectStorageRebates,\n\t\t\t\t\tnonRefundableBalance: systemState.storageFundNonRefundableBalance,\n\t\t\t\t},\n\t\t\t\tstakeSubsidy: {\n\t\t\t\t\tbalance: systemState.stakeSubsidyBalance,\n\t\t\t\t\tdistributionCounter: systemState.stakeSubsidyDistributionCounter,\n\t\t\t\t\tcurrentDistributionAmount: systemState.stakeSubsidyCurrentDistributionAmount,\n\t\t\t\t\tstakeSubsidyPeriodLength: systemState.stakeSubsidyPeriodLength,\n\t\t\t\t\tstakeSubsidyDecreaseRate: systemState.stakeSubsidyDecreaseRate,\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\n\tasync listDynamicFields(options: SuiClientTypes.ListDynamicFieldsOptions) {\n\t\tconst dynamicFields = await this.#jsonRpcClient.getDynamicFields({\n\t\t\tparentId: options.parentId,\n\t\t\tlimit: options.limit,\n\t\t\tcursor: options.cursor,\n\t\t});\n\n\t\treturn {\n\t\t\tdynamicFields: dynamicFields.data.map((dynamicField): SuiClientTypes.DynamicFieldEntry => {\n\t\t\t\tconst isDynamicObject = dynamicField.type === 'DynamicObject';\n\t\t\t\tconst fullType = isDynamicObject\n\t\t\t\t\t? `0x2::dynamic_field::Field<0x2::dynamic_object_field::Wrapper<${dynamicField.name.type}>, 0x2::object::ID>`\n\t\t\t\t\t: `0x2::dynamic_field::Field<${dynamicField.name.type}, ${dynamicField.objectType}>`;\n\n\t\t\t\tconst bcsBytes = fromBase64(dynamicField.bcsName);\n\t\t\t\tconst derivedNameType = isDynamicObject\n\t\t\t\t\t? `0x2::dynamic_object_field::Wrapper<${dynamicField.name.type}>`\n\t\t\t\t\t: dynamicField.name.type;\n\t\t\t\treturn {\n\t\t\t\t\t$kind: isDynamicObject ? 'DynamicObject' : 'DynamicField',\n\t\t\t\t\tfieldId: deriveDynamicFieldID(options.parentId, derivedNameType, bcsBytes),\n\t\t\t\t\ttype: normalizeStructTag(fullType),\n\t\t\t\t\tname: {\n\t\t\t\t\t\ttype: dynamicField.name.type,\n\t\t\t\t\t\tbcs: bcsBytes,\n\t\t\t\t\t},\n\t\t\t\t\tvalueType: dynamicField.objectType,\n\t\t\t\t\tchildId: isDynamicObject ? dynamicField.objectId : undefined,\n\t\t\t\t} as SuiClientTypes.DynamicFieldEntry;\n\t\t\t}),\n\t\t\thasNextPage: dynamicFields.hasNextPage,\n\t\t\tcursor: dynamicFields.nextCursor,\n\t\t};\n\t}\n\n\tasync verifyZkLoginSignature(options: SuiClientTypes.VerifyZkLoginSignatureOptions) {\n\t\tconst result = await this.#jsonRpcClient.verifyZkLoginSignature({\n\t\t\tbytes: options.bytes,\n\t\t\tsignature: options.signature,\n\t\t\tintentScope: options.intentScope,\n\t\t\tauthor: options.address,\n\t\t});\n\n\t\treturn {\n\t\t\tsuccess: result.success,\n\t\t\terrors: result.errors,\n\t\t};\n\t}\n\n\tasync defaultNameServiceName(\n\t\toptions: SuiClientTypes.DefaultNameServiceNameOptions,\n\t): Promise<SuiClientTypes.DefaultNameServiceNameResponse> {\n\t\tconst name = (await this.#jsonRpcClient.resolveNameServiceNames(options)).data[0];\n\t\treturn {\n\t\t\tdata: {\n\t\t\t\tname,\n\t\t\t},\n\t\t};\n\t}\n\n\tresolveTransactionPlugin() {\n\t\treturn coreClientResolveTransactionPlugin;\n\t}\n\n\tasync getMoveFunction(\n\t\toptions: SuiClientTypes.GetMoveFunctionOptions,\n\t): Promise<SuiClientTypes.GetMoveFunctionResponse> {\n\t\tconst resolvedPackageId = (await this.mvr.resolvePackage({ package: options.packageId }))\n\t\t\t.package;\n\t\tconst result = await this.#jsonRpcClient.getNormalizedMoveFunction({\n\t\t\tpackage: resolvedPackageId,\n\t\t\tmodule: options.moduleName,\n\t\t\tfunction: options.name,\n\t\t});\n\n\t\treturn {\n\t\t\tfunction: {\n\t\t\t\tpackageId: normalizeSuiAddress(resolvedPackageId),\n\t\t\t\tmoduleName: options.moduleName,\n\t\t\t\tname: options.name,\n\t\t\t\tvisibility: parseVisibility(result.visibility),\n\t\t\t\tisEntry: result.isEntry,\n\t\t\t\ttypeParameters: result.typeParameters.map((abilities) => ({\n\t\t\t\t\tisPhantom: false,\n\t\t\t\t\tconstraints: parseAbilities(abilities),\n\t\t\t\t})),\n\t\t\t\tparameters: result.parameters.map((param) => parseNormalizedSuiMoveType(param)),\n\t\t\t\treturns: result.return.map((ret) => parseNormalizedSuiMoveType(ret)),\n\t\t\t},\n\t\t};\n\t}\n\n\tasync getChainIdentifier(\n\t\t_options?: SuiClientTypes.GetChainIdentifierOptions,\n\t): Promise<SuiClientTypes.GetChainIdentifierResponse> {\n\t\treturn this.cache.read(['chainIdentifier'], async () => {\n\t\t\tconst checkpoint = await this.#jsonRpcClient.getCheckpoint({ id: '0' });\n\t\t\treturn {\n\t\t\t\tchainIdentifier: checkpoint.digest,\n\t\t\t};\n\t\t});\n\t}\n}\n\nfunction serializeObjectToBcs(object: SuiObjectData): Uint8Array | undefined {\n\tif (object.bcs?.dataType !== 'moveObject') {\n\t\treturn undefined;\n\t}\n\n\ttry {\n\t\t// Normalize the type string to ensure consistent address formatting (0x2 vs 0x00...02)\n\t\tconst typeStr = normalizeStructTag(object.bcs.type);\n\t\tlet moveObjectType: InferBcsInput<typeof bcs.MoveObjectType>;\n\n\t\t// Normalize constants for comparison\n\t\tconst normalizedSuiFramework = normalizeSuiAddress(SUI_FRAMEWORK_ADDRESS);\n\t\tconst gasCoinType = normalizeStructTag(\n\t\t\t`${SUI_FRAMEWORK_ADDRESS}::coin::Coin<${SUI_FRAMEWORK_ADDRESS}::sui::SUI>`,\n\t\t);\n\t\tconst stakedSuiType = normalizeStructTag(`${SUI_SYSTEM_ADDRESS}::staking_pool::StakedSui`);\n\t\tconst coinPrefix = `${normalizedSuiFramework}::coin::Coin<`;\n\n\t\tif (typeStr === gasCoinType) {\n\t\t\tmoveObjectType = { GasCoin: null };\n\t\t} else if (typeStr === stakedSuiType) {\n\t\t\tmoveObjectType = { StakedSui: null };\n\t\t} else if (typeStr.startsWith(coinPrefix)) {\n\t\t\tconst innerTypeMatch = typeStr.match(\n\t\t\t\tnew RegExp(\n\t\t\t\t\t`${normalizedSuiFramework.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}::coin::Coin<(.+)>$`,\n\t\t\t\t),\n\t\t\t);\n\t\t\tif (innerTypeMatch) {\n\t\t\t\tconst innerTypeTag = TypeTagSerializer.parseFromStr(innerTypeMatch[1], true);\n\t\t\t\tmoveObjectType = { Coin: innerTypeTag };\n\t\t\t} else {\n\t\t\t\tthrow new Error('Failed to parse Coin type');\n\t\t\t}\n\t\t} else {\n\t\t\tconst typeTag = TypeTagSerializer.parseFromStr(typeStr, true);\n\t\t\tif (typeof typeTag !== 'object' || !('struct' in typeTag)) {\n\t\t\t\tthrow new Error('Expected struct type tag');\n\t\t\t}\n\t\t\tmoveObjectType = { Other: typeTag.struct };\n\t\t}\n\n\t\tconst contents = fromBase64(object.bcs.bcsBytes);\n\t\tconst owner = convertOwnerToBcs(object.owner!);\n\n\t\treturn bcs.Object.serialize({\n\t\t\tdata: {\n\t\t\t\tMove: {\n\t\t\t\t\ttype: moveObjectType,\n\t\t\t\t\thasPublicTransfer: object.bcs.hasPublicTransfer,\n\t\t\t\t\tversion: object.bcs.version,\n\t\t\t\t\tcontents,\n\t\t\t\t},\n\t\t\t},\n\t\t\towner,\n\t\t\tpreviousTransaction: object.previousTransaction!,\n\t\t\tstorageRebate: object.storageRebate!,\n\t\t}).toBytes();\n\t} catch {\n\t\t// If serialization fails, return undefined\n\t\treturn undefined;\n\t}\n}\n\nfunction parseObject<Include extends SuiClientTypes.ObjectInclude = {}>(\n\tobject: SuiObjectData,\n\tinclude?: Include,\n): SuiClientTypes.Object<Include> {\n\tconst bcsContent =\n\t\tobject.bcs?.dataType === 'moveObject' ? fromBase64(object.bcs.bcsBytes) : undefined;\n\n\tconst objectBcs = include?.objectBcs ? serializeObjectToBcs(object) : undefined;\n\n\t// Package objects have type \"package\" which is not a struct tag, so don't normalize it\n\tconst type =\n\t\tobject.type && object.type.includes('::')\n\t\t\t? normalizeStructTag(object.type)\n\t\t\t: (object.type ?? '');\n\n\tconst jsonContent =\n\t\tinclude?.json && object.content?.dataType === 'moveObject'\n\t\t\t? (object.content.fields as Record<string, unknown>)\n\t\t\t: include?.json\n\t\t\t\t? null\n\t\t\t\t: undefined;\n\n\tconst displayData = include?.display\n\t\t? object.display?.data != null\n\t\t\t? { output: object.display.data as Record<string, string>, errors: null }\n\t\t\t: null\n\t\t: undefined;\n\n\treturn {\n\t\tobjectId: object.objectId,\n\t\tversion: object.version,\n\t\tdigest: object.digest,\n\t\ttype,\n\t\tcontent: (include?.content\n\t\t\t? bcsContent\n\t\t\t: undefined) as SuiClientTypes.Object<Include>['content'],\n\t\towner: parseOwner(object.owner!),\n\t\tpreviousTransaction: (include?.previousTransaction\n\t\t\t? (object.previousTransaction ?? undefined)\n\t\t\t: undefined) as SuiClientTypes.Object<Include>['previousTransaction'],\n\t\tobjectBcs: objectBcs as SuiClientTypes.Object<Include>['objectBcs'],\n\t\tjson: jsonContent as SuiClientTypes.Object<Include>['json'],\n\t\tdisplay: displayData as SuiClientTypes.Object<Include>['display'],\n\t};\n}\n\nfunction parseOwner(owner: ObjectOwner): SuiClientTypes.ObjectOwner {\n\tif (owner === 'Immutable') {\n\t\treturn {\n\t\t\t$kind: 'Immutable',\n\t\t\tImmutable: true,\n\t\t};\n\t}\n\n\tif ('ConsensusAddressOwner' in owner) {\n\t\treturn {\n\t\t\t$kind: 'ConsensusAddressOwner',\n\t\t\tConsensusAddressOwner: {\n\t\t\t\towner: owner.ConsensusAddressOwner.owner,\n\t\t\t\tstartVersion: owner.ConsensusAddressOwner.start_version,\n\t\t\t},\n\t\t};\n\t}\n\n\tif ('AddressOwner' in owner) {\n\t\treturn {\n\t\t\t$kind: 'AddressOwner',\n\t\t\tAddressOwner: owner.AddressOwner,\n\t\t};\n\t}\n\n\tif ('ObjectOwner' in owner) {\n\t\treturn {\n\t\t\t$kind: 'ObjectOwner',\n\t\t\tObjectOwner: owner.ObjectOwner,\n\t\t};\n\t}\n\n\tif ('Shared' in owner) {\n\t\treturn {\n\t\t\t$kind: 'Shared',\n\t\t\tShared: {\n\t\t\t\tinitialSharedVersion: owner.Shared.initial_shared_version,\n\t\t\t},\n\t\t};\n\t}\n\n\tthrow new Error(`Unknown owner type: ${JSON.stringify(owner)}`);\n}\n\nfunction convertOwnerToBcs(owner: ObjectOwner) {\n\tif (owner === 'Immutable') {\n\t\treturn { Immutable: null };\n\t}\n\n\tif ('AddressOwner' in owner) {\n\t\treturn { AddressOwner: owner.AddressOwner };\n\t}\n\n\tif ('ObjectOwner' in owner) {\n\t\treturn { ObjectOwner: owner.ObjectOwner };\n\t}\n\n\tif ('Shared' in owner) {\n\t\treturn {\n\t\t\tShared: { initialSharedVersion: owner.Shared.initial_shared_version },\n\t\t};\n\t}\n\n\tif (typeof owner === 'object' && owner !== null && 'ConsensusAddressOwner' in owner) {\n\t\treturn {\n\t\t\tConsensusAddressOwner: {\n\t\t\t\tstartVersion: owner.ConsensusAddressOwner.start_version,\n\t\t\t\towner: owner.ConsensusAddressOwner.owner,\n\t\t\t},\n\t\t};\n\t}\n\n\tthrow new Error(`Unknown owner type: ${JSON.stringify(owner)}`);\n}\n\nfunction parseOwnerAddress(owner: ObjectOwner): string | null {\n\tif (owner === 'Immutable') {\n\t\treturn null;\n\t}\n\n\tif ('ConsensusAddressOwner' in owner) {\n\t\treturn owner.ConsensusAddressOwner.owner;\n\t}\n\n\tif ('AddressOwner' in owner) {\n\t\treturn owner.AddressOwner;\n\t}\n\n\tif ('ObjectOwner' in owner) {\n\t\treturn owner.ObjectOwner;\n\t}\n\n\tif ('Shared' in owner) {\n\t\treturn null;\n\t}\n\n\tthrow new Error(`Unknown owner type: ${JSON.stringify(owner)}`);\n}\n\nfunction parseTransaction<Include extends SuiClientTypes.TransactionInclude = {}>(\n\ttransaction: SuiTransactionBlockResponse,\n\tinclude?: Include,\n): SuiClientTypes.TransactionResult<Include> {\n\tconst objectTypes: Record<string, string> = {};\n\n\tif (include?.objectTypes) {\n\t\ttransaction.objectChanges?.forEach((change) => {\n\t\t\tif (change.type !== 'published') {\n\t\t\t\tobjectTypes[change.objectId] = normalizeStructTag(change.objectType);\n\t\t\t}\n\t\t});\n\t}\n\n\tlet transactionData: SuiClientTypes.TransactionData | undefined;\n\tlet signatures: string[] = [];\n\tlet bcsBytes: Uint8Array | undefined;\n\n\tif (transaction.rawTransaction) {\n\t\tconst parsedTx = bcs.SenderSignedData.parse(fromBase64(transaction.rawTransaction))[0];\n\t\tsignatures = parsedTx.txSignatures;\n\n\t\tif (include?.transaction || include?.bcs) {\n\t\t\tconst bytes = bcs.TransactionData.serialize(parsedTx.intentMessage.value).toBytes();\n\n\t\t\tif (include?.bcs) {\n\t\t\t\tbcsBytes = bytes;\n\t\t\t}\n\n\t\t\tif (include?.transaction) {\n\t\t\t\tconst data = TransactionDataBuilder.restore({\n\t\t\t\t\tversion: 2,\n\t\t\t\t\tsender: parsedTx.intentMessage.value.V1.sender,\n\t\t\t\t\texpiration: parsedTx.intentMessage.value.V1.expiration,\n\t\t\t\t\tgasData: parsedTx.intentMessage.value.V1.gasData,\n\t\t\t\t\tinputs: parsedTx.intentMessage.value.V1.kind.ProgrammableTransaction!.inputs,\n\t\t\t\t\tcommands: parsedTx.intentMessage.value.V1.kind.ProgrammableTransaction!.commands,\n\t\t\t\t});\n\t\t\t\ttransactionData = { ...data };\n\t\t\t}\n\t\t}\n\t}\n\n\t// Get status from JSON-RPC response\n\tconst status: SuiClientTypes.ExecutionStatus = transaction.effects?.status\n\t\t? parseJsonRpcExecutionStatus(transaction.effects.status, transaction.effects.abortError)\n\t\t: {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: {\n\t\t\t\t\t$kind: 'Unknown',\n\t\t\t\t\tmessage: 'Unknown',\n\t\t\t\t\tUnknown: null,\n\t\t\t\t},\n\t\t\t};\n\n\tconst effectsBytes = transaction.rawEffects ? new Uint8Array(transaction.rawEffects) : null;\n\n\tconst result: SuiClientTypes.Transaction<Include> = {\n\t\tdigest: transaction.digest,\n\t\tepoch: transaction.effects?.executedEpoch ?? null,\n\t\tstatus,\n\t\teffects: (include?.effects && effectsBytes\n\t\t\t? parseTransactionEffectsBcs(effectsBytes)\n\t\t\t: undefined) as SuiClientTypes.Transaction<Include>['effects'],\n\t\tobjectTypes: (include?.objectTypes\n\t\t\t? objectTypes\n\t\t\t: undefined) as SuiClientTypes.Transaction<Include>['objectTypes'],\n\t\ttransaction: transactionData as SuiClientTypes.Transaction<Include>['transaction'],\n\t\tbcs: bcsBytes as SuiClientTypes.Transaction<Include>['bcs'],\n\t\tsignatures,\n\t\tbalanceChanges: (include?.balanceChanges\n\t\t\t? (transaction.balanceChanges?.map((change) => ({\n\t\t\t\t\tcoinType: normalizeStructTag(change.coinType),\n\t\t\t\t\taddress: parseOwnerAddress(change.owner)!,\n\t\t\t\t\tamount: change.amount,\n\t\t\t\t})) ?? [])\n\t\t\t: undefined) as SuiClientTypes.Transaction<Include>['balanceChanges'],\n\t\tevents: (include?.events\n\t\t\t? (transaction.events?.map((event) => ({\n\t\t\t\t\tpackageId: event.packageId,\n\t\t\t\t\tmodule: event.transactionModule,\n\t\t\t\t\tsender: event.sender,\n\t\t\t\t\teventType: event.type,\n\t\t\t\t\tbcs: 'bcs' in event ? fromBase64(event.bcs) : new Uint8Array(),\n\t\t\t\t\tjson: (event.parsedJson as Record<string, unknown>) ?? null,\n\t\t\t\t})) ?? [])\n\t\t\t: undefined) as SuiClientTypes.Transaction<Include>['events'],\n\t};\n\n\treturn status.success\n\t\t? {\n\t\t\t\t$kind: 'Transaction',\n\t\t\t\tTransaction: result,\n\t\t\t}\n\t\t: {\n\t\t\t\t$kind: 'FailedTransaction',\n\t\t\t\tFailedTransaction: result,\n\t\t\t};\n}\n\nfunction parseTransactionEffectsJson({\n\tbytes,\n\teffects,\n\tobjectChanges,\n}: {\n\tbytes?: Uint8Array;\n\teffects: TransactionEffects;\n\tobjectChanges: SuiObjectChange[] | null;\n}): {\n\teffects: SuiClientTypes.TransactionEffects;\n\tobjectTypes: Record<string, string>;\n} {\n\tconst changedObjects: SuiClientTypes.ChangedObject[] = [];\n\tconst unchangedConsensusObjects: SuiClientTypes.UnchangedConsensusObject[] = [];\n\tconst objectTypes: Record<string, string> = {};\n\n\tobjectChanges?.forEach((change) => {\n\t\tswitch (change.type) {\n\t\t\tcase 'published':\n\t\t\t\tchangedObjects.push({\n\t\t\t\t\tobjectId: change.packageId,\n\t\t\t\t\tinputState: 'DoesNotExist',\n\t\t\t\t\tinputVersion: null,\n\t\t\t\t\tinputDigest: null,\n\t\t\t\t\tinputOwner: null,\n\t\t\t\t\toutputState: 'PackageWrite',\n\t\t\t\t\toutputVersion: change.version,\n\t\t\t\t\toutputDigest: change.digest,\n\t\t\t\t\toutputOwner: null,\n\t\t\t\t\tidOperation: 'Created',\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase 'transferred':\n\t\t\t\tchangedObjects.push({\n\t\t\t\t\tobjectId: change.objectId,\n\t\t\t\t\tinputState: 'Exists',\n\t\t\t\t\tinputVersion: change.version,\n\t\t\t\t\tinputDigest: change.digest,\n\t\t\t\t\tinputOwner: {\n\t\t\t\t\t\t$kind: 'AddressOwner' as const,\n\t\t\t\t\t\tAddressOwner: change.sender,\n\t\t\t\t\t},\n\t\t\t\t\toutputState: 'ObjectWrite',\n\t\t\t\t\toutputVersion: change.version,\n\t\t\t\t\toutputDigest: change.digest,\n\t\t\t\t\toutputOwner: parseOwner(change.recipient),\n\t\t\t\t\tidOperation: 'None',\n\t\t\t\t});\n\t\t\t\tobjectTypes[change.objectId] = normalizeStructTag(change.objectType);\n\t\t\t\tbreak;\n\t\t\tcase 'mutated':\n\t\t\t\tchangedObjects.push({\n\t\t\t\t\tobjectId: change.objectId,\n\t\t\t\t\tinputState: 'Exists',\n\t\t\t\t\tinputVersion: change.previousVersion,\n\t\t\t\t\tinputDigest: null,\n\t\t\t\t\tinputOwner: parseOwner(change.owner),\n\t\t\t\t\toutputState: 'ObjectWrite',\n\t\t\t\t\toutputVersion: change.version,\n\t\t\t\t\toutputDigest: change.digest,\n\t\t\t\t\toutputOwner: parseOwner(change.owner),\n\t\t\t\t\tidOperation: 'None',\n\t\t\t\t});\n\t\t\t\tobjectTypes[change.objectId] = normalizeStructTag(change.objectType);\n\t\t\t\tbreak;\n\t\t\tcase 'deleted':\n\t\t\t\tchangedObjects.push({\n\t\t\t\t\tobjectId: change.objectId,\n\t\t\t\t\tinputState: 'Exists',\n\t\t\t\t\tinputVersion: change.version,\n\t\t\t\t\tinputDigest: effects.deleted?.find((d) => d.objectId === change.objectId)?.digest ?? null,\n\t\t\t\t\tinputOwner: null,\n\t\t\t\t\toutputState: 'DoesNotExist',\n\t\t\t\t\toutputVersion: null,\n\t\t\t\t\toutputDigest: null,\n\t\t\t\t\toutputOwner: null,\n\t\t\t\t\tidOperation: 'Deleted',\n\t\t\t\t});\n\t\t\t\tobjectTypes[change.objectId] = normalizeStructTag(change.objectType);\n\t\t\t\tbreak;\n\t\t\tcase 'wrapped':\n\t\t\t\tchangedObjects.push({\n\t\t\t\t\tobjectId: change.objectId,\n\t\t\t\t\tinputState: 'Exists',\n\t\t\t\t\tinputVersion: change.version,\n\t\t\t\t\tinputDigest: null,\n\t\t\t\t\tinputOwner: {\n\t\t\t\t\t\t$kind: 'AddressOwner' as const,\n\t\t\t\t\t\tAddressOwner: change.sender,\n\t\t\t\t\t},\n\t\t\t\t\toutputState: 'ObjectWrite',\n\t\t\t\t\toutputVersion: change.version,\n\t\t\t\t\toutputDigest:\n\t\t\t\t\t\teffects.wrapped?.find((w) => w.objectId === change.objectId)?.digest ?? null,\n\t\t\t\t\toutputOwner: {\n\t\t\t\t\t\t$kind: 'ObjectOwner' as const,\n\t\t\t\t\t\tObjectOwner: change.sender,\n\t\t\t\t\t},\n\t\t\t\t\tidOperation: 'None',\n\t\t\t\t});\n\t\t\t\tobjectTypes[change.objectId] = normalizeStructTag(change.objectType);\n\t\t\t\tbreak;\n\t\t\tcase 'created':\n\t\t\t\tchangedObjects.push({\n\t\t\t\t\tobjectId: change.objectId,\n\t\t\t\t\tinputState: 'DoesNotExist',\n\t\t\t\t\tinputVersion: null,\n\t\t\t\t\tinputDigest: null,\n\t\t\t\t\tinputOwner: null,\n\t\t\t\t\toutputState: 'ObjectWrite',\n\t\t\t\t\toutputVersion: change.version,\n\t\t\t\t\toutputDigest: change.digest,\n\t\t\t\t\toutputOwner: parseOwner(change.owner),\n\t\t\t\t\tidOperation: 'Created',\n\t\t\t\t});\n\t\t\t\tobjectTypes[change.objectId] = normalizeStructTag(change.objectType);\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\treturn {\n\t\tobjectTypes,\n\t\teffects: {\n\t\t\tbcs: bytes ?? null,\n\t\t\tversion: 2,\n\t\t\tstatus: parseJsonRpcExecutionStatus(effects.status, effects.abortError),\n\t\t\tgasUsed: effects.gasUsed,\n\t\t\ttransactionDigest: effects.transactionDigest,\n\t\t\tgasObject: {\n\t\t\t\tobjectId: effects.gasObject?.reference.objectId,\n\t\t\t\tinputState: 'Exists',\n\t\t\t\tinputVersion: null,\n\t\t\t\tinputDigest: null,\n\t\t\t\tinputOwner: null,\n\t\t\t\toutputState: 'ObjectWrite',\n\t\t\t\toutputVersion: effects.gasObject.reference.version,\n\t\t\t\toutputDigest: effects.gasObject.reference.digest,\n\t\t\t\toutputOwner: parseOwner(effects.gasObject.owner),\n\t\t\t\tidOperation: 'None',\n\t\t\t},\n\t\t\teventsDigest: effects.eventsDigest ?? null,\n\t\t\tdependencies: effects.dependencies ?? [],\n\t\t\tlamportVersion: effects.gasObject.reference.version,\n\t\t\tchangedObjects,\n\t\t\tunchangedConsensusObjects,\n\t\t\tauxiliaryDataDigest: null,\n\t\t},\n\t};\n}\n\nfunction parseNormalizedSuiMoveType(type: SuiMoveNormalizedType): SuiClientTypes.OpenSignature {\n\tif (typeof type !== 'string') {\n\t\tif ('Reference' in type) {\n\t\t\treturn {\n\t\t\t\treference: 'immutable',\n\t\t\t\tbody: parseNormalizedSuiMoveTypeBody(type.Reference),\n\t\t\t};\n\t\t}\n\n\t\tif ('MutableReference' in type) {\n\t\t\treturn {\n\t\t\t\treference: 'mutable',\n\t\t\t\tbody: parseNormalizedSuiMoveTypeBody(type.MutableReference),\n\t\t\t};\n\t\t}\n\t}\n\n\treturn {\n\t\treference: null,\n\t\tbody: parseNormalizedSuiMoveTypeBody(type),\n\t};\n}\n\nfunction parseNormalizedSuiMoveTypeBody(\n\ttype: SuiMoveNormalizedType,\n): SuiClientTypes.OpenSignatureBody {\n\tswitch (type) {\n\t\tcase 'Address':\n\t\t\treturn { $kind: 'address' };\n\t\tcase 'Bool':\n\t\t\treturn { $kind: 'bool' };\n\t\tcase 'U8':\n\t\t\treturn { $kind: 'u8' };\n\t\tcase 'U16':\n\t\t\treturn { $kind: 'u16' };\n\t\tcase 'U32':\n\t\t\treturn { $kind: 'u32' };\n\t\tcase 'U64':\n\t\t\treturn { $kind: 'u64' };\n\t\tcase 'U128':\n\t\t\treturn { $kind: 'u128' };\n\t\tcase 'U256':\n\t\t\treturn { $kind: 'u256' };\n\t}\n\n\tif (typeof type === 'string') {\n\t\tthrow new Error(`Unknown type: ${type}`);\n\t}\n\n\tif ('Vector' in type) {\n\t\treturn {\n\t\t\t$kind: 'vector',\n\t\t\tvector: parseNormalizedSuiMoveTypeBody(type.Vector),\n\t\t};\n\t}\n\n\tif ('Struct' in type) {\n\t\treturn {\n\t\t\t$kind: 'datatype',\n\t\t\tdatatype: {\n\t\t\t\ttypeName: `${normalizeSuiAddress(type.Struct.address)}::${type.Struct.module}::${type.Struct.name}`,\n\t\t\t\ttypeParameters: type.Struct.typeArguments.map((t) => parseNormalizedSuiMoveTypeBody(t)),\n\t\t\t},\n\t\t};\n\t}\n\n\tif ('TypeParameter' in type) {\n\t\treturn {\n\t\t\t$kind: 'typeParameter',\n\t\t\tindex: type.TypeParameter,\n\t\t};\n\t}\n\n\tthrow new Error(`Unknown type: ${JSON.stringify(type)}`);\n}\n\nfunction parseAbilities(abilitySet: SuiMoveAbilitySet): SuiClientTypes.Ability[] {\n\treturn abilitySet.abilities.map((ability) => {\n\t\tswitch (ability) {\n\t\t\tcase 'Copy':\n\t\t\t\treturn 'copy';\n\t\t\tcase 'Drop':\n\t\t\t\treturn 'drop';\n\t\t\tcase 'Store':\n\t\t\t\treturn 'store';\n\t\t\tcase 'Key':\n\t\t\t\treturn 'key';\n\t\t\tdefault:\n\t\t\t\treturn 'unknown';\n\t\t}\n\t});\n}\n\nfunction parseVisibility(visibility: SuiMoveVisibility): SuiClientTypes.Visibility {\n\tswitch (visibility) {\n\t\tcase 'Public':\n\t\t\treturn 'public';\n\t\tcase 'Private':\n\t\t\treturn 'private';\n\t\tcase 'Friend':\n\t\t\treturn 'friend';\n\t\tdefault:\n\t\t\treturn 'unknown';\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;AAoCA,MAAM,UAAU;AAEhB,SAAS,4BACR,QACA,YACiC;AACjC,KAAI,OAAO,WAAW,UACrB,QAAO;EAAE,SAAS;EAAM,OAAO;EAAM;CAGtC,MAAM,aAAa,OAAO,SAAS;AAEnC,KAAI,YAAY;EACf,MAAM,eAAe,WAAW,MAAM,mBAAmB;EACzD,MAAM,UAAU,eAAe,SAAS,aAAa,IAAI,GAAG,GAAG;EAE/D,MAAM,mBAAmB,WAAW,MAAM,uBAAuB;EACjE,MAAM,cAAc,mBAAmB,SAAS,iBAAiB,IAAI,GAAG,GAAG;EAE3E,MAAM,cAAc,WAAW,WAAW,MAAM,KAAK,IAAI,EAAE;EAC3D,MAAM,MAAM,YAAY,KAAK,oBAAoB,YAAY,GAAG,GAAG;EACnE,MAAM,SAAS,YAAY;AAE3B,SAAO;GACN,SAAS;GACT,OAAO;IACN,OAAO;IACP,SAAS,uBAAuB;KAC/B;KACA,UACC,OAAO,SACJ;MACA,SAAS;MACT;MACA,cAAc,WAAW,YAAY;MACrC;MACA,GACA;KACJ,WAAW,OAAO,WAAW,cAAc,EAAE;KAC7C,aAAa,WAAW,QAAQ,OAAO,EAAE,YAAY,WAAW,MAAM,GAAG;KACzE,CAAC;IACF;IACA,WAAW;KACV,WAAW,OAAO,WAAW,cAAc,EAAE;KAC7C,UAAU,WAAW,YAClB;MACA,SAAS,oBAAoB,WAAW,UAAU,MAAM,KAAK,CAAC,MAAM,GAAG;MACvE,QAAQ,WAAW,UAAU,MAAM,KAAK,CAAC,MAAM;MAC/C,cAAc,WAAW,YAAY;MACrC;MACA,GACA;KACH;IACD;GACD;;AAGF,QAAO;EACN,SAAS;EACT,OAAO;GACN,OAAO;GACP,SAAS;GACT,SAAS;GACT;EACD;;AAGF,IAAa,oBAAb,cAAuC,WAAW;CACjD;CAEA,YAAY,EACX,eACA,OAIE;AACF,QAAM;GAAE,SAAS,cAAc;GAAS,MAAM;GAAe;GAAK,CAAC;AACnE,QAAKA,gBAAiB;;CAGvB,MAAM,WACL,SACC;EACD,MAAM,UAAU,MAAM,QAAQ,WAAW,GAAG;EAC5C,MAAM,UAAiE,EAAE;AACzE,OAAK,MAAM,SAAS,SAAS;GAC5B,MAAM,UAAU,MAAM,MAAKA,cAAe,gBAAgB;IACzD,KAAK;IACL,SAAS;KACR,WAAW;KACX,UAAU;KACV,SAAS,QAAQ,SAAS,WAAW,QAAQ,SAAS,YAAY,OAAO;KACzE,yBACC,QAAQ,SAAS,uBAAuB,QAAQ,SAAS,YAAY,OAAO;KAC7E,mBAAmB,QAAQ,SAAS,aAAa;KACjD,aAAa,QAAQ,SAAS,QAAQ;KACtC,aAAa,QAAQ,SAAS,WAAW;KACzC;IACD,QAAQ,QAAQ;IAChB,CAAC;AAEF,QAAK,MAAM,CAAC,KAAK,WAAW,QAAQ,SAAS,CAC5C,KAAI,OAAO,MACV,SAAQ,KAAK,YAAY,aAAa,OAAO,OAAO,MAAM,KAAK,CAAC;OAEhE,SAAQ,KAAK,YAAY,OAAO,MAAO,QAAQ,QAAQ,CAAC;;AAK3D,SAAO,EACN,SAAS,SACT;;CAEF,MAAM,iBACL,SACC;EACD,IAAI,SAAqC;AACzC,MAAI,QAAQ,MAAM;GACjB,MAAM,QAAQ,QAAQ,KAAK,MAAM,KAAK;AACtC,OAAI,MAAM,WAAW,EACpB,UAAS,EAAE,SAAS,QAAQ,MAAM;YACxB,MAAM,WAAW,EAC3B,UAAS,EAAE,YAAY;IAAE,SAAS,MAAM;IAAI,QAAQ,MAAM;IAAI,EAAE;OAEhE,UAAS,EAAE,YAAY,QAAQ,MAAM;;EAIvC,MAAM,UAAU,MAAM,MAAKA,cAAe,gBAAgB;GACzD,OAAO,QAAQ;GACf,OAAO,QAAQ;GACf,QAAQ,QAAQ;GAChB,SAAS;IACR,WAAW;IACX,UAAU;IACV,SAAS,QAAQ,SAAS,WAAW,QAAQ,SAAS,YAAY,OAAO;IACzE,yBACC,QAAQ,SAAS,uBAAuB,QAAQ,SAAS,YAAY,OAAO;IAC7E,mBAAmB,QAAQ,SAAS,aAAa;IACjD,aAAa,QAAQ,SAAS,QAAQ;IACtC,aAAa,QAAQ,SAAS,WAAW;IACzC;GACD;GACA,QAAQ,QAAQ;GAChB,CAAC;AAEF,SAAO;GACN,SAAS,QAAQ,KAAK,KAAK,WAAW;AACrC,QAAI,OAAO,MACV,OAAM,YAAY,aAAa,OAAO,MAAM;AAG7C,WAAO,YAAY,OAAO,MAAO,QAAQ,QAAQ;KAChD;GACF,aAAa,QAAQ;GACrB,QAAQ,QAAQ,cAAc;GAC9B;;CAGF,MAAM,UAAU,SAA0C;EACzD,MAAM,QAAQ,MAAM,MAAKA,cAAe,SAAS;GAChD,OAAO,QAAQ;GACf,UAAU,QAAQ;GAClB,OAAO,QAAQ;GACf,QAAQ,QAAQ;GAChB,QAAQ,QAAQ;GAChB,CAAC;AAEF,SAAO;GACN,SAAS,MAAM,KAAK,KAClB,UAA+B;IAC/B,UAAU,KAAK;IACf,SAAS,KAAK;IACd,QAAQ,KAAK;IACb,SAAS,KAAK;IACd,MAAM,mBAAmB,mBAAmB,KAAK,SAAS,GAAG;IAC7D,OAAO;KACN,OAAO;KACP,cAAc,QAAQ;KACtB;IACD,EACD;GACD,aAAa,MAAM;GACnB,QAAQ,MAAM,cAAc;GAC5B;;CAGF,MAAM,WAAW,SAA2C;EAC3D,MAAM,UAAU,MAAM,MAAKA,cAAe,WAAW;GACpD,OAAO,QAAQ;GACf,UAAU,QAAQ;GAClB,QAAQ,QAAQ;GAChB,CAAC;EAEF,MAAM,iBAAiB,QAAQ,yBAAyB;EACxD,MAAM,cAAc,OAAO,OAAO,QAAQ,aAAa,GAAG,OAAO,eAAe,CAAC;AAEjF,SAAO,EACN,SAAS;GACR,UAAU,mBAAmB,QAAQ,SAAS;GAC9C,SAAS,QAAQ;GACjB;GACA;GACA,EACD;;CAEF,MAAM,gBACL,SACkD;EAClD,MAAM,YAAY,MAAM,KAAK,IAAI,YAAY,EAAE,MAAM,QAAQ,UAAU,CAAC,EAAE;EAE1E,MAAM,SAAS,MAAM,MAAKA,cAAe,gBAAgB;GACxD;GACA,QAAQ,QAAQ;GAChB,CAAC;AAEF,MAAI,CAAC,OACJ,QAAO,EAAE,cAAc,MAAM;AAG9B,SAAO,EACN,cAAc;GACb,IAAI,OAAO,MAAM;GACjB,UAAU,OAAO;GACjB,MAAM,OAAO;GACb,QAAQ,OAAO;GACf,aAAa,OAAO;GACpB,SAAS,OAAO,WAAW;GAC3B,EACD;;CAGF,MAAM,aAAa,SAA6C;AAM/D,SAAO;GACN,WANgB,MAAM,MAAKA,cAAe,eAAe;IACzD,OAAO,QAAQ;IACf,QAAQ,QAAQ;IAChB,CAAC,EAGkB,KAAK,YAAY;IACnC,MAAM,iBAAiB,QAAQ,yBAAyB;IACxD,MAAM,cAAc,OAAO,OAAO,QAAQ,aAAa,GAAG,OAAO,eAAe,CAAC;AACjF,WAAO;KACN,UAAU,mBAAmB,QAAQ,SAAS;KAC9C,SAAS,QAAQ;KACjB;KACA;KACA;KACA;GACF,aAAa;GACb,QAAQ;GACR;;CAEF,MAAM,eACL,SACqD;AAgBrD,SAAO,iBAfa,MAAM,MAAKA,cAAe,oBAAoB;GACjE,QAAQ,QAAQ;GAChB,SAAS;IAER,cAAc;IAEd,aAAa;IACb,mBAAmB,QAAQ,SAAS,eAAe;IACnD,gBAAgB,QAAQ,SAAS,WAAW;IAC5C,YAAY,QAAQ,SAAS,UAAU;IACvC,oBAAoB,QAAQ,SAAS,kBAAkB;IACvD;GACD,QAAQ,QAAQ;GAChB,CAAC,EAEmC,QAAQ,QAAQ;;CAEtD,MAAM,mBACL,SACqD;AAiBrD,SAAO,iBAhBa,MAAM,MAAKA,cAAe,wBAAwB;GACrE,kBAAkB,QAAQ;GAC1B,WAAW,QAAQ;GACnB,SAAS;IAER,cAAc;IAEd,aAAa;IACb,gBAAgB,QAAQ,SAAS,WAAW;IAC5C,YAAY,QAAQ,SAAS,UAAU;IACvC,mBAAmB,QAAQ,SAAS,eAAe;IACnD,oBAAoB,QAAQ,SAAS,kBAAkB;IACvD;GACD,QAAQ,QAAQ;GAChB,CAAC,EAEmC,QAAQ,QAAQ;;CAEtD,MAAM,oBACL,SAC6D;AAC7D,MAAI,EAAE,QAAQ,uBAAuB,YACpC,OAAM,QAAQ,YAAY,wBAAwB,EAAE,QAAQ,MAAM,CAAC;EAGpE,MAAM,KAAK,YAAY,KAAK,QAAQ,YAAY;EAEhD,MAAM,OACL,QAAQ,uBAAuB,aAC5B,OACA,uBAAuB,QAAQ,QAAQ,YAAY,SAAS,CAAC;EAEjE,MAAM,mBAAmB,OACtB,KAAK,MAAM,EACX,WAAW,EACV,SAAS;GACR,QAAQ,KAAK,QAAQ,UAAU,OAAO,QAAQ;GAC9C,OAAO,KAAK,QAAQ,SAAS,OAAO,MAAM,MAAKA,cAAe,sBAAsB,CAAC;GACrF,SAAS,KAAK,QAAQ,WAAW,EAAE;GACnC,EACD,EACD,CAAC,GACA,QAAQ;EAEZ,MAAM,SAAS,MAAM,MAAKA,cAAe,uBAAuB;GAC/D,kBAAkB;GAClB,QAAQ,QAAQ;GAChB,CAAC;EAEF,MAAM,EAAE,SAAS,gBAAgB,4BAA4B;GAC5D,SAAS,OAAO;GAChB,eAAe,OAAO;GACtB,CAAC;EAEF,MAAM,kBAAuD;GAC5D,QAAQ,uBAAuB,mBAAmB,iBAAiB;GACnE,OAAO;GACP,QAAQ,QAAQ;GAChB,SAAU,QAAQ,SAAS,UACxB,UACA;GACH,aAAc,QAAQ,SAAS,cAC5B,cACA;GACH,YAAY,EAAE;GACd,aAAc,QAAQ,SAAS,cAC5B,oBACA,QAAQ,uBAAuB,aAC5B,QAAQ,cACR,MAAM,QAAQ,YACb,MAAM,EACN,QAAQ,MACR,CAAC,CACD,YAAY,KAAc,CAC9B,GACA;GACH,KAAM,QAAQ,SAAS,MACpB,mBACA;GACH,gBAAiB,QAAQ,SAAS,iBAC/B,OAAO,eAAe,KAAK,YAAY;IACvC,UAAU,mBAAmB,OAAO,SAAS;IAC7C,SAAS,kBAAkB,OAAO,MAAM;IACxC,QAAQ,OAAO;IACf,EAAE,GACF;GACH,QAAS,QAAQ,SAAS,SACtB,OAAO,QAAQ,KAAK,WAAW;IAChC,WAAW,MAAM;IACjB,QAAQ,MAAM;IACd,QAAQ,MAAM;IACd,WAAW,MAAM;IACjB,KAAK,SAAS,QAAQ,WAAW,MAAM,IAAI,GAAG,IAAI,YAAY;IAC9D,MAAO,MAAM,cAA0C;IACvD,EAAE,IAAI,EAAE,GACR;GACH;EAED,IAAI;AACJ,MAAI,QAAQ,SAAS,eACpB,KAAI;GACH,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,oBAAoB,MAAM;GAChE,MAAM,mBAAmB,MAAM,MAAKA,cAAe,2BAA2B;IAC7E;IACA,kBAAkB;IAClB,QAAQ,QAAQ;IAChB,CAAC;AAEF,OAAI,iBAAiB,QACpB,kBAAiB,iBAAiB,QAAQ,KAAK,cAAY;IAC1D,eAAeC,SAAO,gBAAgB,EAAE,EAAE,KAAK,CAAC,YAAY,EAC3D,KAAK,IAAI,WAAW,MAAM,EAC1B,EAAE;IACH,oBAAoBA,SAAO,2BAA2B,EAAE,EAAE,KAAK,GAAG,YAAY,EAC7E,KAAK,IAAI,WAAW,MAAM,EAC1B,EAAE;IACH,EAAE;UAEG;AAGT,SAAO,QAAQ,OAAO,UACnB;GACA,OAAO;GACP,aAAa;GAEZ;GACD,GACA;GACA,OAAO;GACP,mBAAmB;GAElB;GACD;;CAEJ,MAAM,qBAAqB,SAAsD;EAChF,MAAM,oBAAoB,MAAM,MAAKD,cAAe,qBAAqB,EACxE,QAAQ,SAAS,QACjB,CAAC;AAEF,SAAO,EACN,mBAAmB,OAAO,kBAAkB,EAC5C;;CAGF,MAAM,kBACL,SACoD;EACpD,MAAM,SAAS,MAAM,MAAKA,cAAe,kBAAkB,EAAE,QAAQ,SAAS,QAAQ,CAAC;EAEvF,MAAM,aAA4C,EAAE;AACpD,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,WAAW,CAC3D,KAAI,UAAU,KACb,YAAW,OAAO;WACR,SAAS,MACnB,YAAW,OAAO,MAAM;WACd,SAAS,MACnB,YAAW,OAAO,MAAM;WACd,SAAS,MACnB,YAAW,OAAO,MAAM;WACd,SAAS,MACnB,YAAW,OAAO,MAAM;WACd,UAAU,MACpB,YAAW,OAAO,MAAM;OAClB;GACN,MAAM,UAAU,OAAO,QAAQ,MAAM;AACrC,cAAW,OAAO,QAAQ,WAAW,IAAI,OAAO,QAAQ,GAAG,GAAG,GAAG,KAAK,UAAU,MAAM;;AAIxF,SAAO,EACN,gBAAgB;GACf,iBAAiB,OAAO;GACxB,cAAc,EAAE,GAAG,OAAO,cAAc;GACxC;GACA,EACD;;CAGF,MAAM,sBACL,SACwD;EACxD,MAAM,cAAc,MAAM,MAAKA,cAAe,wBAAwB,EACrE,QAAQ,SAAS,QACjB,CAAC;AAEF,SAAO,EACN,aAAa;GACZ,oBAAoB,YAAY;GAChC,OAAO,YAAY;GACnB,iBAAiB,YAAY;GAC7B,mBAAmB,YAAY,mBAAmB,UAAU,IAAK;GACjE,uBAAuB,YAAY;GACnC,UAAU,YAAY;GACtB,wBAAwB,YAAY;GACpC,4BAA4B,YAAY;GACxC,wBAAwB,YAAY;GACpC,iCAAiC,YAAY;GAC7C,YAAY;IACX,iBAAiB,YAAY;IAC7B,wBAAwB,YAAY;IACpC,mBAAmB,YAAY;IAC/B,0BAA0B,YAAY;IACtC,4BAA4B,YAAY;IACxC,8BAA8B,YAAY;IAC1C;GACD,aAAa;IACZ,2BAA2B,YAAY;IACvC,sBAAsB,YAAY;IAClC;GACD,cAAc;IACb,SAAS,YAAY;IACrB,qBAAqB,YAAY;IACjC,2BAA2B,YAAY;IACvC,0BAA0B,YAAY;IACtC,0BAA0B,YAAY;IACtC;GACD,EACD;;CAGF,MAAM,kBAAkB,SAAkD;EACzE,MAAM,gBAAgB,MAAM,MAAKA,cAAe,iBAAiB;GAChE,UAAU,QAAQ;GAClB,OAAO,QAAQ;GACf,QAAQ,QAAQ;GAChB,CAAC;AAEF,SAAO;GACN,eAAe,cAAc,KAAK,KAAK,iBAAmD;IACzF,MAAM,kBAAkB,aAAa,SAAS;IAC9C,MAAM,WAAW,kBACd,gEAAgE,aAAa,KAAK,KAAK,uBACvF,6BAA6B,aAAa,KAAK,KAAK,IAAI,aAAa,WAAW;IAEnF,MAAM,WAAW,WAAW,aAAa,QAAQ;IACjD,MAAM,kBAAkB,kBACrB,sCAAsC,aAAa,KAAK,KAAK,KAC7D,aAAa,KAAK;AACrB,WAAO;KACN,OAAO,kBAAkB,kBAAkB;KAC3C,SAAS,qBAAqB,QAAQ,UAAU,iBAAiB,SAAS;KAC1E,MAAM,mBAAmB,SAAS;KAClC,MAAM;MACL,MAAM,aAAa,KAAK;MACxB,KAAK;MACL;KACD,WAAW,aAAa;KACxB,SAAS,kBAAkB,aAAa,WAAW;KACnD;KACA;GACF,aAAa,cAAc;GAC3B,QAAQ,cAAc;GACtB;;CAGF,MAAM,uBAAuB,SAAuD;EACnF,MAAM,SAAS,MAAM,MAAKA,cAAe,uBAAuB;GAC/D,OAAO,QAAQ;GACf,WAAW,QAAQ;GACnB,aAAa,QAAQ;GACrB,QAAQ,QAAQ;GAChB,CAAC;AAEF,SAAO;GACN,SAAS,OAAO;GAChB,QAAQ,OAAO;GACf;;CAGF,MAAM,uBACL,SACyD;AAEzD,SAAO,EACN,MAAM,EACL,OAHY,MAAM,MAAKA,cAAe,wBAAwB,QAAQ,EAAE,KAAK,IAI7E,EACD;;CAGF,2BAA2B;AAC1B,SAAO;;CAGR,MAAM,gBACL,SACkD;EAClD,MAAM,qBAAqB,MAAM,KAAK,IAAI,eAAe,EAAE,SAAS,QAAQ,WAAW,CAAC,EACtF;EACF,MAAM,SAAS,MAAM,MAAKA,cAAe,0BAA0B;GAClE,SAAS;GACT,QAAQ,QAAQ;GAChB,UAAU,QAAQ;GAClB,CAAC;AAEF,SAAO,EACN,UAAU;GACT,WAAW,oBAAoB,kBAAkB;GACjD,YAAY,QAAQ;GACpB,MAAM,QAAQ;GACd,YAAY,gBAAgB,OAAO,WAAW;GAC9C,SAAS,OAAO;GAChB,gBAAgB,OAAO,eAAe,KAAK,eAAe;IACzD,WAAW;IACX,aAAa,eAAe,UAAU;IACtC,EAAE;GACH,YAAY,OAAO,WAAW,KAAK,UAAU,2BAA2B,MAAM,CAAC;GAC/E,SAAS,OAAO,OAAO,KAAK,QAAQ,2BAA2B,IAAI,CAAC;GACpE,EACD;;CAGF,MAAM,mBACL,UACqD;AACrD,SAAO,KAAK,MAAM,KAAK,CAAC,kBAAkB,EAAE,YAAY;AAEvD,UAAO,EACN,kBAFkB,MAAM,MAAKA,cAAe,cAAc,EAAE,IAAI,KAAK,CAAC,EAE1C,QAC5B;IACA;;;AAIJ,SAAS,qBAAqB,QAA+C;AAC5E,KAAI,OAAO,KAAK,aAAa,aAC5B;AAGD,KAAI;EAEH,MAAM,UAAU,mBAAmB,OAAO,IAAI,KAAK;EACnD,IAAI;EAGJ,MAAM,yBAAyB,oBAAoB,sBAAsB;EACzE,MAAM,cAAc,mBACnB,GAAG,sBAAsB,eAAe,sBAAsB,aAC9D;EACD,MAAM,gBAAgB,mBAAmB,GAAG,mBAAmB,2BAA2B;EAC1F,MAAM,aAAa,GAAG,uBAAuB;AAE7C,MAAI,YAAY,YACf,kBAAiB,EAAE,SAAS,MAAM;WACxB,YAAY,cACtB,kBAAiB,EAAE,WAAW,MAAM;WAC1B,QAAQ,WAAW,WAAW,EAAE;GAC1C,MAAM,iBAAiB,QAAQ,sBAC9B,IAAI,OACH,GAAG,uBAAuB,QAAQ,uBAAuB,OAAO,CAAC,qBACjE,CACD;AACD,OAAI,eAEH,kBAAiB,EAAE,MADE,kBAAkB,aAAa,eAAe,IAAI,KAAK,EACrC;OAEvC,OAAM,IAAI,MAAM,4BAA4B;SAEvC;GACN,MAAM,UAAU,kBAAkB,aAAa,SAAS,KAAK;AAC7D,OAAI,OAAO,YAAY,YAAY,EAAE,YAAY,SAChD,OAAM,IAAI,MAAM,2BAA2B;AAE5C,oBAAiB,EAAE,OAAO,QAAQ,QAAQ;;EAG3C,MAAM,WAAW,WAAW,OAAO,IAAI,SAAS;EAChD,MAAM,QAAQ,kBAAkB,OAAO,MAAO;AAE9C,SAAOE,OAAI,OAAO,UAAU;GAC3B,MAAM,EACL,MAAM;IACL,MAAM;IACN,mBAAmB,OAAO,IAAI;IAC9B,SAAS,OAAO,IAAI;IACpB;IACA,EACD;GACD;GACA,qBAAqB,OAAO;GAC5B,eAAe,OAAO;GACtB,CAAC,CAAC,SAAS;SACL;AAEP;;;AAIF,SAAS,YACR,QACA,SACiC;CACjC,MAAM,aACL,OAAO,KAAK,aAAa,eAAe,WAAW,OAAO,IAAI,SAAS,GAAG;CAE3E,MAAM,YAAY,SAAS,YAAY,qBAAqB,OAAO,GAAG;CAGtE,MAAM,OACL,OAAO,QAAQ,OAAO,KAAK,SAAS,KAAK,GACtC,mBAAmB,OAAO,KAAK,GAC9B,OAAO,QAAQ;CAEpB,MAAM,cACL,SAAS,QAAQ,OAAO,SAAS,aAAa,eAC1C,OAAO,QAAQ,SAChB,SAAS,OACR,OACA;CAEL,MAAM,cAAc,SAAS,UAC1B,OAAO,SAAS,QAAQ,OACvB;EAAE,QAAQ,OAAO,QAAQ;EAAgC,QAAQ;EAAM,GACvE,OACD;AAEH,QAAO;EACN,UAAU,OAAO;EACjB,SAAS,OAAO;EAChB,QAAQ,OAAO;EACf;EACA,SAAU,SAAS,UAChB,aACA;EACH,OAAO,WAAW,OAAO,MAAO;EAChC,qBAAsB,SAAS,sBAC3B,OAAO,uBAAuB,SAC/B;EACQ;EACX,MAAM;EACN,SAAS;EACT;;AAGF,SAAS,WAAW,OAAgD;AACnE,KAAI,UAAU,YACb,QAAO;EACN,OAAO;EACP,WAAW;EACX;AAGF,KAAI,2BAA2B,MAC9B,QAAO;EACN,OAAO;EACP,uBAAuB;GACtB,OAAO,MAAM,sBAAsB;GACnC,cAAc,MAAM,sBAAsB;GAC1C;EACD;AAGF,KAAI,kBAAkB,MACrB,QAAO;EACN,OAAO;EACP,cAAc,MAAM;EACpB;AAGF,KAAI,iBAAiB,MACpB,QAAO;EACN,OAAO;EACP,aAAa,MAAM;EACnB;AAGF,KAAI,YAAY,MACf,QAAO;EACN,OAAO;EACP,QAAQ,EACP,sBAAsB,MAAM,OAAO,wBACnC;EACD;AAGF,OAAM,IAAI,MAAM,uBAAuB,KAAK,UAAU,MAAM,GAAG;;AAGhE,SAAS,kBAAkB,OAAoB;AAC9C,KAAI,UAAU,YACb,QAAO,EAAE,WAAW,MAAM;AAG3B,KAAI,kBAAkB,MACrB,QAAO,EAAE,cAAc,MAAM,cAAc;AAG5C,KAAI,iBAAiB,MACpB,QAAO,EAAE,aAAa,MAAM,aAAa;AAG1C,KAAI,YAAY,MACf,QAAO,EACN,QAAQ,EAAE,sBAAsB,MAAM,OAAO,wBAAwB,EACrE;AAGF,KAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,2BAA2B,MAC7E,QAAO,EACN,uBAAuB;EACtB,cAAc,MAAM,sBAAsB;EAC1C,OAAO,MAAM,sBAAsB;EACnC,EACD;AAGF,OAAM,IAAI,MAAM,uBAAuB,KAAK,UAAU,MAAM,GAAG;;AAGhE,SAAS,kBAAkB,OAAmC;AAC7D,KAAI,UAAU,YACb,QAAO;AAGR,KAAI,2BAA2B,MAC9B,QAAO,MAAM,sBAAsB;AAGpC,KAAI,kBAAkB,MACrB,QAAO,MAAM;AAGd,KAAI,iBAAiB,MACpB,QAAO,MAAM;AAGd,KAAI,YAAY,MACf,QAAO;AAGR,OAAM,IAAI,MAAM,uBAAuB,KAAK,UAAU,MAAM,GAAG;;AAGhE,SAAS,iBACR,aACA,SAC4C;CAC5C,MAAM,cAAsC,EAAE;AAE9C,KAAI,SAAS,YACZ,aAAY,eAAe,SAAS,WAAW;AAC9C,MAAI,OAAO,SAAS,YACnB,aAAY,OAAO,YAAY,mBAAmB,OAAO,WAAW;GAEpE;CAGH,IAAI;CACJ,IAAI,aAAuB,EAAE;CAC7B,IAAI;AAEJ,KAAI,YAAY,gBAAgB;EAC/B,MAAM,WAAWA,OAAI,iBAAiB,MAAM,WAAW,YAAY,eAAe,CAAC,CAAC;AACpF,eAAa,SAAS;AAEtB,MAAI,SAAS,eAAe,SAAS,KAAK;GACzC,MAAM,QAAQA,OAAI,gBAAgB,UAAU,SAAS,cAAc,MAAM,CAAC,SAAS;AAEnF,OAAI,SAAS,IACZ,YAAW;AAGZ,OAAI,SAAS,YASZ,mBAAkB,EAAE,GARP,uBAAuB,QAAQ;IAC3C,SAAS;IACT,QAAQ,SAAS,cAAc,MAAM,GAAG;IACxC,YAAY,SAAS,cAAc,MAAM,GAAG;IAC5C,SAAS,SAAS,cAAc,MAAM,GAAG;IACzC,QAAQ,SAAS,cAAc,MAAM,GAAG,KAAK,wBAAyB;IACtE,UAAU,SAAS,cAAc,MAAM,GAAG,KAAK,wBAAyB;IACxE,CAAC,EAC2B;;;CAMhC,MAAM,SAAyC,YAAY,SAAS,SACjE,4BAA4B,YAAY,QAAQ,QAAQ,YAAY,QAAQ,WAAW,GACvF;EACA,SAAS;EACT,OAAO;GACN,OAAO;GACP,SAAS;GACT,SAAS;GACT;EACD;CAEH,MAAM,eAAe,YAAY,aAAa,IAAI,WAAW,YAAY,WAAW,GAAG;CAEvF,MAAM,SAA8C;EACnD,QAAQ,YAAY;EACpB,OAAO,YAAY,SAAS,iBAAiB;EAC7C;EACA,SAAU,SAAS,WAAW,eAC3B,2BAA2B,aAAa,GACxC;EACH,aAAc,SAAS,cACpB,cACA;EACH,aAAa;EACb,KAAK;EACL;EACA,gBAAiB,SAAS,iBACtB,YAAY,gBAAgB,KAAK,YAAY;GAC9C,UAAU,mBAAmB,OAAO,SAAS;GAC7C,SAAS,kBAAkB,OAAO,MAAM;GACxC,QAAQ,OAAO;GACf,EAAE,IAAI,EAAE,GACR;EACH,QAAS,SAAS,SACd,YAAY,QAAQ,KAAK,WAAW;GACrC,WAAW,MAAM;GACjB,QAAQ,MAAM;GACd,QAAQ,MAAM;GACd,WAAW,MAAM;GACjB,KAAK,SAAS,QAAQ,WAAW,MAAM,IAAI,GAAG,IAAI,YAAY;GAC9D,MAAO,MAAM,cAA0C;GACvD,EAAE,IAAI,EAAE,GACR;EACH;AAED,QAAO,OAAO,UACX;EACA,OAAO;EACP,aAAa;EACb,GACA;EACA,OAAO;EACP,mBAAmB;EACnB;;AAGJ,SAAS,4BAA4B,EACpC,OACA,SACA,iBAQC;CACD,MAAM,iBAAiD,EAAE;CACzD,MAAM,4BAAuE,EAAE;CAC/E,MAAM,cAAsC,EAAE;AAE9C,gBAAe,SAAS,WAAW;AAClC,UAAQ,OAAO,MAAf;GACC,KAAK;AACJ,mBAAe,KAAK;KACnB,UAAU,OAAO;KACjB,YAAY;KACZ,cAAc;KACd,aAAa;KACb,YAAY;KACZ,aAAa;KACb,eAAe,OAAO;KACtB,cAAc,OAAO;KACrB,aAAa;KACb,aAAa;KACb,CAAC;AACF;GACD,KAAK;AACJ,mBAAe,KAAK;KACnB,UAAU,OAAO;KACjB,YAAY;KACZ,cAAc,OAAO;KACrB,aAAa,OAAO;KACpB,YAAY;MACX,OAAO;MACP,cAAc,OAAO;MACrB;KACD,aAAa;KACb,eAAe,OAAO;KACtB,cAAc,OAAO;KACrB,aAAa,WAAW,OAAO,UAAU;KACzC,aAAa;KACb,CAAC;AACF,gBAAY,OAAO,YAAY,mBAAmB,OAAO,WAAW;AACpE;GACD,KAAK;AACJ,mBAAe,KAAK;KACnB,UAAU,OAAO;KACjB,YAAY;KACZ,cAAc,OAAO;KACrB,aAAa;KACb,YAAY,WAAW,OAAO,MAAM;KACpC,aAAa;KACb,eAAe,OAAO;KACtB,cAAc,OAAO;KACrB,aAAa,WAAW,OAAO,MAAM;KACrC,aAAa;KACb,CAAC;AACF,gBAAY,OAAO,YAAY,mBAAmB,OAAO,WAAW;AACpE;GACD,KAAK;AACJ,mBAAe,KAAK;KACnB,UAAU,OAAO;KACjB,YAAY;KACZ,cAAc,OAAO;KACrB,aAAa,QAAQ,SAAS,MAAM,MAAM,EAAE,aAAa,OAAO,SAAS,EAAE,UAAU;KACrF,YAAY;KACZ,aAAa;KACb,eAAe;KACf,cAAc;KACd,aAAa;KACb,aAAa;KACb,CAAC;AACF,gBAAY,OAAO,YAAY,mBAAmB,OAAO,WAAW;AACpE;GACD,KAAK;AACJ,mBAAe,KAAK;KACnB,UAAU,OAAO;KACjB,YAAY;KACZ,cAAc,OAAO;KACrB,aAAa;KACb,YAAY;MACX,OAAO;MACP,cAAc,OAAO;MACrB;KACD,aAAa;KACb,eAAe,OAAO;KACtB,cACC,QAAQ,SAAS,MAAM,MAAM,EAAE,aAAa,OAAO,SAAS,EAAE,UAAU;KACzE,aAAa;MACZ,OAAO;MACP,aAAa,OAAO;MACpB;KACD,aAAa;KACb,CAAC;AACF,gBAAY,OAAO,YAAY,mBAAmB,OAAO,WAAW;AACpE;GACD,KAAK;AACJ,mBAAe,KAAK;KACnB,UAAU,OAAO;KACjB,YAAY;KACZ,cAAc;KACd,aAAa;KACb,YAAY;KACZ,aAAa;KACb,eAAe,OAAO;KACtB,cAAc,OAAO;KACrB,aAAa,WAAW,OAAO,MAAM;KACrC,aAAa;KACb,CAAC;AACF,gBAAY,OAAO,YAAY,mBAAmB,OAAO,WAAW;AACpE;;GAED;AAEF,QAAO;EACN;EACA,SAAS;GACR,KAAK,SAAS;GACd,SAAS;GACT,QAAQ,4BAA4B,QAAQ,QAAQ,QAAQ,WAAW;GACvE,SAAS,QAAQ;GACjB,mBAAmB,QAAQ;GAC3B,WAAW;IACV,UAAU,QAAQ,WAAW,UAAU;IACvC,YAAY;IACZ,cAAc;IACd,aAAa;IACb,YAAY;IACZ,aAAa;IACb,eAAe,QAAQ,UAAU,UAAU;IAC3C,cAAc,QAAQ,UAAU,UAAU;IAC1C,aAAa,WAAW,QAAQ,UAAU,MAAM;IAChD,aAAa;IACb;GACD,cAAc,QAAQ,gBAAgB;GACtC,cAAc,QAAQ,gBAAgB,EAAE;GACxC,gBAAgB,QAAQ,UAAU,UAAU;GAC5C;GACA;GACA,qBAAqB;GACrB;EACD;;AAGF,SAAS,2BAA2B,MAA2D;AAC9F,KAAI,OAAO,SAAS,UAAU;AAC7B,MAAI,eAAe,KAClB,QAAO;GACN,WAAW;GACX,MAAM,+BAA+B,KAAK,UAAU;GACpD;AAGF,MAAI,sBAAsB,KACzB,QAAO;GACN,WAAW;GACX,MAAM,+BAA+B,KAAK,iBAAiB;GAC3D;;AAIH,QAAO;EACN,WAAW;EACX,MAAM,+BAA+B,KAAK;EAC1C;;AAGF,SAAS,+BACR,MACmC;AACnC,SAAQ,MAAR;EACC,KAAK,UACJ,QAAO,EAAE,OAAO,WAAW;EAC5B,KAAK,OACJ,QAAO,EAAE,OAAO,QAAQ;EACzB,KAAK,KACJ,QAAO,EAAE,OAAO,MAAM;EACvB,KAAK,MACJ,QAAO,EAAE,OAAO,OAAO;EACxB,KAAK,MACJ,QAAO,EAAE,OAAO,OAAO;EACxB,KAAK,MACJ,QAAO,EAAE,OAAO,OAAO;EACxB,KAAK,OACJ,QAAO,EAAE,OAAO,QAAQ;EACzB,KAAK,OACJ,QAAO,EAAE,OAAO,QAAQ;;AAG1B,KAAI,OAAO,SAAS,SACnB,OAAM,IAAI,MAAM,iBAAiB,OAAO;AAGzC,KAAI,YAAY,KACf,QAAO;EACN,OAAO;EACP,QAAQ,+BAA+B,KAAK,OAAO;EACnD;AAGF,KAAI,YAAY,KACf,QAAO;EACN,OAAO;EACP,UAAU;GACT,UAAU,GAAG,oBAAoB,KAAK,OAAO,QAAQ,CAAC,IAAI,KAAK,OAAO,OAAO,IAAI,KAAK,OAAO;GAC7F,gBAAgB,KAAK,OAAO,cAAc,KAAK,MAAM,+BAA+B,EAAE,CAAC;GACvF;EACD;AAGF,KAAI,mBAAmB,KACtB,QAAO;EACN,OAAO;EACP,OAAO,KAAK;EACZ;AAGF,OAAM,IAAI,MAAM,iBAAiB,KAAK,UAAU,KAAK,GAAG;;AAGzD,SAAS,eAAe,YAAyD;AAChF,QAAO,WAAW,UAAU,KAAK,YAAY;AAC5C,UAAQ,SAAR;GACC,KAAK,OACJ,QAAO;GACR,KAAK,OACJ,QAAO;GACR,KAAK,QACJ,QAAO;GACR,KAAK,MACJ,QAAO;GACR,QACC,QAAO;;GAER;;AAGH,SAAS,gBAAgB,YAA0D;AAClF,SAAQ,YAAR;EACC,KAAK,SACJ,QAAO;EACR,KAAK,UACJ,QAAO;EACR,KAAK,SACJ,QAAO;EACR,QACC,QAAO"}
package/dist/version.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  //#region src/version.ts
2
- const PACKAGE_VERSION = "2.9.0";
2
+ const PACKAGE_VERSION = "2.10.0";
3
3
  const TARGETED_RPC_VERSION = "1.69.0";
4
4
 
5
5
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"version.mjs","names":[],"sources":["../src/version.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n// This file is generated by genversion.mjs. Do not edit it directly.\n\nexport const PACKAGE_VERSION = '2.9.0';\nexport const TARGETED_RPC_VERSION = '1.69.0';\n"],"mappings":";AAKA,MAAa,kBAAkB;AAC/B,MAAa,uBAAuB"}
1
+ {"version":3,"file":"version.mjs","names":[],"sources":["../src/version.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n// This file is generated by genversion.mjs. Do not edit it directly.\n\nexport const PACKAGE_VERSION = '2.10.0';\nexport const TARGETED_RPC_VERSION = '1.69.0';\n"],"mappings":";AAKA,MAAa,kBAAkB;AAC/B,MAAa,uBAAuB"}
@@ -1,31 +1,31 @@
1
- import * as _mysten_bcs1111 from "@mysten/bcs";
1
+ import * as _mysten_bcs810 from "@mysten/bcs";
2
2
  import { InferBcsInput } from "@mysten/bcs";
3
3
 
4
4
  //#region src/zklogin/bcs.d.ts
5
- declare const zkLoginSignature: _mysten_bcs1111.BcsStruct<{
6
- inputs: _mysten_bcs1111.BcsStruct<{
7
- proofPoints: _mysten_bcs1111.BcsStruct<{
8
- a: _mysten_bcs1111.BcsType<string[], Iterable<string> & {
5
+ declare const zkLoginSignature: _mysten_bcs810.BcsStruct<{
6
+ inputs: _mysten_bcs810.BcsStruct<{
7
+ proofPoints: _mysten_bcs810.BcsStruct<{
8
+ a: _mysten_bcs810.BcsType<string[], Iterable<string> & {
9
9
  length: number;
10
10
  }, string>;
11
- b: _mysten_bcs1111.BcsType<string[][], Iterable<Iterable<string> & {
11
+ b: _mysten_bcs810.BcsType<string[][], Iterable<Iterable<string> & {
12
12
  length: number;
13
13
  }> & {
14
14
  length: number;
15
15
  }, string>;
16
- c: _mysten_bcs1111.BcsType<string[], Iterable<string> & {
16
+ c: _mysten_bcs810.BcsType<string[], Iterable<string> & {
17
17
  length: number;
18
18
  }, string>;
19
19
  }, string>;
20
- issBase64Details: _mysten_bcs1111.BcsStruct<{
21
- value: _mysten_bcs1111.BcsType<string, string, "string">;
22
- indexMod4: _mysten_bcs1111.BcsType<number, number, "u8">;
20
+ issBase64Details: _mysten_bcs810.BcsStruct<{
21
+ value: _mysten_bcs810.BcsType<string, string, "string">;
22
+ indexMod4: _mysten_bcs810.BcsType<number, number, "u8">;
23
23
  }, string>;
24
- headerBase64: _mysten_bcs1111.BcsType<string, string, "string">;
25
- addressSeed: _mysten_bcs1111.BcsType<string, string, "string">;
24
+ headerBase64: _mysten_bcs810.BcsType<string, string, "string">;
25
+ addressSeed: _mysten_bcs810.BcsType<string, string, "string">;
26
26
  }, string>;
27
- maxEpoch: _mysten_bcs1111.BcsType<string, string | number | bigint, "u64">;
28
- userSignature: _mysten_bcs1111.BcsType<Uint8Array<ArrayBufferLike>, Iterable<number>, "vector<u8>">;
27
+ maxEpoch: _mysten_bcs810.BcsType<string, string | number | bigint, "u64">;
28
+ userSignature: _mysten_bcs810.BcsType<Uint8Array<ArrayBufferLike>, Iterable<number>, "vector<u8>">;
29
29
  }, string>;
30
30
  type ZkLoginSignature = InferBcsInput<typeof zkLoginSignature>;
31
31
  type ZkLoginSignatureInputs = ZkLoginSignature['inputs'];
@@ -1 +1 @@
1
- {"version":3,"file":"bcs.d.mts","names":[],"sources":["../../src/zklogin/bcs.ts"],"sourcesContent":[],"mappings":";;;;cAMa,kCAAgB;;;MAAhB,CAAA,yBAgBX,CAAA,MAAA,EAAA,UAAA,CAAA,MAAA,CAAA,GAAA;;;;;;;;;;;;;;;;;;;;eAhB2B,yBAAA,WAAA,gBAAA,CAAA,UAAA,CAAA,MAAA,CAAA,EAAA,YAAA,CAAA;CAAA,EAAA,MAAA,CAAA;AAkBjB,KAAA,gBAAA,GAAmB,aAAqB,CAAA,OAAA,gBAAR,CAAA;AAChC,KAAA,sBAAA,GAAyB,gBAAA,CAAA,QAAgB,CAAA"}
1
+ {"version":3,"file":"bcs.d.mts","names":[],"sources":["../../src/zklogin/bcs.ts"],"sourcesContent":[],"mappings":";;;;cAMa,iCAAgB;;;MAAhB,CAAA,wBAgBX,CAAA,MAAA,EAAA,UAAA,CAAA,MAAA,CAAA,GAAA;;;;;;;;;;;;;;;;;;;;eAhB2B,wBAAA,WAAA,gBAAA,CAAA,UAAA,CAAA,MAAA,CAAA,EAAA,YAAA,CAAA;CAAA,EAAA,MAAA,CAAA;AAkBjB,KAAA,gBAAA,GAAmB,aAAqB,CAAA,OAAA,gBAAR,CAAA;AAChC,KAAA,sBAAA,GAAyB,gBAAA,CAAA,QAAgB,CAAA"}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "author": "Mysten Labs <build@mystenlabs.com>",
4
4
  "description": "Sui TypeScript API",
5
5
  "homepage": "https://sdk.mystenlabs.com",
6
- "version": "2.9.0",
6
+ "version": "2.10.0",
7
7
  "license": "Apache-2.0",
8
8
  "sideEffects": false,
9
9
  "files": [
@@ -194,6 +194,10 @@ async function setExpiration(
194
194
  client: ClientWithCoreApi,
195
195
  existingSystemState: SystemStateData | null,
196
196
  ) {
197
+ if (transactionData.expiration || hasVersionedInputs(transactionData)) {
198
+ return;
199
+ }
200
+
197
201
  const [systemState, { chainIdentifier }] = await Promise.all([
198
202
  existingSystemState ?? client.core.getCurrentSystemState().then((r) => r.systemState),
199
203
  client.core.getChainIdentifier(),
@@ -213,6 +217,17 @@ async function setExpiration(
213
217
  };
214
218
  }
215
219
 
220
+ function hasVersionedInputs(transactionData: TransactionDataBuilder): boolean {
221
+ if (transactionData.gasData.payment?.length) {
222
+ return true;
223
+ }
224
+
225
+ return transactionData.inputs.some(
226
+ (input) =>
227
+ input.Object?.ImmOrOwnedObject || (input.UnresolvedObject && input.UnresolvedObject.version),
228
+ );
229
+ }
230
+
216
231
  async function resolveObjectReferences(
217
232
  transactionData: TransactionDataBuilder,
218
233
  client: ClientWithCoreApi,
@@ -100,6 +100,10 @@ export abstract class CoreClient extends BaseClient implements SuiClientTypes.Tr
100
100
  options?: SuiClientTypes.GetCurrentSystemStateOptions,
101
101
  ): Promise<SuiClientTypes.GetCurrentSystemStateResponse>;
102
102
 
103
+ abstract getProtocolConfig(
104
+ options?: SuiClientTypes.GetProtocolConfigOptions,
105
+ ): Promise<SuiClientTypes.GetProtocolConfigResponse>;
106
+
103
107
  abstract getChainIdentifier(
104
108
  options?: SuiClientTypes.GetChainIdentifierOptions,
105
109
  ): Promise<SuiClientTypes.GetChainIdentifierResponse>;
@@ -217,7 +221,7 @@ export abstract class CoreClient extends BaseClient implements SuiClientTypes.Tr
217
221
  async waitForTransaction<Include extends SuiClientTypes.TransactionInclude = {}>(
218
222
  options: SuiClientTypes.WaitForTransactionOptions<Include>,
219
223
  ): Promise<SuiClientTypes.TransactionResult<Include>> {
220
- const { signal, timeout = 60 * 1000, include } = options;
224
+ const { signal, timeout = 60 * 1000, pollSchedule, include } = options;
221
225
 
222
226
  const digest =
223
227
  'result' in options && options.result
@@ -236,7 +240,35 @@ export abstract class CoreClient extends BaseClient implements SuiClientTypes.Tr
236
240
  // Swallow unhandled rejections that might be thrown after early return
237
241
  });
238
242
 
243
+ // Default schedule tuned to testnet measurements:
244
+ // - Fullnode (gRPC/JSON-RPC): p50=130ms, p95=330ms
245
+ // - GraphQL indexer: p50=1300ms, p95=1430ms
246
+ // After schedule exhausted, repeats the last interval.
247
+ const schedule = pollSchedule ?? [0, 300, 600, 1500, 3500];
248
+ const t0 = Date.now();
249
+ let scheduleIndex = 0;
250
+ const lastInterval =
251
+ schedule.length > 0
252
+ ? schedule[schedule.length - 1] - (schedule[schedule.length - 2] ?? 0)
253
+ : 2_000;
254
+
239
255
  while (true) {
256
+ if (scheduleIndex < schedule.length) {
257
+ const remaining = t0 + schedule[scheduleIndex] - Date.now();
258
+ scheduleIndex++;
259
+ if (remaining > 0) {
260
+ await Promise.race([
261
+ new Promise((resolve) => setTimeout(resolve, remaining)),
262
+ abortPromise,
263
+ ]);
264
+ }
265
+ } else {
266
+ await Promise.race([
267
+ new Promise((resolve) => setTimeout(resolve, lastInterval)),
268
+ abortPromise,
269
+ ]);
270
+ }
271
+
240
272
  abortSignal.throwIfAborted();
241
273
  try {
242
274
  return await this.getTransaction({
@@ -244,9 +276,7 @@ export abstract class CoreClient extends BaseClient implements SuiClientTypes.Tr
244
276
  include,
245
277
  signal: abortSignal,
246
278
  });
247
- } catch {
248
- await Promise.race([new Promise((resolve) => setTimeout(resolve, 2_000)), abortPromise]);
249
- }
279
+ } catch {}
250
280
  }
251
281
  }
252
282
 
@@ -404,6 +404,8 @@ export namespace SuiClientTypes {
404
404
  Include extends TransactionInclude = {},
405
405
  > extends GetTransactionOptions<Include> {
406
406
  timeout?: number;
407
+ /** Absolute times (ms from start) to poll, e.g. [0, 300, 600, 1500]. After exhausted, repeats the last interval. */
408
+ pollSchedule?: number[];
407
409
  result?: never;
408
410
  }
409
411
 
@@ -413,6 +415,8 @@ export namespace SuiClientTypes {
413
415
  result: TransactionResult<any>;
414
416
  include?: Include & TransactionInclude;
415
417
  timeout?: number;
418
+ /** Absolute times (ms from start) to poll, e.g. [0, 300, 600, 1500]. After exhausted, repeats the last interval. */
419
+ pollSchedule?: number[];
416
420
  digest?: never;
417
421
  }
418
422
 
@@ -464,6 +468,22 @@ export namespace SuiClientTypes {
464
468
  systemState: SystemStateInfo;
465
469
  }
466
470
 
471
+ export interface GetProtocolConfigOptions extends CoreClientMethodOptions {}
472
+
473
+ export interface TransportMethods {
474
+ getProtocolConfig?: (options?: GetProtocolConfigOptions) => Promise<GetProtocolConfigResponse>;
475
+ }
476
+
477
+ export interface GetProtocolConfigResponse {
478
+ protocolConfig: ProtocolConfig;
479
+ }
480
+
481
+ export interface ProtocolConfig {
482
+ protocolVersion: string;
483
+ featureFlags: Record<string, boolean>;
484
+ attributes: Record<string, string | null>;
485
+ }
486
+
467
487
  export interface GetChainIdentifierOptions extends CoreClientMethodOptions {}
468
488
 
469
489
  export interface TransportMethods {
@@ -24,6 +24,7 @@ import {
24
24
  GetCoinsDocument,
25
25
  GetCurrentSystemStateDocument,
26
26
  GetMoveFunctionDocument,
27
+ GetProtocolConfigDocument,
27
28
  GetOwnedObjectsDocument,
28
29
  GetReferenceGasPriceDocument,
29
30
  GetTransactionBlockDocument,
@@ -453,6 +454,32 @@ export class GraphQLCoreClient extends CoreClient {
453
454
  };
454
455
  }
455
456
 
457
+ async getProtocolConfig(): Promise<SuiClientTypes.GetProtocolConfigResponse> {
458
+ const result = await this.#graphqlQuery(
459
+ {
460
+ query: GetProtocolConfigDocument,
461
+ },
462
+ (result) => result.epoch?.protocolConfigs,
463
+ );
464
+
465
+ const featureFlags: Record<string, boolean> = {};
466
+ for (const flag of result?.featureFlags ?? []) {
467
+ featureFlags[flag.key] = flag.value;
468
+ }
469
+ const attributes: Record<string, string | null> = {};
470
+ for (const config of result?.configs ?? []) {
471
+ attributes[config.key] = config.value ?? null;
472
+ }
473
+
474
+ return {
475
+ protocolConfig: {
476
+ protocolVersion: result?.protocolVersion?.toString() ?? (null as never),
477
+ featureFlags,
478
+ attributes,
479
+ },
480
+ };
481
+ }
482
+
456
483
  async getCurrentSystemState(): Promise<SuiClientTypes.GetCurrentSystemStateResponse> {
457
484
  const result = await this.#graphqlQuery(
458
485
  {
@@ -4868,6 +4868,11 @@ export type GetMoveFunctionQueryVariables = Exact<{
4868
4868
 
4869
4869
  export type GetMoveFunctionQuery = { __typename?: 'Query', package?: { __typename?: 'MovePackage', module?: { __typename?: 'MoveModule', function?: { __typename?: 'MoveFunction', name: string, visibility?: MoveVisibility | null, isEntry?: boolean | null, typeParameters?: Array<{ __typename?: 'MoveFunctionTypeParameter', constraints: Array<MoveAbility> }> | null, parameters?: Array<{ __typename?: 'OpenMoveType', signature: OpenMoveTypeSignature }> | null, return?: Array<{ __typename?: 'OpenMoveType', signature: OpenMoveTypeSignature }> | null } | null } | null } | null };
4870
4870
 
4871
+ export type GetProtocolConfigQueryVariables = Exact<{ [key: string]: never; }>;
4872
+
4873
+
4874
+ export type GetProtocolConfigQuery = { __typename?: 'Query', epoch?: { __typename?: 'Epoch', protocolConfigs?: { __typename?: 'ProtocolConfigs', protocolVersion: number, featureFlags: Array<{ __typename?: 'FeatureFlag', key: string, value: boolean }>, configs: Array<{ __typename?: 'ProtocolConfig', key: string, value?: string | null }> } | null } | null };
4875
+
4871
4876
  export type GetReferenceGasPriceQueryVariables = Exact<{ [key: string]: never; }>;
4872
4877
 
4873
4878
 
@@ -5402,6 +5407,23 @@ export const GetMoveFunctionDocument = new TypedDocumentString(`
5402
5407
  }
5403
5408
  }
5404
5409
  `) as unknown as TypedDocumentString<GetMoveFunctionQuery, GetMoveFunctionQueryVariables>;
5410
+ export const GetProtocolConfigDocument = new TypedDocumentString(`
5411
+ query getProtocolConfig {
5412
+ epoch {
5413
+ protocolConfigs {
5414
+ protocolVersion
5415
+ featureFlags {
5416
+ key
5417
+ value
5418
+ }
5419
+ configs {
5420
+ key
5421
+ value
5422
+ }
5423
+ }
5424
+ }
5425
+ }
5426
+ `) as unknown as TypedDocumentString<GetProtocolConfigQuery, GetProtocolConfigQueryVariables>;
5405
5427
  export const GetReferenceGasPriceDocument = new TypedDocumentString(`
5406
5428
  query getReferenceGasPrice {
5407
5429
  epoch {
@@ -0,0 +1,18 @@
1
+ # Copyright (c) Mysten Labs, Inc.
2
+ # SPDX-License-Identifier: Apache-2.0
3
+
4
+ query getProtocolConfig {
5
+ epoch {
6
+ protocolConfigs {
7
+ protocolVersion
8
+ featureFlags {
9
+ key
10
+ value
11
+ }
12
+ configs {
13
+ key
14
+ value
15
+ }
16
+ }
17
+ }
18
+ }
package/src/grpc/core.ts CHANGED
@@ -492,6 +492,33 @@ export class GrpcCoreClient extends CoreClient {
492
492
  };
493
493
  }
494
494
 
495
+ async getProtocolConfig(): Promise<SuiClientTypes.GetProtocolConfigResponse> {
496
+ const response = await this.#client.ledgerService.getEpoch({
497
+ readMask: { paths: ['protocol_config'] },
498
+ });
499
+
500
+ const protocolConfig = response.response.epoch?.protocolConfig;
501
+ if (!protocolConfig) {
502
+ throw new Error('Protocol config not found in response');
503
+ }
504
+
505
+ const featureFlags: Record<string, boolean> = { ...protocolConfig.featureFlags };
506
+ const attributes: Record<string, string | null> = {};
507
+ if (protocolConfig.attributes) {
508
+ for (const [key, value] of Object.entries(protocolConfig.attributes)) {
509
+ attributes[key] = value ?? null;
510
+ }
511
+ }
512
+
513
+ return {
514
+ protocolConfig: {
515
+ protocolVersion: protocolConfig.protocolVersion?.toString() ?? (null as never),
516
+ featureFlags,
517
+ attributes,
518
+ },
519
+ };
520
+ }
521
+
495
522
  async getCurrentSystemState(): Promise<SuiClientTypes.GetCurrentSystemStateResponse> {
496
523
  const response = await this.#client.ledgerService.getEpoch({
497
524
  readMask: {