@t2000/cli 5.6.0 → 5.7.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.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../node_modules/.pnpm/@mysten+sui@2.17.0_typescript@5.9.3/node_modules/@mysten/sui/src/transactions/Commands.ts","../../../node_modules/.pnpm/@mysten+sui@2.17.0_typescript@5.9.3/node_modules/@mysten/sui/src/transactions/Inputs.ts","../../../node_modules/.pnpm/@mysten+sui@2.17.0_typescript@5.9.3/node_modules/@mysten/sui/src/transactions/serializer.ts","../../../node_modules/.pnpm/@mysten+sui@2.17.0_typescript@5.9.3/node_modules/@mysten/sui/src/transactions/intents/CoinWithBalance.ts","../../../node_modules/.pnpm/@mysten+sui@2.17.0_typescript@5.9.3/node_modules/@mysten/sui/src/transactions/data/v2.ts","../../../node_modules/.pnpm/@mysten+sui@2.17.0_typescript@5.9.3/node_modules/@mysten/sui/src/utils/coin-reservation.ts","../../../node_modules/.pnpm/@mysten+sui@2.17.0_typescript@5.9.3/node_modules/@mysten/sui/src/client/core-resolver.ts","../../../node_modules/.pnpm/@mysten+sui@2.17.0_typescript@5.9.3/node_modules/@mysten/sui/src/transactions/resolve.ts","../../../node_modules/.pnpm/@mysten+sui@2.17.0_typescript@5.9.3/node_modules/@mysten/sui/src/transactions/object.ts","../../../node_modules/.pnpm/@mysten+sui@2.17.0_typescript@5.9.3/node_modules/@mysten/sui/src/transactions/pure.ts","../../../node_modules/.pnpm/@mysten+sui@2.17.0_typescript@5.9.3/node_modules/@mysten/sui/src/transactions/plugins/NamedPackagesPlugin.ts","../../../node_modules/.pnpm/@mysten+sui@2.17.0_typescript@5.9.3/node_modules/@mysten/sui/src/transactions/Transaction.ts","../../../node_modules/.pnpm/@mysten+sui@2.17.0_typescript@5.9.3/node_modules/@mysten/sui/src/transactions/ObjectCache.ts","../../../node_modules/.pnpm/@mysten+sui@2.17.0_typescript@5.9.3/node_modules/@mysten/sui/src/transactions/executor/caching.ts","../../../node_modules/.pnpm/@mysten+sui@2.17.0_typescript@5.9.3/node_modules/@mysten/sui/src/transactions/executor/queue.ts","../../../node_modules/.pnpm/@mysten+sui@2.17.0_typescript@5.9.3/node_modules/@mysten/sui/src/transactions/executor/serial.ts","../../../node_modules/.pnpm/@mysten+sui@2.17.0_typescript@5.9.3/node_modules/@mysten/sui/src/transactions/executor/parallel.ts","../../../node_modules/.pnpm/@mysten+sui@2.17.0_typescript@5.9.3/node_modules/@mysten/sui/src/transactions/Arguments.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { toBase64 } from '@mysten/bcs';\nimport type { InferInput } from 'valibot';\nimport { parse } from 'valibot';\n\nimport { normalizeSuiObjectId } from '../utils/sui-types.js';\nimport type { Argument, CallArg, Command } from './data/internal.js';\nimport { ArgumentSchema } from './data/internal.js';\nimport type { AsyncTransactionThunk, Transaction } from './Transaction.js';\n\nexport type TransactionArgument =\n\t| InferInput<typeof ArgumentSchema>\n\t| ((tx: Transaction) => InferInput<typeof ArgumentSchema>)\n\t| AsyncTransactionThunk;\nexport type TransactionInput = CallArg;\n\n// Keep in sync with constants in\n// crates/sui-framework/packages/sui-framework/sources/package.move\nexport enum UpgradePolicy {\n\tCOMPATIBLE = 0,\n\tADDITIVE = 128,\n\tDEP_ONLY = 192,\n}\n\ntype TransactionShape<T extends Command['$kind']> = { $kind: T } & {\n\t[K in T]: Extract<Command, { [K in T]: any }>[T];\n};\n\n/**\n * Simple helpers used to construct transactions:\n */\nexport const TransactionCommands = {\n\tMoveCall(\n\t\tinput:\n\t\t\t| {\n\t\t\t\t\tpackage: string;\n\t\t\t\t\tmodule: string;\n\t\t\t\t\tfunction: string;\n\t\t\t\t\targuments?: Argument[];\n\t\t\t\t\ttypeArguments?: string[];\n\t\t\t }\n\t\t\t| {\n\t\t\t\t\ttarget: string;\n\t\t\t\t\targuments?: Argument[];\n\t\t\t\t\ttypeArguments?: string[];\n\t\t\t },\n\t): TransactionShape<'MoveCall'> {\n\t\tconst [pkg, mod = '', fn = ''] =\n\t\t\t'target' in input ? input.target.split('::') : [input.package, input.module, input.function];\n\n\t\treturn {\n\t\t\t$kind: 'MoveCall',\n\t\t\tMoveCall: {\n\t\t\t\tpackage: pkg,\n\t\t\t\tmodule: mod,\n\t\t\t\tfunction: fn,\n\t\t\t\ttypeArguments: input.typeArguments ?? [],\n\t\t\t\targuments: input.arguments ?? [],\n\t\t\t},\n\t\t};\n\t},\n\n\tTransferObjects(\n\t\tobjects: InferInput<typeof ArgumentSchema>[],\n\t\taddress: InferInput<typeof ArgumentSchema>,\n\t): TransactionShape<'TransferObjects'> {\n\t\treturn {\n\t\t\t$kind: 'TransferObjects',\n\t\t\tTransferObjects: {\n\t\t\t\tobjects: objects.map((o) => parse(ArgumentSchema, o)),\n\t\t\t\taddress: parse(ArgumentSchema, address),\n\t\t\t},\n\t\t};\n\t},\n\tSplitCoins(\n\t\tcoin: InferInput<typeof ArgumentSchema>,\n\t\tamounts: InferInput<typeof ArgumentSchema>[],\n\t): TransactionShape<'SplitCoins'> {\n\t\treturn {\n\t\t\t$kind: 'SplitCoins',\n\t\t\tSplitCoins: {\n\t\t\t\tcoin: parse(ArgumentSchema, coin),\n\t\t\t\tamounts: amounts.map((o) => parse(ArgumentSchema, o)),\n\t\t\t},\n\t\t};\n\t},\n\tMergeCoins(\n\t\tdestination: InferInput<typeof ArgumentSchema>,\n\t\tsources: InferInput<typeof ArgumentSchema>[],\n\t): TransactionShape<'MergeCoins'> {\n\t\treturn {\n\t\t\t$kind: 'MergeCoins',\n\t\t\tMergeCoins: {\n\t\t\t\tdestination: parse(ArgumentSchema, destination),\n\t\t\t\tsources: sources.map((o) => parse(ArgumentSchema, o)),\n\t\t\t},\n\t\t};\n\t},\n\tPublish({\n\t\tmodules,\n\t\tdependencies,\n\t}: {\n\t\tmodules: number[][] | string[];\n\t\tdependencies: string[];\n\t}): TransactionShape<'Publish'> {\n\t\treturn {\n\t\t\t$kind: 'Publish',\n\t\t\tPublish: {\n\t\t\t\tmodules: modules.map((module) =>\n\t\t\t\t\ttypeof module === 'string' ? module : toBase64(new Uint8Array(module)),\n\t\t\t\t),\n\t\t\t\tdependencies: dependencies.map((dep) => normalizeSuiObjectId(dep)),\n\t\t\t},\n\t\t};\n\t},\n\tUpgrade({\n\t\tmodules,\n\t\tdependencies,\n\t\tpackage: packageId,\n\t\tticket,\n\t}: {\n\t\tmodules: number[][] | string[];\n\t\tdependencies: string[];\n\t\tpackage: string;\n\t\tticket: InferInput<typeof ArgumentSchema>;\n\t}): TransactionShape<'Upgrade'> {\n\t\treturn {\n\t\t\t$kind: 'Upgrade',\n\t\t\tUpgrade: {\n\t\t\t\tmodules: modules.map((module) =>\n\t\t\t\t\ttypeof module === 'string' ? module : toBase64(new Uint8Array(module)),\n\t\t\t\t),\n\t\t\t\tdependencies: dependencies.map((dep) => normalizeSuiObjectId(dep)),\n\t\t\t\tpackage: packageId,\n\t\t\t\tticket: parse(ArgumentSchema, ticket),\n\t\t\t},\n\t\t};\n\t},\n\tMakeMoveVec({\n\t\ttype,\n\t\telements,\n\t}: {\n\t\ttype?: string;\n\t\telements: InferInput<typeof ArgumentSchema>[];\n\t}): TransactionShape<'MakeMoveVec'> {\n\t\treturn {\n\t\t\t$kind: 'MakeMoveVec',\n\t\t\tMakeMoveVec: {\n\t\t\t\ttype: type ?? null,\n\t\t\t\telements: elements.map((o) => parse(ArgumentSchema, o)),\n\t\t\t},\n\t\t};\n\t},\n\tIntent({\n\t\tname,\n\t\tinputs = {},\n\t\tdata = {},\n\t}: {\n\t\tname: string;\n\t\tinputs?: Record<\n\t\t\tstring,\n\t\t\tInferInput<typeof ArgumentSchema> | InferInput<typeof ArgumentSchema>[]\n\t\t>;\n\t\tdata?: Record<string, unknown>;\n\t}): TransactionShape<'$Intent'> {\n\t\treturn {\n\t\t\t$kind: '$Intent',\n\t\t\t$Intent: {\n\t\t\t\tname,\n\t\t\t\tinputs: Object.fromEntries(\n\t\t\t\t\tObject.entries(inputs).map(([key, value]) => [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tArray.isArray(value)\n\t\t\t\t\t\t\t? value.map((o) => parse(ArgumentSchema, o))\n\t\t\t\t\t\t\t: parse(ArgumentSchema, value),\n\t\t\t\t\t]),\n\t\t\t\t),\n\t\t\t\tdata,\n\t\t\t},\n\t\t};\n\t},\n};\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { toBase64 } from '@mysten/bcs';\nimport type { SerializedBcs } from '@mysten/bcs';\n\nimport { normalizeSuiAddress } from '../utils/sui-types.js';\nimport type {\n\tCallArg,\n\tObjectRef,\n\tReservation,\n\tWithdrawalTypeArg,\n\tWithdrawFrom,\n} from './data/internal.js';\n\nfunction Pure(data: Uint8Array | SerializedBcs<any>): Extract<CallArg, { Pure: unknown }> {\n\treturn {\n\t\t$kind: 'Pure',\n\t\tPure: {\n\t\t\tbytes: data instanceof Uint8Array ? toBase64(data) : data.toBase64(),\n\t\t},\n\t};\n}\n\nexport const Inputs = {\n\tPure,\n\tObjectRef({ objectId, digest, version }: ObjectRef): Extract<CallArg, { Object: unknown }> {\n\t\treturn {\n\t\t\t$kind: 'Object',\n\t\t\tObject: {\n\t\t\t\t$kind: 'ImmOrOwnedObject',\n\t\t\t\tImmOrOwnedObject: {\n\t\t\t\t\tdigest,\n\t\t\t\t\tversion,\n\t\t\t\t\tobjectId: normalizeSuiAddress(objectId),\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t},\n\tSharedObjectRef({\n\t\tobjectId,\n\t\tmutable,\n\t\tinitialSharedVersion,\n\t}: {\n\t\tobjectId: string;\n\t\tmutable: boolean;\n\t\tinitialSharedVersion: number | string;\n\t}): Extract<CallArg, { Object: unknown }> {\n\t\treturn {\n\t\t\t$kind: 'Object',\n\t\t\tObject: {\n\t\t\t\t$kind: 'SharedObject',\n\t\t\t\tSharedObject: {\n\t\t\t\t\tmutable,\n\t\t\t\t\tinitialSharedVersion,\n\t\t\t\t\tobjectId: normalizeSuiAddress(objectId),\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t},\n\tReceivingRef({ objectId, digest, version }: ObjectRef): Extract<CallArg, { Object: unknown }> {\n\t\treturn {\n\t\t\t$kind: 'Object',\n\t\t\tObject: {\n\t\t\t\t$kind: 'Receiving',\n\t\t\t\tReceiving: {\n\t\t\t\t\tdigest,\n\t\t\t\t\tversion,\n\t\t\t\t\tobjectId: normalizeSuiAddress(objectId),\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t},\n\tFundsWithdrawal({\n\t\treservation,\n\t\ttypeArg,\n\t\twithdrawFrom,\n\t}: {\n\t\treservation: Reservation;\n\t\ttypeArg: WithdrawalTypeArg;\n\t\twithdrawFrom: WithdrawFrom;\n\t}): Extract<CallArg, { FundsWithdrawal: unknown }> {\n\t\treturn {\n\t\t\t$kind: 'FundsWithdrawal',\n\t\t\tFundsWithdrawal: {\n\t\t\t\treservation,\n\t\t\t\ttypeArg,\n\t\t\t\twithdrawFrom,\n\t\t\t},\n\t\t};\n\t},\n};\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { BcsType } from '@mysten/bcs';\n\nimport { bcs } from '../bcs/index.js';\nimport type { SuiMoveNormalizedType } from '../jsonRpc/index.js';\nimport { MOVE_STDLIB_ADDRESS, SUI_FRAMEWORK_ADDRESS } from '../utils/index.js';\nimport { normalizeSuiAddress } from '../utils/sui-types.js';\nimport type { SuiClientTypes } from '../client/types.js';\n\n/**\n * Parses a type name like \"0x2::tx_context::TxContext\" into package, module, and name parts.\n */\nfunction parseTypeName(typeName: string): { package: string; module: string; name: string } {\n\tconst parts = typeName.split('::');\n\tif (parts.length !== 3) {\n\t\tthrow new Error(`Invalid type name format: ${typeName}`);\n\t}\n\treturn { package: parts[0], module: parts[1], name: parts[2] };\n}\n\nexport function isTxContext(param: SuiClientTypes.OpenSignature): boolean {\n\tif (param.body.$kind !== 'datatype') {\n\t\treturn false;\n\t}\n\n\tconst { package: pkg, module, name } = parseTypeName(param.body.datatype.typeName);\n\n\treturn (\n\t\tnormalizeSuiAddress(pkg) === SUI_FRAMEWORK_ADDRESS &&\n\t\tmodule === 'tx_context' &&\n\t\tname === 'TxContext'\n\t);\n}\n\nexport function getPureBcsSchema(\n\ttypeSignature: SuiClientTypes.OpenSignatureBody,\n): BcsType<any> | null {\n\tswitch (typeSignature.$kind) {\n\t\tcase 'address':\n\t\t\treturn bcs.Address;\n\t\tcase 'bool':\n\t\t\treturn bcs.Bool;\n\t\tcase 'u8':\n\t\t\treturn bcs.U8;\n\t\tcase 'u16':\n\t\t\treturn bcs.U16;\n\t\tcase 'u32':\n\t\t\treturn bcs.U32;\n\t\tcase 'u64':\n\t\t\treturn bcs.U64;\n\t\tcase 'u128':\n\t\t\treturn bcs.U128;\n\t\tcase 'u256':\n\t\t\treturn bcs.U256;\n\t\tcase 'vector': {\n\t\t\tif (typeSignature.vector.$kind === 'u8') {\n\t\t\t\treturn bcs.byteVector().transform({\n\t\t\t\t\tinput: (val: string | Uint8Array) =>\n\t\t\t\t\t\ttypeof val === 'string' ? new TextEncoder().encode(val) : val,\n\t\t\t\t\toutput: (val) => val,\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst type = getPureBcsSchema(typeSignature.vector);\n\t\t\treturn type ? bcs.vector(type) : null;\n\t\t}\n\t\tcase 'datatype': {\n\t\t\tconst { package: pkg, module, name } = parseTypeName(typeSignature.datatype.typeName);\n\t\t\tconst normalizedPkg = normalizeSuiAddress(pkg);\n\n\t\t\tif (normalizedPkg === MOVE_STDLIB_ADDRESS) {\n\t\t\t\tif (module === 'ascii' && name === 'String') {\n\t\t\t\t\treturn bcs.String;\n\t\t\t\t}\n\t\t\t\tif (module === 'string' && name === 'String') {\n\t\t\t\t\treturn bcs.String;\n\t\t\t\t}\n\t\t\t\tif (module === 'option' && name === 'Option') {\n\t\t\t\t\tconst type = getPureBcsSchema(typeSignature.datatype.typeParameters[0]);\n\t\t\t\t\treturn type ? bcs.vector(type) : null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (normalizedPkg === SUI_FRAMEWORK_ADDRESS) {\n\t\t\t\tif (module === 'object' && name === 'ID') {\n\t\t\t\t\treturn bcs.Address;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\t\tcase 'typeParameter':\n\t\tcase 'unknown':\n\t\t\treturn null;\n\t}\n}\n\nexport function normalizedTypeToMoveTypeSignature(\n\ttype: SuiMoveNormalizedType,\n): SuiClientTypes.OpenSignature {\n\tif (typeof type === 'object' && 'Reference' in type) {\n\t\treturn {\n\t\t\treference: 'immutable',\n\t\t\tbody: normalizedTypeToMoveTypeSignatureBody(type.Reference),\n\t\t};\n\t}\n\tif (typeof type === 'object' && 'MutableReference' in type) {\n\t\treturn {\n\t\t\treference: 'mutable',\n\t\t\tbody: normalizedTypeToMoveTypeSignatureBody(type.MutableReference),\n\t\t};\n\t}\n\n\treturn {\n\t\treference: null,\n\t\tbody: normalizedTypeToMoveTypeSignatureBody(type),\n\t};\n}\n\nfunction normalizedTypeToMoveTypeSignatureBody(\n\ttype: SuiMoveNormalizedType,\n): SuiClientTypes.OpenSignatureBody {\n\tif (typeof type === 'string') {\n\t\tswitch (type) {\n\t\t\tcase 'Address':\n\t\t\t\treturn { $kind: 'address' };\n\t\t\tcase 'Bool':\n\t\t\t\treturn { $kind: 'bool' };\n\t\t\tcase 'U8':\n\t\t\t\treturn { $kind: 'u8' };\n\t\t\tcase 'U16':\n\t\t\t\treturn { $kind: 'u16' };\n\t\t\tcase 'U32':\n\t\t\t\treturn { $kind: 'u32' };\n\t\t\tcase 'U64':\n\t\t\t\treturn { $kind: 'u64' };\n\t\t\tcase 'U128':\n\t\t\t\treturn { $kind: 'u128' };\n\t\t\tcase 'U256':\n\t\t\t\treturn { $kind: 'u256' };\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`Unexpected type ${type}`);\n\t\t}\n\t}\n\n\tif ('Vector' in type) {\n\t\treturn { $kind: 'vector', vector: normalizedTypeToMoveTypeSignatureBody(type.Vector) };\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: `${type.Struct.address}::${type.Struct.module}::${type.Struct.name}`,\n\t\t\t\ttypeParameters: type.Struct.typeArguments.map(normalizedTypeToMoveTypeSignatureBody),\n\t\t\t},\n\t\t};\n\t}\n\n\tif ('TypeParameter' in type) {\n\t\treturn { $kind: 'typeParameter', index: type.TypeParameter };\n\t}\n\n\tthrow new Error(`Unexpected type ${JSON.stringify(type)}`);\n}\n\nexport function pureBcsSchemaFromOpenSignatureBody(\n\ttypeSignature: SuiClientTypes.OpenSignatureBody,\n): BcsType<any> {\n\tswitch (typeSignature.$kind) {\n\t\tcase 'address':\n\t\t\treturn bcs.Address;\n\t\tcase 'bool':\n\t\t\treturn bcs.Bool;\n\t\tcase 'u8':\n\t\t\treturn bcs.U8;\n\t\tcase 'u16':\n\t\t\treturn bcs.U16;\n\t\tcase 'u32':\n\t\t\treturn bcs.U32;\n\t\tcase 'u64':\n\t\t\treturn bcs.U64;\n\t\tcase 'u128':\n\t\t\treturn bcs.U128;\n\t\tcase 'u256':\n\t\t\treturn bcs.U256;\n\t\tcase 'vector':\n\t\t\treturn bcs.vector(pureBcsSchemaFromOpenSignatureBody(typeSignature.vector));\n\t\tdefault:\n\t\t\tthrow new Error(`Expected pure typeSignature, but got ${JSON.stringify(typeSignature)}`);\n\t}\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { InferInput } from 'valibot';\nimport { bigint, object, optional, parse, picklist, string } from 'valibot';\n\nimport { bcs } from '../../bcs/index.js';\nimport { normalizeStructTag } from '../../utils/sui-types.js';\nimport { TransactionCommands } from '../Commands.js';\nimport type { Argument } from '../data/internal.js';\nimport { Inputs } from '../Inputs.js';\nimport type { BuildTransactionOptions } from '../resolve.js';\nimport type { Transaction, TransactionResult } from '../Transaction.js';\nimport type { TransactionDataBuilder } from '../TransactionData.js';\nimport type { ClientWithCoreApi, SuiClientTypes } from '../../client/index.js';\n\nexport const COIN_WITH_BALANCE = 'CoinWithBalance';\nconst SUI_TYPE = normalizeStructTag('0x2::sui::SUI');\n\nexport function coinWithBalance({\n\ttype = SUI_TYPE,\n\tbalance,\n\tuseGasCoin = true,\n}: {\n\tbalance: bigint | number;\n\ttype?: string;\n\tuseGasCoin?: boolean;\n}): (tx: Transaction) => TransactionResult {\n\tlet coinResult: TransactionResult | null = null;\n\n\treturn (tx: Transaction) => {\n\t\tif (coinResult) {\n\t\t\treturn coinResult;\n\t\t}\n\n\t\ttx.addIntentResolver(COIN_WITH_BALANCE, resolveCoinBalance);\n\t\tconst coinType = type === 'gas' ? type : normalizeStructTag(type);\n\n\t\tcoinResult = tx.add(\n\t\t\tTransactionCommands.Intent({\n\t\t\t\tname: COIN_WITH_BALANCE,\n\t\t\t\tinputs: {},\n\t\t\t\tdata: {\n\t\t\t\t\ttype: coinType === SUI_TYPE && useGasCoin ? 'gas' : coinType,\n\t\t\t\t\tbalance: BigInt(balance),\n\t\t\t\t\toutputKind: 'coin',\n\t\t\t\t} satisfies InferInput<typeof CoinWithBalanceData>,\n\t\t\t}),\n\t\t);\n\n\t\treturn coinResult;\n\t};\n}\n\nexport function createBalance({\n\ttype = SUI_TYPE,\n\tbalance,\n\tuseGasCoin = true,\n}: {\n\tbalance: bigint | number;\n\ttype?: string;\n\tuseGasCoin?: boolean;\n}): (tx: Transaction) => TransactionResult {\n\tlet balanceResult: TransactionResult | null = null;\n\n\treturn (tx: Transaction) => {\n\t\tif (balanceResult) {\n\t\t\treturn balanceResult;\n\t\t}\n\n\t\ttx.addIntentResolver(COIN_WITH_BALANCE, resolveCoinBalance);\n\t\tconst coinType = type === 'gas' ? type : normalizeStructTag(type);\n\n\t\tbalanceResult = tx.add(\n\t\t\tTransactionCommands.Intent({\n\t\t\t\tname: COIN_WITH_BALANCE,\n\t\t\t\tinputs: {},\n\t\t\t\tdata: {\n\t\t\t\t\ttype: coinType === SUI_TYPE && useGasCoin ? 'gas' : coinType,\n\t\t\t\t\tbalance: BigInt(balance),\n\t\t\t\t\toutputKind: 'balance',\n\t\t\t\t} satisfies InferInput<typeof CoinWithBalanceData>,\n\t\t\t}),\n\t\t);\n\n\t\treturn balanceResult;\n\t};\n}\n\nconst CoinWithBalanceData = object({\n\ttype: string(),\n\tbalance: bigint(),\n\toutputKind: optional(picklist(['coin', 'balance'])),\n});\n\nexport async function resolveCoinBalance(\n\ttransactionData: TransactionDataBuilder,\n\tbuildOptions: BuildTransactionOptions,\n\tnext: () => Promise<void>,\n) {\n\ttype IntentInfo = { balance: bigint; outputKind: 'coin' | 'balance' };\n\n\tconst coinTypes = new Set<string>();\n\tconst totalByType = new Map<string, bigint>();\n\tconst intentsByType = new Map<string, IntentInfo[]>();\n\n\tif (!transactionData.sender) {\n\t\tthrow new Error('Sender must be set to resolve CoinWithBalance');\n\t}\n\n\t// First pass: scan intents, collect per-type data, and resolve zero-balance intents in place.\n\tfor (const [i, command] of transactionData.commands.entries()) {\n\t\tif (command.$kind !== '$Intent' || command.$Intent.name !== COIN_WITH_BALANCE) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst { type, balance, outputKind } = parse(CoinWithBalanceData, command.$Intent.data);\n\n\t\t// Zero-balance intents are resolved immediately — no coins or AB needed.\n\t\t// This is a 1:1 replacement so indices don't shift.\n\t\tif (balance === 0n) {\n\t\t\tconst coinType = type === 'gas' ? SUI_TYPE : type;\n\t\t\ttransactionData.replaceCommand(\n\t\t\t\ti,\n\t\t\t\tTransactionCommands.MoveCall({\n\t\t\t\t\ttarget: (outputKind ?? 'coin') === 'balance' ? '0x2::balance::zero' : '0x2::coin::zero',\n\t\t\t\t\ttypeArguments: [coinType],\n\t\t\t\t}),\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (type !== 'gas') {\n\t\t\tcoinTypes.add(type);\n\t\t}\n\n\t\ttotalByType.set(type, (totalByType.get(type) ?? 0n) + balance);\n\n\t\tif (!intentsByType.has(type)) intentsByType.set(type, []);\n\t\tintentsByType.get(type)!.push({ balance, outputKind: outputKind ?? 'coin' });\n\t}\n\n\tif (totalByType.has('gas') && totalByType.has(SUI_TYPE)) {\n\t\tthrow new Error(\n\t\t\t'Cannot mix SUI CoinWithBalance intents that use the gas coin with ones that do not (useGasCoin: false). Use one or the other.',\n\t\t);\n\t}\n\n\tconst usedIds = new Set<string>();\n\n\tfor (const input of transactionData.inputs) {\n\t\tif (input.Object?.ImmOrOwnedObject) {\n\t\t\tusedIds.add(input.Object.ImmOrOwnedObject.objectId);\n\t\t}\n\t\tif (input.UnresolvedObject?.objectId) {\n\t\t\tusedIds.add(input.UnresolvedObject.objectId);\n\t\t}\n\t}\n\n\tconst coinsByType = new Map<string, SuiClientTypes.Coin[]>();\n\tconst addressBalanceByType = new Map<string, bigint>();\n\tconst client = buildOptions.client;\n\n\tif (!client) {\n\t\tthrow new Error(\n\t\t\t'Client must be provided to build or serialize transactions with CoinWithBalance intents',\n\t\t);\n\t}\n\n\tawait Promise.all([\n\t\t...[...coinTypes].map(async (coinType) => {\n\t\t\tconst { coins, addressBalance } = await getCoinsAndBalanceOfType({\n\t\t\t\tcoinType,\n\t\t\t\tbalance: totalByType.get(coinType)!,\n\t\t\t\tclient,\n\t\t\t\towner: transactionData.sender!,\n\t\t\t\tusedIds,\n\t\t\t});\n\n\t\t\tcoinsByType.set(coinType, coins);\n\t\t\taddressBalanceByType.set(coinType, addressBalance);\n\t\t}),\n\t\ttotalByType.has('gas')\n\t\t\t? await client.core\n\t\t\t\t\t.getBalance({\n\t\t\t\t\t\towner: transactionData.sender!,\n\t\t\t\t\t\tcoinType: SUI_TYPE,\n\t\t\t\t\t})\n\t\t\t\t\t.then(({ balance }) => {\n\t\t\t\t\t\taddressBalanceByType.set('gas', BigInt(balance.addressBalance));\n\t\t\t\t\t})\n\t\t\t: null,\n\t]);\n\n\tconst mergedCoins = new Map<string, Argument>();\n\tconst exactBalanceByType = new Map<string, boolean>();\n\tconst usedAddressBalance = new Set<string>();\n\n\t// Per-type state for Path 2 combined splits\n\ttype TypeState = { results: Argument[]; nextIntent: number };\n\tconst typeState = new Map<string, TypeState>();\n\n\tlet index = 0;\n\twhile (index < transactionData.commands.length) {\n\t\tconst transaction = transactionData.commands[index];\n\t\tif (transaction.$kind !== '$Intent' || transaction.$Intent.name !== COIN_WITH_BALANCE) {\n\t\t\tindex++;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst { type, balance } = transaction.$Intent.data as {\n\t\t\ttype: string;\n\t\t\tbalance: bigint;\n\t\t};\n\t\tconst coinType = type === 'gas' ? SUI_TYPE : type;\n\t\tconst totalRequired = totalByType.get(type)!;\n\t\tconst addressBalance = addressBalanceByType.get(type) ?? 0n;\n\n\t\tconst commands = [];\n\t\tlet intentResult: Argument;\n\n\t\tconst intentsForType = intentsByType.get(type) ?? [];\n\t\tconst allBalance = intentsForType.every((i) => i.outputKind === 'balance');\n\n\t\tif (allBalance && addressBalance >= totalRequired) {\n\t\t\t// Path 1: All balance intents and AB sufficient — direct per-intent withdrawal.\n\t\t\t// No coins touched, enables parallel execution.\n\t\t\tcommands.push(\n\t\t\t\tTransactionCommands.MoveCall({\n\t\t\t\t\ttarget: '0x2::balance::redeem_funds',\n\t\t\t\t\ttypeArguments: [coinType],\n\t\t\t\t\targuments: [\n\t\t\t\t\t\ttransactionData.addInput(\n\t\t\t\t\t\t\t'withdrawal',\n\t\t\t\t\t\t\tInputs.FundsWithdrawal({\n\t\t\t\t\t\t\t\treservation: {\n\t\t\t\t\t\t\t\t\t$kind: 'MaxAmountU64',\n\t\t\t\t\t\t\t\t\tMaxAmountU64: String(balance),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttypeArg: { $kind: 'Balance', Balance: coinType },\n\t\t\t\t\t\t\t\twithdrawFrom: { $kind: 'Sender', Sender: true },\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t),\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\tintentResult = {\n\t\t\t\t$kind: 'NestedResult',\n\t\t\t\tNestedResult: [index + commands.length - 1, 0],\n\t\t\t};\n\t\t} else {\n\t\t\t// Path 2: Merge and Split — build a merged coin, split all intents at once.\n\n\t\t\tif (!typeState.has(type)) {\n\t\t\t\tconst intents = intentsForType;\n\n\t\t\t\t// Step 1: Build sources and merge\n\t\t\t\tconst sources: Argument[] = [];\n\n\t\t\t\tif (addressBalance >= totalRequired) {\n\t\t\t\t\t// AB sufficient — source entirely from address balance, no coins needed.\n\t\t\t\t\tusedAddressBalance.add(type);\n\n\t\t\t\t\tcommands.push(\n\t\t\t\t\t\tTransactionCommands.MoveCall({\n\t\t\t\t\t\t\ttarget: '0x2::coin::redeem_funds',\n\t\t\t\t\t\t\ttypeArguments: [coinType],\n\t\t\t\t\t\t\targuments: [\n\t\t\t\t\t\t\t\ttransactionData.addInput(\n\t\t\t\t\t\t\t\t\t'withdrawal',\n\t\t\t\t\t\t\t\t\tInputs.FundsWithdrawal({\n\t\t\t\t\t\t\t\t\t\treservation: {\n\t\t\t\t\t\t\t\t\t\t\t$kind: 'MaxAmountU64',\n\t\t\t\t\t\t\t\t\t\t\tMaxAmountU64: String(totalRequired),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\ttypeArg: { $kind: 'Balance', Balance: coinType },\n\t\t\t\t\t\t\t\t\t\twithdrawFrom: { $kind: 'Sender', Sender: true },\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t\tsources.push({ $kind: 'Result', Result: index + commands.length - 1 });\n\t\t\t\t} else if (type === 'gas') {\n\t\t\t\t\tsources.push({ $kind: 'GasCoin', GasCoin: true });\n\t\t\t\t} else {\n\t\t\t\t\tconst coins = coinsByType.get(type)!;\n\t\t\t\t\tconst loadedCoinBalance = coins.reduce((sum, c) => sum + BigInt(c.balance), 0n);\n\t\t\t\t\tconst abNeeded =\n\t\t\t\t\t\ttotalRequired > loadedCoinBalance ? totalRequired - loadedCoinBalance : 0n;\n\n\t\t\t\t\texactBalanceByType.set(type, loadedCoinBalance + abNeeded === totalRequired);\n\n\t\t\t\t\tfor (const coin of coins) {\n\t\t\t\t\t\tsources.push(\n\t\t\t\t\t\t\ttransactionData.addInput(\n\t\t\t\t\t\t\t\t'object',\n\t\t\t\t\t\t\t\tInputs.ObjectRef({\n\t\t\t\t\t\t\t\t\tobjectId: coin.objectId,\n\t\t\t\t\t\t\t\t\tdigest: coin.digest,\n\t\t\t\t\t\t\t\t\tversion: coin.version,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (abNeeded > 0n) {\n\t\t\t\t\t\tusedAddressBalance.add(type);\n\t\t\t\t\t\tcommands.push(\n\t\t\t\t\t\t\tTransactionCommands.MoveCall({\n\t\t\t\t\t\t\t\ttarget: '0x2::coin::redeem_funds',\n\t\t\t\t\t\t\t\ttypeArguments: [coinType],\n\t\t\t\t\t\t\t\targuments: [\n\t\t\t\t\t\t\t\t\ttransactionData.addInput(\n\t\t\t\t\t\t\t\t\t\t'withdrawal',\n\t\t\t\t\t\t\t\t\t\tInputs.FundsWithdrawal({\n\t\t\t\t\t\t\t\t\t\t\treservation: {\n\t\t\t\t\t\t\t\t\t\t\t\t$kind: 'MaxAmountU64',\n\t\t\t\t\t\t\t\t\t\t\t\tMaxAmountU64: String(abNeeded),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\ttypeArg: { $kind: 'Balance', Balance: coinType },\n\t\t\t\t\t\t\t\t\t\t\twithdrawFrom: { $kind: 'Sender', Sender: true },\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tsources.push({ $kind: 'Result', Result: index + commands.length - 1 });\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst baseCoin = sources[0];\n\t\t\t\tconst rest = sources.slice(1);\n\t\t\t\tfor (let i = 0; i < rest.length; i += 500) {\n\t\t\t\t\tcommands.push(TransactionCommands.MergeCoins(baseCoin, rest.slice(i, i + 500)));\n\t\t\t\t}\n\n\t\t\t\tmergedCoins.set(type, baseCoin);\n\n\t\t\t\t// Step 2: Combined SplitCoins for all intents of this type\n\t\t\t\tconst splitCmdIndex = index + commands.length;\n\t\t\t\tcommands.push(\n\t\t\t\t\tTransactionCommands.SplitCoins(\n\t\t\t\t\t\tbaseCoin,\n\t\t\t\t\t\tintents.map((i) =>\n\t\t\t\t\t\t\ttransactionData.addInput('pure', Inputs.Pure(bcs.u64().serialize(i.balance))),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t);\n\n\t\t\t\t// Build per-intent results, adding into_balance conversions for balance intents\n\t\t\t\tconst results: Argument[] = [];\n\t\t\t\tfor (let i = 0; i < intents.length; i++) {\n\t\t\t\t\tconst splitResult: Argument = {\n\t\t\t\t\t\t$kind: 'NestedResult',\n\t\t\t\t\t\tNestedResult: [splitCmdIndex, i],\n\t\t\t\t\t};\n\n\t\t\t\t\tif (intents[i].outputKind === 'balance') {\n\t\t\t\t\t\tcommands.push(\n\t\t\t\t\t\t\tTransactionCommands.MoveCall({\n\t\t\t\t\t\t\t\ttarget: '0x2::coin::into_balance',\n\t\t\t\t\t\t\t\ttypeArguments: [coinType],\n\t\t\t\t\t\t\t\targuments: [splitResult],\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tresults.push({\n\t\t\t\t\t\t\t$kind: 'NestedResult',\n\t\t\t\t\t\t\tNestedResult: [index + commands.length - 1, 0],\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresults.push(splitResult);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttypeState.set(type, { results, nextIntent: 0 });\n\t\t\t}\n\n\t\t\tconst state = typeState.get(type)!;\n\t\t\tintentResult = state.results[state.nextIntent++];\n\t\t}\n\n\t\ttransactionData.replaceCommand(\n\t\t\tindex,\n\t\t\tcommands,\n\t\t\tintentResult as { NestedResult: [number, number] },\n\t\t);\n\n\t\t// Advance past the replacement. When commands is empty (subsequent intents\n\t\t// of a combined split), the command was removed and the next command shifted\n\t\t// into this position — so we stay at the same index.\n\t\tindex += commands.length;\n\t}\n\n\t// Step 3: Remainder handling\n\tfor (const [type, mergedCoin] of mergedCoins) {\n\t\t// When gas type used GasCoin (not AB), leftover stays in the gas coin — no remainder needed.\n\t\tif (type === 'gas' && !usedAddressBalance.has(type)) continue;\n\n\t\tconst coinType = type === 'gas' ? SUI_TYPE : type;\n\t\tconst hasBalanceIntent = intentsByType.get(type)?.some((i) => i.outputKind === 'balance');\n\t\tconst sourcedFromAB = usedAddressBalance.has(type);\n\n\t\tif (hasBalanceIntent || sourcedFromAB) {\n\t\t\t// Sourced from AB or balance intents exist: send remainder back to sender's address balance.\n\t\t\t// coin::send_funds is gasless-eligible and handles zero amounts.\n\t\t\ttransactionData.commands.push(\n\t\t\t\tTransactionCommands.MoveCall({\n\t\t\t\t\ttarget: '0x2::coin::send_funds',\n\t\t\t\t\ttypeArguments: [coinType],\n\t\t\t\t\targuments: [\n\t\t\t\t\t\tmergedCoin,\n\t\t\t\t\t\ttransactionData.addInput(\n\t\t\t\t\t\t\t'pure',\n\t\t\t\t\t\t\tInputs.Pure(bcs.Address.serialize(transactionData.sender!)),\n\t\t\t\t\t\t),\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t);\n\t\t} else if (exactBalanceByType.get(type)) {\n\t\t\t// Coin-only with exact match: destroy the zero-value dust coin.\n\t\t\ttransactionData.commands.push(\n\t\t\t\tTransactionCommands.MoveCall({\n\t\t\t\t\ttarget: '0x2::coin::destroy_zero',\n\t\t\t\t\ttypeArguments: [coinType],\n\t\t\t\t\targuments: [mergedCoin],\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t\t// Coin-only with surplus: merged coin stays with sender as an owned object\n\t}\n\n\treturn next();\n}\n\nasync function getCoinsAndBalanceOfType({\n\tcoinType,\n\tbalance,\n\tclient,\n\towner,\n\tusedIds,\n}: {\n\tcoinType: string;\n\tbalance: bigint;\n\tclient: ClientWithCoreApi;\n\towner: string;\n\tusedIds: Set<string>;\n}): Promise<{\n\tcoins: SuiClientTypes.Coin[];\n\tbalance: bigint;\n\taddressBalance: bigint;\n\tcoinBalance: bigint;\n}> {\n\tlet remainingBalance = balance;\n\tconst coins: SuiClientTypes.Coin[] = [];\n\tconst balanceRequest = client.core.getBalance({ owner, coinType }).then(({ balance }) => {\n\t\tremainingBalance -= BigInt(balance.addressBalance);\n\n\t\treturn balance;\n\t});\n\n\tconst [allCoins, balanceResponse] = await Promise.all([loadMoreCoins(), balanceRequest]);\n\n\tif (BigInt(balanceResponse.balance) < balance) {\n\t\tthrow new Error(\n\t\t\t`Insufficient balance of ${coinType} for owner ${owner}. Required: ${balance}, Available: ${\n\t\t\t\tbalance - remainingBalance\n\t\t\t}`,\n\t\t);\n\t}\n\n\treturn {\n\t\tcoins: allCoins,\n\t\tbalance: BigInt(balanceResponse.coinBalance),\n\t\taddressBalance: BigInt(balanceResponse.addressBalance),\n\t\tcoinBalance: BigInt(balanceResponse.coinBalance),\n\t};\n\n\tasync function loadMoreCoins(cursor: string | null = null): Promise<SuiClientTypes.Coin[]> {\n\t\tconst {\n\t\t\tobjects,\n\t\t\thasNextPage,\n\t\t\tcursor: nextCursor,\n\t\t} = await client.core.listCoins({\n\t\t\towner,\n\t\t\tcoinType,\n\t\t\tcursor,\n\t\t});\n\n\t\tawait balanceRequest;\n\n\t\t// Always load all coins from the page (except already-used ones).\n\t\t// This merges all available coins rather than leaving dust.\n\t\tfor (const coin of objects) {\n\t\t\tif (usedIds.has(coin.objectId)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcoins.push(coin);\n\t\t\tremainingBalance -= BigInt(coin.balance);\n\t\t}\n\n\t\t// Only paginate if loaded coins + AB are still insufficient\n\t\tif (remainingBalance > 0n && hasNextPage) {\n\t\t\treturn loadMoreCoins(nextCursor);\n\t\t}\n\n\t\treturn coins;\n\t}\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { EnumInputShape } from '@mysten/bcs';\nimport type { GenericSchema, InferInput, InferOutput } from 'valibot';\nimport {\n\tarray,\n\tboolean,\n\tinteger,\n\tliteral,\n\tnullable,\n\tnullish,\n\tnumber,\n\tobject,\n\toptional,\n\tpipe,\n\trecord,\n\tstring,\n\ttuple,\n\tunion,\n\tunknown,\n} from 'valibot';\n\nimport {\n\tBCSBytes,\n\tFundsWithdrawalArgSchema,\n\tJsonU64,\n\tObjectID,\n\tObjectRefSchema,\n\tSuiAddress,\n\tValidDuringSchema,\n} from './internal.js';\nimport type { Simplify } from '@mysten/utils';\n\nfunction enumUnion<T extends Record<string, GenericSchema<any>>>(options: T) {\n\treturn union(\n\t\tObject.entries(options).map(([key, value]) => object({ [key]: value })),\n\t) as GenericSchema<\n\t\tEnumInputShape<\n\t\t\tSimplify<{\n\t\t\t\t[K in keyof T]: InferInput<T[K]>;\n\t\t\t}>\n\t\t>\n\t>;\n}\n\n// https://github.com/MystenLabs/sui/blob/df41d5fa8127634ff4285671a01ead00e519f806/crates/sui-types/src/transaction.rs#L690-L702\nconst Argument = enumUnion({\n\tGasCoin: literal(true),\n\tInput: pipe(number(), integer()),\n\tResult: pipe(number(), integer()),\n\tNestedResult: tuple([pipe(number(), integer()), pipe(number(), integer())]),\n});\n\n// https://github.com/MystenLabs/sui/blob/df41d5fa8127634ff4285671a01ead00e519f806/crates/sui-types/src/transaction.rs#L1387-L1392\nconst GasData = object({\n\tbudget: nullable(JsonU64),\n\tprice: nullable(JsonU64),\n\towner: nullable(SuiAddress),\n\tpayment: nullable(array(ObjectRefSchema)),\n});\n\n// https://github.com/MystenLabs/sui/blob/df41d5fa8127634ff4285671a01ead00e519f806/crates/sui-types/src/transaction.rs#L707-L718\nconst ProgrammableMoveCall = object({\n\tpackage: ObjectID,\n\tmodule: string(),\n\tfunction: string(),\n\t// snake case in rust\n\ttypeArguments: array(string()),\n\targuments: array(Argument),\n});\n\nconst $Intent = object({\n\tname: string(),\n\tinputs: record(string(), union([Argument, array(Argument)])),\n\tdata: record(string(), unknown()),\n});\n\n// https://github.com/MystenLabs/sui/blob/df41d5fa8127634ff4285671a01ead00e519f806/crates/sui-types/src/transaction.rs#L657-L685\nconst Command = enumUnion({\n\tMoveCall: ProgrammableMoveCall,\n\tTransferObjects: object({\n\t\tobjects: array(Argument),\n\t\taddress: Argument,\n\t}),\n\tSplitCoins: object({\n\t\tcoin: Argument,\n\t\tamounts: array(Argument),\n\t}),\n\tMergeCoins: object({\n\t\tdestination: Argument,\n\t\tsources: array(Argument),\n\t}),\n\tPublish: object({\n\t\tmodules: array(BCSBytes),\n\t\tdependencies: array(ObjectID),\n\t}),\n\tMakeMoveVec: object({\n\t\ttype: nullable(string()),\n\t\telements: array(Argument),\n\t}),\n\tUpgrade: object({\n\t\tmodules: array(BCSBytes),\n\t\tdependencies: array(ObjectID),\n\t\tpackage: ObjectID,\n\t\tticket: Argument,\n\t}),\n\t$Intent,\n});\n\n// https://github.com/MystenLabs/sui/blob/df41d5fa8127634ff4285671a01ead00e519f806/crates/sui-types/src/transaction.rs#L102-L114\nconst ObjectArg = enumUnion({\n\tImmOrOwnedObject: ObjectRefSchema,\n\tSharedObject: object({\n\t\tobjectId: ObjectID,\n\t\t// snake case in rust\n\t\tinitialSharedVersion: JsonU64,\n\t\tmutable: boolean(),\n\t}),\n\tReceiving: ObjectRefSchema,\n});\n\n// https://github.com/MystenLabs/sui/blob/df41d5fa8127634ff4285671a01ead00e519f806/crates/sui-types/src/transaction.rs#L75-L80\nconst CallArg = enumUnion({\n\tObject: ObjectArg,\n\tPure: object({\n\t\tbytes: BCSBytes,\n\t}),\n\tUnresolvedPure: object({\n\t\tvalue: unknown(),\n\t}),\n\tUnresolvedObject: object({\n\t\tobjectId: ObjectID,\n\t\tversion: optional(nullable(JsonU64)),\n\t\tdigest: optional(nullable(string())),\n\t\tinitialSharedVersion: optional(nullable(JsonU64)),\n\t\tmutable: optional(nullable(boolean())),\n\t}),\n\tFundsWithdrawal: FundsWithdrawalArgSchema,\n});\n\nconst TransactionExpiration = enumUnion({\n\tNone: literal(true),\n\tEpoch: JsonU64,\n\tValidDuring: ValidDuringSchema,\n});\n\nexport const SerializedTransactionDataV2Schema = object({\n\tversion: literal(2),\n\tsender: nullish(SuiAddress),\n\texpiration: nullish(TransactionExpiration),\n\tgasData: GasData,\n\tinputs: array(CallArg),\n\tcommands: array(Command),\n\tdigest: optional(nullable(string())),\n});\n\nexport type SerializedTransactionDataV2 = InferOutput<typeof SerializedTransactionDataV2Schema>;\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { fromBase58, fromHex, toBase58, toHex } from '@mysten/bcs';\nimport { parse } from 'valibot';\n\nimport { bcs, TypeTagSerializer } from '../bcs/index.js';\nimport { ObjectRefSchema } from '../transactions/data/internal.js';\nimport { deriveDynamicFieldID } from './dynamic-fields.js';\nimport { normalizeSuiAddress } from './index.js';\n\nconst SUI_ACCUMULATOR_ROOT_OBJECT_ID = normalizeSuiAddress('0xacc');\nconst ACCUMULATOR_KEY_TYPE_TAG = TypeTagSerializer.parseFromStr(\n\t'0x2::accumulator::Key<0x2::balance::Balance<0x2::sui::SUI>>',\n);\n\nexport const COIN_RESERVATION_MAGIC = new Uint8Array([\n\t0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac,\n\t0xac, 0xac, 0xac, 0xac,\n]);\n\nexport function isCoinReservationDigest(digestBase58: string): boolean {\n\tconst digestBytes = fromBase58(digestBase58);\n\tconst last20Bytes = digestBytes.slice(12, 32);\n\treturn last20Bytes.every((byte, i) => byte === COIN_RESERVATION_MAGIC[i]);\n}\n\nexport function parseCoinReservationBalance(digestBase58: string): bigint {\n\tconst digestBytes = fromBase58(digestBase58);\n\tconst view = new DataView(digestBytes.buffer, digestBytes.byteOffset, digestBytes.byteLength);\n\treturn view.getBigUint64(0, true);\n}\n\n/**\n * Derives the accumulator dynamic field object ID for the given owner,\n * then XORs it with the chain identifier bytes to produce the objectId\n * for the coin reservation ref.\n */\nfunction deriveReservationObjectId(owner: string, chainIdentifier: string): string {\n\tconst keyBcs = bcs.Address.serialize(owner).toBytes();\n\tconst accumulatorId = deriveDynamicFieldID(\n\t\tSUI_ACCUMULATOR_ROOT_OBJECT_ID,\n\t\tACCUMULATOR_KEY_TYPE_TAG,\n\t\tkeyBcs,\n\t);\n\n\t// XOR the accumulator object ID bytes with the chain identifier bytes\n\tconst accBytes = fromHex(accumulatorId.slice(2));\n\tconst chainBytes = fromBase58(chainIdentifier);\n\tif (chainBytes.length !== 32) {\n\t\tthrow new Error(`Invalid chain identifier length: expected 32 bytes, got ${chainBytes.length}`);\n\t}\n\tconst xored = new Uint8Array(32);\n\tfor (let i = 0; i < 32; i++) {\n\t\txored[i] = accBytes[i] ^ chainBytes[i];\n\t}\n\treturn `0x${toHex(xored)}`;\n}\n\nexport function createCoinReservationRef(\n\treservedBalance: bigint,\n\towner: string,\n\tchainIdentifier: string,\n\tepoch: string,\n) {\n\tconst digestBytes = new Uint8Array(32);\n\tconst view = new DataView(digestBytes.buffer);\n\t// Bytes 0-7: reserved balance as LE u64\n\tview.setBigUint64(0, reservedBalance, true);\n\t// Bytes 8-11: epoch_id as LE u32\n\tconst epochNum = Number(epoch);\n\tif (!Number.isSafeInteger(epochNum) || epochNum < 0 || epochNum > 0xffffffff) {\n\t\tthrow new Error(`Epoch ${epoch} out of u32 range for coin reservation digest`);\n\t}\n\tview.setUint32(8, epochNum, true);\n\t// Bytes 12-31: magic bytes\n\tdigestBytes.set(COIN_RESERVATION_MAGIC, 12);\n\n\treturn parse(ObjectRefSchema, {\n\t\tobjectId: deriveReservationObjectId(owner, chainIdentifier),\n\t\tversion: '0',\n\t\tdigest: toBase58(digestBytes),\n\t});\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n\tnormalizeSuiAddress,\n\tnormalizeSuiObjectId,\n\tnormalizeStructTag,\n\tSUI_TYPE_ARG,\n} from '../utils/index.js';\nimport { createCoinReservationRef } from '../utils/coin-reservation.js';\nimport type { ClientWithCoreApi } from './core.js';\nimport type { CallArg, Command } from '../transactions/data/internal.js';\nimport type { SuiClientTypes } from './types.js';\nimport { SimulationError } from './errors.js';\nimport { Inputs } from '../transactions/Inputs.js';\nimport { getPureBcsSchema, isTxContext } from '../transactions/serializer.js';\nimport type { TransactionDataBuilder } from '../transactions/TransactionData.js';\nimport { chunk } from '@mysten/utils';\nimport type { BuildTransactionOptions } from '../transactions/index.js';\n\n// The maximum objects that can be fetched at once using multiGetObjects.\nconst MAX_OBJECTS_PER_FETCH = 50;\n\n// An amount of gas (in gas units) that is added to transactions as an overhead to ensure transactions do not fail.\nconst GAS_SAFE_OVERHEAD = 1000n;\nconst MAX_GAS = 50_000_000_000;\n\n/** Compute a gas budget from gasUsed effects data. */\nexport function computeGasBudget(\n\tgasUsed: { computationCost: string; storageCost: string; storageRebate: string },\n\tgasPrice: bigint | string = 1n,\n): string {\n\tconst safeOverhead = GAS_SAFE_OVERHEAD * BigInt(gasPrice);\n\tconst baseComputationCostWithOverhead = BigInt(gasUsed.computationCost) + safeOverhead;\n\tconst gasBudget =\n\t\tbaseComputationCostWithOverhead + BigInt(gasUsed.storageCost) - BigInt(gasUsed.storageRebate);\n\treturn String(\n\t\tgasBudget > baseComputationCostWithOverhead ? gasBudget : baseComputationCostWithOverhead,\n\t);\n}\n\nfunction getClient(options: BuildTransactionOptions): ClientWithCoreApi {\n\tif (!options.client) {\n\t\tthrow new Error(\n\t\t\t`No sui client passed to Transaction#build, but transaction data was not sufficient to build offline.`,\n\t\t);\n\t}\n\treturn options.client;\n}\n\nexport async function coreClientResolveTransactionPlugin(\n\ttransactionData: TransactionDataBuilder,\n\toptions: BuildTransactionOptions,\n\tnext: () => Promise<void>,\n) {\n\tconst client = getClient(options);\n\n\tconst needsGasPrice = !options.onlyTransactionKind && !transactionData.gasData.price;\n\tconst needsPayment = !options.onlyTransactionKind && !transactionData.gasData.payment;\n\tconst gasPayer = transactionData.gasData.owner ?? transactionData.sender;\n\n\tlet usesGasCoin = false;\n\tlet withdrawals = 0n;\n\n\ttransactionData.mapArguments((arg) => {\n\t\tif (arg.$kind === 'GasCoin') usesGasCoin = true;\n\t\treturn arg;\n\t});\n\n\tconst normalizedGasPayer = gasPayer ? normalizeSuiAddress(gasPayer) : null;\n\tfor (const input of transactionData.inputs) {\n\t\tif (input.$kind !== 'FundsWithdrawal' || !normalizedGasPayer) continue;\n\t\tif (normalizeStructTag(input.FundsWithdrawal.typeArg.Balance) !== SUI_TYPE_ARG) continue;\n\n\t\tconst withdrawalOwner = input.FundsWithdrawal.withdrawFrom.Sender\n\t\t\t? transactionData.sender\n\t\t\t: gasPayer;\n\t\tif (\n\t\t\twithdrawalOwner &&\n\t\t\tnormalizeSuiAddress(withdrawalOwner) === normalizedGasPayer &&\n\t\t\tinput.FundsWithdrawal.reservation.$kind === 'MaxAmountU64'\n\t\t) {\n\t\t\twithdrawals += BigInt(input.FundsWithdrawal.reservation.MaxAmountU64);\n\t\t}\n\t}\n\n\t// `setGasBudget` simulates with `payment: []` whenever it has to compute a\n\t// budget (i.e. one wasn't preset). The validator's replay-protection check\n\t// then requires either a `ValidDuring` expiration or at least one\n\t// \"address-owned\" input — an `ImmOrOwnedMoveObject` whose owner is\n\t// `AddressOwner`, which we can't tell from `Immutable` without owner info we\n\t// don't track. Provide a simulate-only `ValidDuring` whenever we'll actually\n\t// simulate and one isn't user-set.\n\tconst needsSimulateExpiration =\n\t\t!options.onlyTransactionKind && !transactionData.expiration && !transactionData.gasData.budget;\n\tconst needsSystemState =\n\t\tneedsGasPrice || (needsPayment && usesGasCoin) || needsSimulateExpiration;\n\tconst needsChainId = (needsPayment && usesGasCoin) || needsSimulateExpiration;\n\tconst [, systemStateResult, balanceResult, coinsResult, chainIdResult] = await Promise.all([\n\t\tnormalizeInputs(transactionData, client),\n\t\tneedsSystemState ? client.core.getCurrentSystemState() : null,\n\t\tneedsPayment && gasPayer ? client.core.getBalance({ owner: gasPayer }) : null,\n\t\tneedsPayment && gasPayer\n\t\t\t? client.core.listCoins({ owner: gasPayer, coinType: SUI_TYPE_ARG })\n\t\t\t: null,\n\t\tneedsChainId ? client.core.getChainIdentifier() : null,\n\t]);\n\n\tawait resolveObjectReferences(transactionData, client);\n\n\tif (!options.onlyTransactionKind) {\n\t\tconst systemState = systemStateResult?.systemState ?? null;\n\t\tconst chainIdentifier = chainIdResult?.chainIdentifier ?? null;\n\n\t\tif (systemState && !transactionData.gasData.price) {\n\t\t\ttransactionData.gasData.price = systemState.referenceGasPrice;\n\t\t}\n\n\t\tconst simulateExpiration =\n\t\t\tneedsSimulateExpiration && systemState && chainIdentifier\n\t\t\t\t? buildValidDuringExpiration(systemState, chainIdentifier)\n\t\t\t\t: undefined;\n\n\t\tawait setGasBudget(transactionData, client, simulateExpiration);\n\n\t\tif (needsPayment) {\n\t\t\tif (!balanceResult || !coinsResult) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Could not resolve gas payment: a gas owner or sender must be set to fetch balance and coins.',\n\t\t\t\t);\n\t\t\t}\n\t\t\tsetGasPayment({\n\t\t\t\ttransactionData,\n\t\t\t\tbalance: balanceResult,\n\t\t\t\tcoins: coinsResult,\n\t\t\t\tusesGasCoin,\n\t\t\t\twithdrawals,\n\t\t\t\tgasPayer: gasPayer!,\n\t\t\t\tchainIdentifier,\n\t\t\t\tepoch: systemState?.epoch ?? null,\n\t\t\t});\n\t\t}\n\n\t\tif (!transactionData.expiration && transactionData.gasData.payment?.length === 0) {\n\t\t\tawait setExpiration(transactionData, client, systemState, chainIdentifier);\n\t\t}\n\t}\n\n\treturn await next();\n}\n\nasync function setGasBudget(\n\ttransactionData: TransactionDataBuilder,\n\tclient: ClientWithCoreApi,\n\tsimulateExpiration?: ValidDuringExpiration,\n) {\n\tif (transactionData.gasData.budget) {\n\t\treturn;\n\t}\n\n\tconst simulateResult = await client.core.simulateTransaction({\n\t\ttransaction: transactionData.build({\n\t\t\toverrides: {\n\t\t\t\tgasData: {\n\t\t\t\t\tbudget: String(MAX_GAS),\n\t\t\t\t\tpayment: [],\n\t\t\t\t},\n\t\t\t\t...(simulateExpiration && { expiration: simulateExpiration }),\n\t\t\t},\n\t\t}),\n\t\tinclude: { effects: true },\n\t});\n\n\tif (simulateResult.$kind === 'FailedTransaction') {\n\t\tconst executionError = simulateResult.FailedTransaction.status.error ?? undefined;\n\t\tconst errorMessage = executionError?.message ?? 'Unknown error';\n\t\tthrow new SimulationError(`Transaction resolution failed: ${errorMessage}`, {\n\t\t\tcause: simulateResult,\n\t\t\texecutionError,\n\t\t});\n\t}\n\n\ttransactionData.gasData.budget = computeGasBudget(\n\t\tsimulateResult.Transaction.effects!.gasUsed,\n\t\ttransactionData.gasData.price ? String(transactionData.gasData.price) : undefined,\n\t);\n}\n\nfunction setGasPayment({\n\ttransactionData,\n\tbalance,\n\tcoins,\n\tusesGasCoin,\n\twithdrawals,\n\tgasPayer,\n\tchainIdentifier,\n\tepoch,\n}: {\n\ttransactionData: TransactionDataBuilder;\n\tbalance: SuiClientTypes.GetBalanceResponse;\n\tcoins: SuiClientTypes.ListCoinsResponse;\n\tusesGasCoin: boolean;\n\twithdrawals: bigint;\n\tgasPayer: string;\n\tchainIdentifier: string | null;\n\tepoch: string | null;\n}) {\n\tconst budget = BigInt(transactionData.gasData.budget!);\n\tconst addressBalance = BigInt(balance.balance.addressBalance);\n\n\tif (budget === 0n || (!usesGasCoin && addressBalance >= budget + withdrawals)) {\n\t\ttransactionData.gasData.payment = [];\n\t\treturn;\n\t}\n\n\tconst filteredCoins = coins.objects.filter((coin) => {\n\t\tconst matchingInput = transactionData.inputs.find((input) => {\n\t\t\tif (input.Object?.ImmOrOwnedObject) {\n\t\t\t\treturn coin.objectId === input.Object.ImmOrOwnedObject.objectId;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\n\t\treturn !matchingInput;\n\t});\n\n\tconst paymentCoins = filteredCoins.map((coin) => ({\n\t\tobjectId: coin.objectId,\n\t\tdigest: coin.digest,\n\t\tversion: coin.version,\n\t}));\n\n\tconst reservationAmount = addressBalance - withdrawals;\n\n\tif (usesGasCoin && reservationAmount > 0n && chainIdentifier && epoch) {\n\t\ttransactionData.gasData.payment = [\n\t\t\tcreateCoinReservationRef(reservationAmount, gasPayer, chainIdentifier, epoch),\n\t\t\t...paymentCoins,\n\t\t];\n\t} else if (!filteredCoins.length) {\n\t\tthrow new Error('No valid gas coins found for the transaction.');\n\t} else {\n\t\ttransactionData.gasData.payment = paymentCoins;\n\t}\n}\n\ninterface SystemStateData {\n\tepoch: string;\n\treferenceGasPrice: string;\n}\n\nasync function setExpiration(\n\ttransactionData: TransactionDataBuilder,\n\tclient: ClientWithCoreApi,\n\tsystemState: SystemStateData | null,\n\texistingChainIdentifier: string | null = null,\n) {\n\tconst [chainIdentifier, resolvedSystemState] = await Promise.all([\n\t\texistingChainIdentifier ?? client.core.getChainIdentifier().then((r) => r.chainIdentifier),\n\t\tsystemState ?? client.core.getCurrentSystemState().then((r) => r.systemState),\n\t]);\n\ttransactionData.expiration = buildValidDuringExpiration(resolvedSystemState, chainIdentifier);\n}\n\ntype ValidDuringExpiration = {\n\t$kind: 'ValidDuring';\n\tValidDuring: {\n\t\tminEpoch: string;\n\t\tmaxEpoch: string;\n\t\tminTimestamp: null;\n\t\tmaxTimestamp: null;\n\t\tchain: string;\n\t\tnonce: number;\n\t};\n};\n\nfunction buildValidDuringExpiration(\n\tsystemState: SystemStateData,\n\tchainIdentifier: string,\n): ValidDuringExpiration {\n\tconst currentEpoch = BigInt(systemState.epoch);\n\treturn {\n\t\t$kind: 'ValidDuring',\n\t\tValidDuring: {\n\t\t\tminEpoch: String(currentEpoch),\n\t\t\tmaxEpoch: String(currentEpoch + 1n),\n\t\t\tminTimestamp: null,\n\t\t\tmaxTimestamp: null,\n\t\t\tchain: chainIdentifier,\n\t\t\tnonce: (Math.random() * 0x100000000) >>> 0,\n\t\t},\n\t};\n}\n\nasync function resolveObjectReferences(\n\ttransactionData: TransactionDataBuilder,\n\tclient: ClientWithCoreApi,\n) {\n\t// Keep track of the object references that will need to be resolved at the end of the transaction.\n\t// We keep the input by-reference to avoid needing to re-resolve it:\n\tconst objectsToResolve = transactionData.inputs.filter((input) => {\n\t\treturn (\n\t\t\tinput.UnresolvedObject &&\n\t\t\t!(input.UnresolvedObject.version || input.UnresolvedObject?.initialSharedVersion)\n\t\t);\n\t}) as Extract<CallArg, { UnresolvedObject: unknown }>[];\n\n\tconst dedupedIds = [\n\t\t...new Set(\n\t\t\tobjectsToResolve.map((input) => normalizeSuiObjectId(input.UnresolvedObject.objectId)),\n\t\t),\n\t];\n\n\tconst objectChunks = dedupedIds.length ? chunk(dedupedIds, MAX_OBJECTS_PER_FETCH) : [];\n\tconst resolved = (\n\t\tawait Promise.all(\n\t\t\tobjectChunks.map((chunkIds) =>\n\t\t\t\tclient.core.getObjects({\n\t\t\t\t\tobjectIds: chunkIds,\n\t\t\t\t}),\n\t\t\t),\n\t\t)\n\t).flatMap((result) => result.objects);\n\n\tconst responsesById = new Map(\n\t\tdedupedIds.map((id, index) => {\n\t\t\treturn [id, resolved[index]];\n\t\t}),\n\t);\n\n\tconst invalidObjects = Array.from(responsesById)\n\t\t.filter(([_, obj]) => obj instanceof Error)\n\t\t.map(([_, obj]) => (obj as Error).message);\n\n\tif (invalidObjects.length) {\n\t\tthrow new Error(`The following input objects are invalid: ${invalidObjects.join(', ')}`);\n\t}\n\n\tconst objects = resolved.map((object) => {\n\t\tif (object instanceof Error) {\n\t\t\tthrow new Error(`Failed to fetch object: ${object.message}`);\n\t\t}\n\t\tconst owner = object.owner;\n\t\tconst initialSharedVersion =\n\t\t\towner && typeof owner === 'object'\n\t\t\t\t? owner.$kind === 'Shared'\n\t\t\t\t\t? owner.Shared.initialSharedVersion\n\t\t\t\t\t: owner.$kind === 'ConsensusAddressOwner'\n\t\t\t\t\t\t? owner.ConsensusAddressOwner.startVersion\n\t\t\t\t\t\t: null\n\t\t\t\t: null;\n\n\t\treturn {\n\t\t\tobjectId: object.objectId,\n\t\t\tdigest: object.digest,\n\t\t\tversion: object.version,\n\t\t\tinitialSharedVersion,\n\t\t};\n\t});\n\n\tconst objectsById = new Map(\n\t\tdedupedIds.map((id, index) => {\n\t\t\treturn [id, objects[index]];\n\t\t}),\n\t);\n\n\tfor (const [index, input] of transactionData.inputs.entries()) {\n\t\tif (!input.UnresolvedObject) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet updated: CallArg | undefined;\n\t\tconst id = normalizeSuiAddress(input.UnresolvedObject.objectId);\n\t\tconst object = objectsById.get(id);\n\n\t\tif (input.UnresolvedObject.initialSharedVersion ?? object?.initialSharedVersion) {\n\t\t\tupdated = Inputs.SharedObjectRef({\n\t\t\t\tobjectId: id,\n\t\t\t\tinitialSharedVersion:\n\t\t\t\t\tinput.UnresolvedObject.initialSharedVersion || object?.initialSharedVersion!,\n\t\t\t\tmutable: input.UnresolvedObject.mutable || isUsedAsMutable(transactionData, index),\n\t\t\t});\n\t\t} else if (isUsedAsReceiving(transactionData, index)) {\n\t\t\tupdated = Inputs.ReceivingRef(\n\t\t\t\t{\n\t\t\t\t\tobjectId: id,\n\t\t\t\t\tdigest: input.UnresolvedObject.digest ?? object?.digest!,\n\t\t\t\t\tversion: input.UnresolvedObject.version ?? object?.version!,\n\t\t\t\t}!,\n\t\t\t);\n\t\t}\n\n\t\ttransactionData.inputs[transactionData.inputs.indexOf(input)] =\n\t\t\tupdated ??\n\t\t\tInputs.ObjectRef({\n\t\t\t\tobjectId: id,\n\t\t\t\tdigest: input.UnresolvedObject.digest ?? object?.digest!,\n\t\t\t\tversion: input.UnresolvedObject.version ?? object?.version!,\n\t\t\t});\n\t}\n}\n\nasync function normalizeInputs(transactionData: TransactionDataBuilder, client: ClientWithCoreApi) {\n\tconst { inputs, commands } = transactionData;\n\tconst moveCallsToResolve: Extract<Command, { MoveCall: unknown }>['MoveCall'][] = [];\n\tconst moveFunctionsToResolve = new Set<string>();\n\n\tcommands.forEach((command) => {\n\t\t// Special case move call:\n\t\tif (command.MoveCall) {\n\t\t\t// Determine if any of the arguments require encoding.\n\t\t\t// - If they don't, then this is good to go.\n\t\t\t// - If they do, then we need to fetch the normalized move module.\n\n\t\t\t// If we already know the argument types, we don't need to resolve them again\n\t\t\tif (command.MoveCall._argumentTypes) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst inputs = command.MoveCall.arguments.map((arg) => {\n\t\t\t\tif (arg.$kind === 'Input') {\n\t\t\t\t\treturn transactionData.inputs[arg.Input];\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t});\n\t\t\tconst needsResolution = inputs.some(\n\t\t\t\t(input) =>\n\t\t\t\t\tinput?.UnresolvedPure ||\n\t\t\t\t\t(input?.UnresolvedObject && typeof input?.UnresolvedObject.mutable !== 'boolean'),\n\t\t\t);\n\n\t\t\tif (needsResolution) {\n\t\t\t\tconst functionName = `${command.MoveCall.package}::${command.MoveCall.module}::${command.MoveCall.function}`;\n\t\t\t\tmoveFunctionsToResolve.add(functionName);\n\t\t\t\tmoveCallsToResolve.push(command.MoveCall);\n\t\t\t}\n\t\t}\n\t});\n\n\tconst moveFunctionParameters = new Map<string, SuiClientTypes.OpenSignature[]>();\n\tif (moveFunctionsToResolve.size > 0) {\n\t\tawait Promise.all(\n\t\t\t[...moveFunctionsToResolve].map(async (functionName) => {\n\t\t\t\tconst [packageId, moduleName, name] = functionName.split('::');\n\t\t\t\tconst { function: def } = await client.core.getMoveFunction({\n\t\t\t\t\tpackageId,\n\t\t\t\t\tmoduleName,\n\t\t\t\t\tname,\n\t\t\t\t});\n\n\t\t\t\tmoveFunctionParameters.set(functionName, def.parameters);\n\t\t\t}),\n\t\t);\n\t}\n\n\tif (moveCallsToResolve.length) {\n\t\tawait Promise.all(\n\t\t\tmoveCallsToResolve.map(async (moveCall) => {\n\t\t\t\tconst parameters = moveFunctionParameters.get(\n\t\t\t\t\t`${moveCall.package}::${moveCall.module}::${moveCall.function}`,\n\t\t\t\t);\n\n\t\t\t\tif (!parameters) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Entry functions can have a mutable reference to an instance of the TxContext\n\t\t\t\t// struct defined in the TxContext module as the last parameter. The caller of\n\t\t\t\t// the function does not need to pass it in as an argument.\n\t\t\t\tconst hasTxContext = parameters.length > 0 && isTxContext(parameters.at(-1)!);\n\t\t\t\tconst params = hasTxContext ? parameters.slice(0, parameters.length - 1) : parameters;\n\n\t\t\t\tmoveCall._argumentTypes = params;\n\t\t\t}),\n\t\t);\n\t}\n\n\tcommands.forEach((command) => {\n\t\tif (!command.MoveCall) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst moveCall = command.MoveCall;\n\t\tconst fnName = `${moveCall.package}::${moveCall.module}::${moveCall.function}`;\n\t\tconst params = moveCall._argumentTypes;\n\n\t\tif (!params) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (params.length !== command.MoveCall.arguments.length) {\n\t\t\tthrow new Error(`Incorrect number of arguments for ${fnName}`);\n\t\t}\n\n\t\tparams.forEach((param, i) => {\n\t\t\tconst arg = moveCall.arguments[i];\n\t\t\tif (arg.$kind !== 'Input') return;\n\t\t\tconst input = inputs[arg.Input];\n\n\t\t\t// Skip if the input is already resolved\n\t\t\tif (!input.UnresolvedPure && !input.UnresolvedObject) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst inputValue = input.UnresolvedPure?.value ?? input.UnresolvedObject?.objectId!;\n\n\t\t\tconst schema = getPureBcsSchema(param.body);\n\t\t\tif (schema) {\n\t\t\t\targ.type = 'pure';\n\t\t\t\tinputs[inputs.indexOf(input)] = Inputs.Pure(schema.serialize(inputValue));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (typeof inputValue !== 'string') {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Expect the argument to be an object id string, got ${JSON.stringify(\n\t\t\t\t\t\tinputValue,\n\t\t\t\t\t\tnull,\n\t\t\t\t\t\t2,\n\t\t\t\t\t)}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\targ.type = 'object';\n\t\t\tconst unresolvedObject: typeof input = input.UnresolvedPure\n\t\t\t\t? {\n\t\t\t\t\t\t$kind: 'UnresolvedObject',\n\t\t\t\t\t\tUnresolvedObject: {\n\t\t\t\t\t\t\tobjectId: inputValue,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: input;\n\n\t\t\tinputs[arg.Input] = unresolvedObject;\n\t\t});\n\t});\n}\n\nfunction isUsedAsMutable(transactionData: TransactionDataBuilder, index: number) {\n\tlet usedAsMutable = false;\n\n\ttransactionData.getInputUses(index, (arg, tx) => {\n\t\tif (tx.MoveCall && tx.MoveCall._argumentTypes) {\n\t\t\tconst argIndex = tx.MoveCall.arguments.indexOf(arg);\n\t\t\tusedAsMutable =\n\t\t\t\ttx.MoveCall._argumentTypes[argIndex].reference !== 'immutable' || usedAsMutable;\n\t\t}\n\n\t\tif (\n\t\t\ttx.$kind === 'MakeMoveVec' ||\n\t\t\ttx.$kind === 'MergeCoins' ||\n\t\t\ttx.$kind === 'SplitCoins' ||\n\t\t\ttx.$kind === 'TransferObjects'\n\t\t) {\n\t\t\tusedAsMutable = true;\n\t\t}\n\t});\n\n\treturn usedAsMutable;\n}\n\nfunction isUsedAsReceiving(transactionData: TransactionDataBuilder, index: number) {\n\tlet usedAsReceiving = false;\n\n\ttransactionData.getInputUses(index, (arg, tx) => {\n\t\tif (tx.MoveCall && tx.MoveCall._argumentTypes) {\n\t\t\tconst argIndex = tx.MoveCall.arguments.indexOf(arg);\n\t\t\tusedAsReceiving = isReceivingType(tx.MoveCall._argumentTypes[argIndex]) || usedAsReceiving;\n\t\t}\n\t});\n\n\treturn usedAsReceiving;\n}\n\nconst RECEIVING_TYPE =\n\t'0x0000000000000000000000000000000000000000000000000000000000000002::transfer::Receiving';\n\nfunction isReceivingType(type: SuiClientTypes.OpenSignature): boolean {\n\tif (type.body.$kind !== 'datatype') {\n\t\treturn false;\n\t}\n\n\treturn type.body.datatype.typeName === RECEIVING_TYPE;\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { Argument } from './data/internal.js';\n\nimport type { ClientWithCoreApi } from '../client/index.js';\nimport type { TransactionDataBuilder } from './TransactionData.js';\nimport type { BcsType } from '@mysten/bcs';\nimport { Inputs } from './Inputs.js';\nimport { bcs } from '../bcs/index.js';\nimport { coreClientResolveTransactionPlugin } from '../client/core-resolver.js';\n\nexport interface BuildTransactionOptions {\n\tclient?: ClientWithCoreApi;\n\tonlyTransactionKind?: boolean;\n}\n\nexport interface SerializeTransactionOptions extends BuildTransactionOptions {\n\tsupportedIntents?: string[];\n}\n\nexport type TransactionPlugin = (\n\ttransactionData: TransactionDataBuilder,\n\toptions: BuildTransactionOptions,\n\tnext: () => Promise<void>,\n) => Promise<void>;\n\nexport function needsTransactionResolution(\n\tdata: TransactionDataBuilder,\n\toptions: BuildTransactionOptions,\n): boolean {\n\tif (\n\t\tdata.inputs.some((input) => {\n\t\t\treturn input.UnresolvedObject || input.UnresolvedPure;\n\t\t})\n\t) {\n\t\treturn true;\n\t}\n\n\tif (!options.onlyTransactionKind) {\n\t\tif (!data.gasData.price || !data.gasData.budget || !data.gasData.payment) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (data.gasData.payment.length === 0 && !data.expiration) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\nexport async function resolveTransactionPlugin(\n\ttransactionData: TransactionDataBuilder,\n\toptions: BuildTransactionOptions,\n\tnext: () => Promise<void>,\n) {\n\tnormalizeRawArguments(transactionData);\n\tif (!needsTransactionResolution(transactionData, options)) {\n\t\tawait validate(transactionData);\n\t\treturn next();\n\t}\n\n\tconst client = getClient(options);\n\tconst plugin = client.core?.resolveTransactionPlugin() ?? coreClientResolveTransactionPlugin;\n\n\treturn plugin(transactionData, options, async () => {\n\t\tawait validate(transactionData);\n\t\tawait next();\n\t});\n}\n\nfunction validate(transactionData: TransactionDataBuilder) {\n\ttransactionData.inputs.forEach((input, index) => {\n\t\tif (input.$kind !== 'Object' && input.$kind !== 'Pure' && input.$kind !== 'FundsWithdrawal') {\n\t\t\tthrow new Error(\n\t\t\t\t`Input at index ${index} has not been resolved. Expected a Pure, Object, or FundsWithdrawal input, but found ${JSON.stringify(\n\t\t\t\t\tinput,\n\t\t\t\t)}`,\n\t\t\t);\n\t\t}\n\t});\n}\n\nexport function getClient(options: BuildTransactionOptions) {\n\tif (!options.client) {\n\t\tthrow new Error(\n\t\t\t`No sui client passed to Transaction#build, but transaction data was not sufficient to build offline.`,\n\t\t);\n\t}\n\n\treturn options.client;\n}\n\nfunction normalizeRawArguments(transactionData: TransactionDataBuilder) {\n\tfor (const command of transactionData.commands) {\n\t\tswitch (command.$kind) {\n\t\t\tcase 'SplitCoins':\n\t\t\t\tcommand.SplitCoins.amounts.forEach((amount) => {\n\t\t\t\t\tnormalizeRawArgument(amount, bcs.U64, transactionData);\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\tcase 'TransferObjects':\n\t\t\t\tnormalizeRawArgument(command.TransferObjects.address, bcs.Address, transactionData);\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\nfunction normalizeRawArgument(\n\targ: Argument,\n\tschema: BcsType<any>,\n\ttransactionData: TransactionDataBuilder,\n) {\n\tif (arg.$kind !== 'Input') {\n\t\treturn;\n\t}\n\tconst input = transactionData.inputs[arg.Input];\n\n\tif (input.$kind !== 'UnresolvedPure') {\n\t\treturn;\n\t}\n\n\ttransactionData.inputs[arg.Input] = Inputs.Pure(schema.serialize(input.UnresolvedPure.value));\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { Transaction, TransactionObjectInput } from './Transaction.js';\nimport { Inputs } from './Inputs.js';\nimport {\n\tMOVE_STDLIB_ADDRESS,\n\tSUI_CLOCK_OBJECT_ID,\n\tSUI_DENY_LIST_OBJECT_ID,\n\tSUI_RANDOM_OBJECT_ID,\n\tSUI_SYSTEM_STATE_OBJECT_ID,\n} from '../utils/index.js';\n\nexport function createObjectMethods<T>(makeObject: (value: TransactionObjectInput) => T) {\n\tfunction object(value: TransactionObjectInput) {\n\t\treturn makeObject(value);\n\t}\n\n\tobject.system = (options?: { mutable?: boolean }) => {\n\t\tconst mutable = options?.mutable;\n\n\t\tif (mutable !== undefined) {\n\t\t\treturn object(\n\t\t\t\tInputs.SharedObjectRef({\n\t\t\t\t\tobjectId: SUI_SYSTEM_STATE_OBJECT_ID,\n\t\t\t\t\tinitialSharedVersion: 1,\n\t\t\t\t\tmutable,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\treturn object({\n\t\t\t$kind: 'UnresolvedObject',\n\t\t\tUnresolvedObject: {\n\t\t\t\tobjectId: SUI_SYSTEM_STATE_OBJECT_ID,\n\t\t\t\tinitialSharedVersion: 1,\n\t\t\t},\n\t\t});\n\t};\n\tobject.clock = () =>\n\t\tobject(\n\t\t\tInputs.SharedObjectRef({\n\t\t\t\tobjectId: SUI_CLOCK_OBJECT_ID,\n\t\t\t\tinitialSharedVersion: 1,\n\t\t\t\tmutable: false,\n\t\t\t}),\n\t\t);\n\tobject.random = () =>\n\t\tobject({\n\t\t\t$kind: 'UnresolvedObject',\n\t\t\tUnresolvedObject: {\n\t\t\t\tobjectId: SUI_RANDOM_OBJECT_ID,\n\t\t\t\tmutable: false,\n\t\t\t},\n\t\t});\n\tobject.denyList = (options?: { mutable?: boolean }) => {\n\t\treturn object({\n\t\t\t$kind: 'UnresolvedObject',\n\t\t\tUnresolvedObject: {\n\t\t\t\tobjectId: SUI_DENY_LIST_OBJECT_ID,\n\t\t\t\tmutable: options?.mutable,\n\t\t\t},\n\t\t});\n\t};\n\tobject.option =\n\t\t({ type, value }: { type: string; value: TransactionObjectInput | null }) =>\n\t\t(tx: Transaction) =>\n\t\t\ttx.moveCall({\n\t\t\t\ttypeArguments: [type],\n\t\t\t\ttarget: `${MOVE_STDLIB_ADDRESS}::option::${value === null ? 'none' : 'some'}`,\n\t\t\t\targuments: value === null ? [] : [tx.object(value)],\n\t\t\t});\n\n\treturn object;\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { isSerializedBcs } from '@mysten/bcs';\nimport type { SerializedBcs } from '@mysten/bcs';\n\nimport { bcs } from '../bcs/index.js';\nimport { pureBcsSchemaFromTypeName } from '../bcs/pure.js';\nimport type { PureTypeName, ShapeFromPureTypeName, ValidPureTypeName } from '../bcs/pure.js';\n\nexport function createPure<T>(makePure: (value: SerializedBcs<any, any> | Uint8Array) => T) {\n\tfunction pure<Type extends PureTypeName>(\n\t\ttype: Type extends PureTypeName ? ValidPureTypeName<Type> : Type,\n\t\tvalue: ShapeFromPureTypeName<Type>,\n\t): T;\n\n\tfunction pure(\n\t\t/**\n\t\t * The pure value, serialized to BCS. If this is a Uint8Array, then the value\n\t\t * is assumed to be raw bytes, and will be used directly.\n\t\t */\n\t\tvalue: SerializedBcs<any, any> | Uint8Array,\n\t): T;\n\n\tfunction pure(\n\t\ttypeOrSerializedValue?: PureTypeName | SerializedBcs<any, any> | Uint8Array,\n\t\tvalue?: unknown,\n\t): T {\n\t\tif (typeof typeOrSerializedValue === 'string') {\n\t\t\treturn makePure(pureBcsSchemaFromTypeName(typeOrSerializedValue).serialize(value as never));\n\t\t}\n\n\t\tif (typeOrSerializedValue instanceof Uint8Array || isSerializedBcs(typeOrSerializedValue)) {\n\t\t\treturn makePure(typeOrSerializedValue);\n\t\t}\n\n\t\tthrow new Error('tx.pure must be called either a bcs type name, or a serialized bcs value');\n\t}\n\n\tpure.u8 = (value: number) => makePure(bcs.U8.serialize(value));\n\tpure.u16 = (value: number) => makePure(bcs.U16.serialize(value));\n\tpure.u32 = (value: number) => makePure(bcs.U32.serialize(value));\n\tpure.u64 = (value: bigint | number | string) => makePure(bcs.U64.serialize(value));\n\tpure.u128 = (value: bigint | number | string) => makePure(bcs.U128.serialize(value));\n\tpure.u256 = (value: bigint | number | string) => makePure(bcs.U256.serialize(value));\n\tpure.bool = (value: boolean) => makePure(bcs.Bool.serialize(value));\n\tpure.string = (value: string) => makePure(bcs.String.serialize(value));\n\tpure.address = (value: string) => makePure(bcs.Address.serialize(value));\n\tpure.id = pure.address;\n\tpure.vector = <Type extends PureTypeName>(\n\t\ttype: Type extends PureTypeName ? ValidPureTypeName<Type> : Type,\n\t\tvalue: Iterable<ShapeFromPureTypeName<Type>> & { length: number },\n\t) => {\n\t\treturn makePure(\n\t\t\tbcs.vector(pureBcsSchemaFromTypeName(type as PureTypeName)).serialize(value as never),\n\t\t);\n\t};\n\tpure.option = <Type extends PureTypeName>(\n\t\ttype: Type extends PureTypeName ? ValidPureTypeName<Type> : Type,\n\t\tvalue: ShapeFromPureTypeName<Type> | null | undefined,\n\t) => {\n\t\treturn makePure(bcs.option(pureBcsSchemaFromTypeName(type)).serialize(value as never));\n\t};\n\n\treturn pure;\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { findNamesInTransaction, replaceNames } from '../../client/mvr.js';\nimport type { BuildTransactionOptions } from '../resolve.js';\nimport type { TransactionDataBuilder } from '../TransactionData.js';\n\n/**\n * Internal plugin that automatically resolves MVR names in transactions.\n * This plugin is automatically added to all transactions and uses the client's\n * MVR resolver to convert .move names to on-chain addresses.\n */\nexport function namedPackagesPlugin() {\n\treturn async (\n\t\ttransactionData: TransactionDataBuilder,\n\t\tbuildOptions: BuildTransactionOptions,\n\t\tnext: () => Promise<void>,\n\t) => {\n\t\tconst names = findNamesInTransaction(transactionData);\n\n\t\tif (names.types.length === 0 && names.packages.length === 0) {\n\t\t\treturn next();\n\t\t}\n\n\t\tif (!buildOptions.client) {\n\t\t\tthrow new Error(\n\t\t\t\t`Transaction contains MVR names but no client was provided to resolve them. Please pass a client to Transaction#build()`,\n\t\t\t);\n\t\t}\n\n\t\tconst resolved = await buildOptions.client.core.mvr.resolve({\n\t\t\ttypes: names.types,\n\t\t\tpackages: names.packages,\n\t\t});\n\n\t\treplaceNames(transactionData, resolved);\n\n\t\tawait next();\n\t};\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { SerializedBcs } from '@mysten/bcs';\nimport { fromBase64, isSerializedBcs } from '@mysten/bcs';\nimport type { InferInput } from 'valibot';\nimport { is, parse } from 'valibot';\n\nimport type { SignatureWithBytes, Signer } from '../cryptography/index.js';\nimport { normalizeSuiAddress } from '../utils/sui-types.js';\nimport type { TransactionArgument } from './Commands.js';\nimport { TransactionCommands } from './Commands.js';\nimport type { CallArg, Command, Argument, ObjectRef } from './data/internal.js';\nimport {\n\tArgumentSchema,\n\tNormalizedCallArg,\n\tObjectRefSchema,\n\tTransactionExpiration,\n} from './data/internal.js';\nimport { serializeV1TransactionData } from './data/v1.js';\nimport { SerializedTransactionDataV2Schema } from './data/v2.js';\nimport { Inputs } from './Inputs.js';\nimport { needsTransactionResolution, resolveTransactionPlugin } from './resolve.js';\nimport type {\n\tBuildTransactionOptions,\n\tSerializeTransactionOptions,\n\tTransactionPlugin,\n} from './resolve.js';\nimport { createObjectMethods } from './object.js';\nimport { createPure } from './pure.js';\nimport { TransactionDataBuilder } from './TransactionData.js';\nimport { getIdFromCallArg } from './utils.js';\nimport { namedPackagesPlugin } from './plugins/NamedPackagesPlugin.js';\nimport {\n\tCOIN_WITH_BALANCE,\n\tresolveCoinBalance,\n\tcoinWithBalance,\n\tcreateBalance,\n} from './intents/CoinWithBalance.js';\nimport type { ClientWithCoreApi } from '../client/core.js';\n\nexport type TransactionObjectArgument =\n\t| Exclude<InferInput<typeof ArgumentSchema>, { Input: unknown; type?: 'pure' }>\n\t| ((\n\t\t\ttx: Transaction,\n\t ) => Exclude<InferInput<typeof ArgumentSchema>, { Input: unknown; type?: 'pure' }>)\n\t| AsyncTransactionThunk<TransactionResultArgument>;\n\nexport type TransactionResult = Extract<Argument, { Result: unknown }> &\n\tExtract<Argument, { NestedResult: unknown }>[];\n\nexport type TransactionResultArgument =\n\t| Extract<Argument, { Result: unknown }>\n\t| readonly Extract<Argument, { NestedResult: unknown }>[];\n\nexport type AsyncTransactionThunk<\n\tT extends TransactionResultArgument | void = TransactionResultArgument | void,\n> = (tx: Transaction) => Promise<T | void>;\n\nfunction createTransactionResult(\n\tindex: number | (() => number),\n\tlength = Infinity,\n): TransactionResult {\n\tconst baseResult = {\n\t\t$kind: 'Result' as const,\n\t\tget Result() {\n\t\t\treturn typeof index === 'function' ? index() : index;\n\t\t},\n\t};\n\n\tconst nestedResults: {\n\t\t$kind: 'NestedResult';\n\t\tNestedResult: [number, number];\n\t}[] = [];\n\tconst nestedResultFor = (\n\t\tresultIndex: number,\n\t): {\n\t\t$kind: 'NestedResult';\n\t\tNestedResult: [number, number];\n\t} =>\n\t\t(nestedResults[resultIndex] ??= {\n\t\t\t$kind: 'NestedResult' as const,\n\t\t\tget NestedResult() {\n\t\t\t\treturn [typeof index === 'function' ? index() : index, resultIndex] as [number, number];\n\t\t\t},\n\t\t});\n\n\treturn new Proxy(baseResult, {\n\t\tset() {\n\t\t\tthrow new Error(\n\t\t\t\t'The transaction result is a proxy, and does not support setting properties directly',\n\t\t\t);\n\t\t},\n\t\t// TODO: Instead of making this return a concrete argument, we should ideally\n\t\t// make it reference-based (so that this gets resolved at build-time), which\n\t\t// allows re-ordering transactions.\n\t\tget(target, property) {\n\t\t\t// This allows this transaction argument to be used in the singular form:\n\t\t\tif (property in target) {\n\t\t\t\treturn Reflect.get(target, property);\n\t\t\t}\n\n\t\t\t// Support destructuring:\n\t\t\tif (property === Symbol.iterator) {\n\t\t\t\treturn function* () {\n\t\t\t\t\tlet i = 0;\n\t\t\t\t\twhile (i < length) {\n\t\t\t\t\t\tyield nestedResultFor(i);\n\t\t\t\t\t\ti++;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (typeof property === 'symbol') return;\n\n\t\t\tconst resultIndex = parseInt(property, 10);\n\t\t\tif (Number.isNaN(resultIndex) || resultIndex < 0) return;\n\t\t\treturn nestedResultFor(resultIndex);\n\t\t},\n\t}) as TransactionResult;\n}\n\nconst TRANSACTION_BRAND = Symbol.for('@mysten/transaction') as never;\n\ninterface SignOptions extends BuildTransactionOptions {\n\tsigner: Signer;\n}\n\nexport function isTransaction(obj: unknown): obj is TransactionLike {\n\treturn !!obj && typeof obj === 'object' && (obj as any)[TRANSACTION_BRAND] === true;\n}\n\nexport type TransactionObjectInput = string | CallArg | TransactionObjectArgument;\n\ntype InputSection = (CallArg | InputSection)[];\ntype CommandSection = (Command | CommandSection)[];\n\ntype TransactionLike = {\n\tgetData(): unknown;\n};\n\n/**\n * Transaction Builder\n */\nexport class Transaction {\n\t#serializationPlugins: TransactionPlugin[];\n\t#buildPlugins: TransactionPlugin[];\n\t#intentResolvers = new Map<string, TransactionPlugin>();\n\t#inputSection: InputSection = [];\n\t#commandSection: CommandSection = [];\n\t#availableResults: Set<number> = new Set();\n\t#pendingPromises = new Set<Promise<unknown>>();\n\t#added = new Map<(...args: any[]) => unknown, unknown>();\n\n\t/**\n\t * Converts from a serialize transaction kind (built with `build({ onlyTransactionKind: true })`) to a `Transaction` class.\n\t * Supports either a byte array, or base64-encoded bytes.\n\t */\n\tstatic fromKind(serialized: string | Uint8Array) {\n\t\tconst tx = new Transaction();\n\n\t\ttx.#data = TransactionDataBuilder.fromKindBytes(\n\t\t\ttypeof serialized === 'string' ? fromBase64(serialized) : serialized,\n\t\t);\n\n\t\ttx.#inputSection = tx.#data.inputs.slice();\n\t\ttx.#commandSection = tx.#data.commands.slice();\n\t\ttx.#availableResults = new Set(tx.#commandSection.map((_, i) => i));\n\n\t\treturn tx;\n\t}\n\n\t/**\n\t * Converts from a serialized transaction format to a `Transaction` class.\n\t * There are two supported serialized formats:\n\t * - A string returned from `Transaction#serialize`. The serialized format must be compatible, or it will throw an error.\n\t * - A byte array (or base64-encoded bytes) containing BCS transaction data.\n\t */\n\tstatic from(transaction: string | Uint8Array | TransactionLike) {\n\t\tconst newTransaction = new Transaction();\n\n\t\tif (isTransaction(transaction)) {\n\t\t\tnewTransaction.#data = TransactionDataBuilder.restore(\n\t\t\t\ttransaction.getData() as InferInput<typeof SerializedTransactionDataV2Schema>,\n\t\t\t);\n\t\t} else if (typeof transaction !== 'string' || !transaction.startsWith('{')) {\n\t\t\tnewTransaction.#data = TransactionDataBuilder.fromBytes(\n\t\t\t\ttypeof transaction === 'string' ? fromBase64(transaction) : transaction,\n\t\t\t);\n\t\t} else {\n\t\t\tnewTransaction.#data = TransactionDataBuilder.restore(JSON.parse(transaction));\n\t\t}\n\n\t\tnewTransaction.#inputSection = newTransaction.#data.inputs.slice();\n\t\tnewTransaction.#commandSection = newTransaction.#data.commands.slice();\n\t\tnewTransaction.#availableResults = new Set(newTransaction.#commandSection.map((_, i) => i));\n\n\t\tif (!newTransaction.isPreparedForSerialization({ supportedIntents: [COIN_WITH_BALANCE] })) {\n\t\t\tthrow new Error(\n\t\t\t\t'Transaction has unresolved intents or async thunks. Call `prepareForSerialization` before copying.',\n\t\t\t);\n\t\t}\n\n\t\tif (newTransaction.#data.commands.some((cmd) => cmd.$Intent?.name === COIN_WITH_BALANCE)) {\n\t\t\tnewTransaction.addIntentResolver(COIN_WITH_BALANCE, resolveCoinBalance);\n\t\t}\n\n\t\treturn newTransaction;\n\t}\n\n\taddSerializationPlugin(step: TransactionPlugin) {\n\t\tthis.#serializationPlugins.push(step);\n\t}\n\n\taddBuildPlugin(step: TransactionPlugin) {\n\t\tthis.#buildPlugins.push(step);\n\t}\n\n\taddIntentResolver(intent: string, resolver: TransactionPlugin) {\n\t\tif (this.#intentResolvers.has(intent) && this.#intentResolvers.get(intent) !== resolver) {\n\t\t\tthrow new Error(`Intent resolver for ${intent} already exists`);\n\t\t}\n\n\t\tthis.#intentResolvers.set(intent, resolver);\n\t}\n\n\tsetSender(sender: string) {\n\t\tthis.#data.sender = sender;\n\t}\n\t/**\n\t * Sets the sender only if it has not already been set.\n\t * This is useful for sponsored transaction flows where the sender may not be the same as the signer address.\n\t */\n\tsetSenderIfNotSet(sender: string) {\n\t\tif (!this.#data.sender) {\n\t\t\tthis.#data.sender = sender;\n\t\t}\n\t}\n\tsetExpiration(expiration?: InferInput<typeof TransactionExpiration> | null) {\n\t\tthis.#data.expiration = expiration ? parse(TransactionExpiration, expiration) : null;\n\t}\n\tsetGasPrice(price: number | bigint | string) {\n\t\tthis.#data.gasData.price = String(price);\n\t}\n\tsetGasBudget(budget: number | bigint | string) {\n\t\tthis.#data.gasData.budget = String(budget);\n\t}\n\n\tsetGasBudgetIfNotSet(budget: number | bigint | string) {\n\t\tif (this.#data.gasData.budget == null) {\n\t\t\tthis.#data.gasData.budget = String(budget);\n\t\t}\n\t}\n\n\tsetGasOwner(owner: string) {\n\t\tthis.#data.gasData.owner = owner;\n\t}\n\tsetGasPayment(payments: ObjectRef[]) {\n\t\tthis.#data.gasData.payment = payments.map((payment) => parse(ObjectRefSchema, payment));\n\t}\n\n\t#data: TransactionDataBuilder;\n\n\t/** Get a snapshot of the transaction data, in JSON form: */\n\tgetData() {\n\t\treturn this.#data.snapshot();\n\t}\n\n\t// Used to brand transaction classes so that they can be identified, even between multiple copies\n\t// of the builder.\n\tget [TRANSACTION_BRAND]() {\n\t\treturn true;\n\t}\n\n\t// Temporary workaround for the wallet interface accidentally serializing transactions via postMessage\n\tget pure(): ReturnType<typeof createPure<Argument>> {\n\t\tObject.defineProperty(this, 'pure', {\n\t\t\tenumerable: false,\n\t\t\tvalue: createPure<Argument>((value): Argument => {\n\t\t\t\tif (isSerializedBcs(value)) {\n\t\t\t\t\treturn this.#addInput('pure', {\n\t\t\t\t\t\t$kind: 'Pure',\n\t\t\t\t\t\tPure: {\n\t\t\t\t\t\t\tbytes: value.toBase64(),\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// TODO: we can also do some deduplication here\n\t\t\t\treturn this.#addInput(\n\t\t\t\t\t'pure',\n\t\t\t\t\tis(NormalizedCallArg, value)\n\t\t\t\t\t\t? parse(NormalizedCallArg, value)\n\t\t\t\t\t\t: value instanceof Uint8Array\n\t\t\t\t\t\t\t? Inputs.Pure(value)\n\t\t\t\t\t\t\t: { $kind: 'UnresolvedPure', UnresolvedPure: { value } },\n\t\t\t\t);\n\t\t\t}),\n\t\t});\n\n\t\treturn this.pure;\n\t}\n\n\tconstructor() {\n\t\tthis.#data = new TransactionDataBuilder();\n\t\tthis.#buildPlugins = [];\n\t\tthis.#serializationPlugins = [];\n\t}\n\n\t/** Returns an argument for the gas coin, to be used in a transaction. */\n\tget gas() {\n\t\treturn { $kind: 'GasCoin' as const, GasCoin: true as const };\n\t}\n\n\t/**\n\t * Creates a coin of the specified type and balance.\n\t * Sourced from address balance when available, falling back to owned coins.\n\t */\n\tcoin({\n\t\ttype,\n\t\tbalance,\n\t\tuseGasCoin,\n\t}: {\n\t\tbalance: bigint | number;\n\t\ttype?: string;\n\t\tuseGasCoin?: boolean;\n\t}): TransactionResult {\n\t\treturn this.add(coinWithBalance({ type, balance, useGasCoin }));\n\t}\n\n\t/**\n\t * Creates a Balance object of the specified type and balance.\n\t * Sourced from address balance when available, falling back to owned coins.\n\t */\n\tbalance({\n\t\ttype,\n\t\tbalance,\n\t\tuseGasCoin,\n\t}: {\n\t\tbalance: bigint | number;\n\t\ttype?: string;\n\t\tuseGasCoin?: boolean;\n\t}): TransactionResult {\n\t\treturn this.add(createBalance({ type, balance, useGasCoin }));\n\t}\n\n\t/**\n\t * Add a new object input to the transaction.\n\t */\n\tobject: ReturnType<\n\t\ttypeof createObjectMethods<{ $kind: 'Input'; Input: number; type?: 'object' }>\n\t> = createObjectMethods(\n\t\t(value: TransactionObjectInput): { $kind: 'Input'; Input: number; type?: 'object' } => {\n\t\t\tif (typeof value === 'function') {\n\t\t\t\treturn this.object(this.add(value as (tx: Transaction) => TransactionObjectArgument));\n\t\t\t}\n\n\t\t\tif (typeof value === 'object' && is(ArgumentSchema, value)) {\n\t\t\t\treturn value as { $kind: 'Input'; Input: number; type?: 'object' };\n\t\t\t}\n\n\t\t\tconst id = getIdFromCallArg(value);\n\n\t\t\tconst inserted = this.#data.inputs.find((i) => id === getIdFromCallArg(i));\n\n\t\t\t// Upgrade shared object inputs to mutable if needed:\n\t\t\tif (\n\t\t\t\tinserted?.Object?.SharedObject &&\n\t\t\t\ttypeof value === 'object' &&\n\t\t\t\tvalue.Object?.SharedObject\n\t\t\t) {\n\t\t\t\tinserted.Object.SharedObject.mutable =\n\t\t\t\t\tinserted.Object.SharedObject.mutable || value.Object.SharedObject.mutable;\n\t\t\t}\n\n\t\t\treturn inserted\n\t\t\t\t? { $kind: 'Input', Input: this.#data.inputs.indexOf(inserted), type: 'object' }\n\t\t\t\t: this.#addInput(\n\t\t\t\t\t\t'object',\n\t\t\t\t\t\ttypeof value === 'string'\n\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t$kind: 'UnresolvedObject',\n\t\t\t\t\t\t\t\t\tUnresolvedObject: { objectId: normalizeSuiAddress(value) },\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t: value,\n\t\t\t\t\t);\n\t\t},\n\t);\n\n\t/**\n\t * Add a new object input to the transaction using the fully-resolved object reference.\n\t * If you only have an object ID, use `builder.object(id)` instead.\n\t */\n\tobjectRef(...args: Parameters<(typeof Inputs)['ObjectRef']>) {\n\t\treturn this.object(Inputs.ObjectRef(...args));\n\t}\n\n\t/**\n\t * Add a new receiving input to the transaction using the fully-resolved object reference.\n\t * If you only have an object ID, use `builder.object(id)` instead.\n\t */\n\treceivingRef(...args: Parameters<(typeof Inputs)['ReceivingRef']>) {\n\t\treturn this.object(Inputs.ReceivingRef(...args));\n\t}\n\n\t/**\n\t * Add a new shared object input to the transaction using the fully-resolved shared object reference.\n\t * If you only have an object ID, use `builder.object(id)` instead.\n\t */\n\tsharedObjectRef(...args: Parameters<(typeof Inputs)['SharedObjectRef']>) {\n\t\treturn this.object(Inputs.SharedObjectRef(...args));\n\t}\n\n\t#fork() {\n\t\tconst fork = new Transaction();\n\n\t\tfork.#data = this.#data;\n\t\tfork.#serializationPlugins = this.#serializationPlugins;\n\t\tfork.#buildPlugins = this.#buildPlugins;\n\t\tfork.#intentResolvers = this.#intentResolvers;\n\t\tfork.#pendingPromises = this.#pendingPromises;\n\t\tfork.#availableResults = new Set(this.#availableResults);\n\t\tfork.#added = this.#added;\n\t\tthis.#inputSection.push(fork.#inputSection);\n\t\tthis.#commandSection.push(fork.#commandSection);\n\n\t\treturn fork;\n\t}\n\n\t/** Add a transaction to the transaction */\n\n\tadd<T extends Command>(command: T): TransactionResult;\n\tadd<T extends void | TransactionResultArgument | TransactionArgument | Command>(\n\t\tthunk: (tx: Transaction) => T,\n\t): T;\n\tadd<T extends TransactionResultArgument | void>(\n\t\tasyncTransactionThunk: AsyncTransactionThunk<T>,\n\t): T;\n\tadd(command: Command | AsyncTransactionThunk | ((tx: Transaction) => unknown)): unknown {\n\t\tif (typeof command === 'function') {\n\t\t\tif (this.#added.has(command)) {\n\t\t\t\treturn this.#added.get(command);\n\t\t\t}\n\n\t\t\tconst fork = this.#fork();\n\t\t\tconst result = command(fork);\n\n\t\t\tif (!(result && typeof result === 'object' && 'then' in result)) {\n\t\t\t\tthis.#availableResults = fork.#availableResults;\n\t\t\t\tthis.#added.set(command, result);\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tconst placeholder = this.#addCommand({\n\t\t\t\t$kind: '$Intent',\n\t\t\t\t$Intent: {\n\t\t\t\t\tname: 'AsyncTransactionThunk',\n\t\t\t\t\tinputs: {},\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tresultIndex: this.#data.commands.length,\n\t\t\t\t\t\tresult: null as TransactionResult | null,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tthis.#pendingPromises.add(\n\t\t\t\tPromise.resolve(result as Promise<TransactionResult>).then((result) => {\n\t\t\t\t\tplaceholder.$Intent.data.result = result;\n\t\t\t\t}),\n\t\t\t);\n\t\t\tconst txResult = createTransactionResult(() => placeholder.$Intent.data.resultIndex);\n\t\t\tthis.#added.set(command, txResult);\n\t\t\treturn txResult;\n\t\t} else {\n\t\t\tthis.#addCommand(command);\n\t\t}\n\n\t\treturn createTransactionResult(this.#data.commands.length - 1);\n\t}\n\n\t#addCommand<T extends Command>(command: T) {\n\t\tconst resultIndex = this.#data.commands.length;\n\t\tthis.#commandSection.push(command);\n\t\tthis.#availableResults.add(resultIndex);\n\t\tthis.#data.commands.push(command);\n\n\t\tthis.#data.mapCommandArguments(resultIndex, (arg) => {\n\t\t\tif (arg.$kind === 'Result' && !this.#availableResults.has(arg.Result)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Result { Result: ${arg.Result} } is not available to use in the current transaction`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (arg.$kind === 'NestedResult' && !this.#availableResults.has(arg.NestedResult[0])) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Result { NestedResult: [${arg.NestedResult[0]}, ${arg.NestedResult[1]}] } is not available to use in the current transaction`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (arg.$kind === 'Input' && arg.Input >= this.#data.inputs.length) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Input { Input: ${arg.Input} } references an input that does not exist in the current transaction`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn arg;\n\t\t});\n\n\t\treturn command;\n\t}\n\n\t#addInput<T extends 'pure' | 'object'>(type: T, input: CallArg) {\n\t\tthis.#inputSection.push(input);\n\t\treturn this.#data.addInput(type, input);\n\t}\n\n\t#normalizeTransactionArgument(arg: TransactionArgument | SerializedBcs<any>) {\n\t\tif (isSerializedBcs(arg)) {\n\t\t\treturn this.pure(arg);\n\t\t}\n\n\t\treturn this.#resolveArgument(arg as TransactionArgument);\n\t}\n\n\t#resolveArgument(arg: TransactionArgument): Argument {\n\t\tif (typeof arg === 'function') {\n\t\t\tconst resolved = this.add(arg as never);\n\n\t\t\tif (typeof resolved === 'function') {\n\t\t\t\treturn this.#resolveArgument(resolved);\n\t\t\t}\n\n\t\t\treturn parse(ArgumentSchema, resolved);\n\t\t}\n\n\t\treturn parse(ArgumentSchema, arg);\n\t}\n\n\t// Method shorthands:\n\n\tsplitCoins<\n\t\tconst Amounts extends (TransactionArgument | SerializedBcs<any> | number | string | bigint)[],\n\t>(coin: TransactionObjectArgument | string, amounts: Amounts) {\n\t\tconst command = TransactionCommands.SplitCoins(\n\t\t\ttypeof coin === 'string' ? this.object(coin) : this.#resolveArgument(coin),\n\t\t\tamounts.map((amount) =>\n\t\t\t\ttypeof amount === 'number' || typeof amount === 'bigint' || typeof amount === 'string'\n\t\t\t\t\t? this.pure.u64(amount)\n\t\t\t\t\t: this.#normalizeTransactionArgument(amount),\n\t\t\t),\n\t\t);\n\t\tthis.#addCommand(command);\n\t\treturn createTransactionResult(this.#data.commands.length - 1, amounts.length) as Extract<\n\t\t\tArgument,\n\t\t\t{ Result: unknown }\n\t\t> & {\n\t\t\t[K in keyof Amounts]: Extract<Argument, { NestedResult: unknown }>;\n\t\t};\n\t}\n\tmergeCoins(\n\t\tdestination: TransactionObjectArgument | string,\n\t\tsources: (TransactionObjectArgument | string)[],\n\t) {\n\t\treturn this.add(\n\t\t\tTransactionCommands.MergeCoins(\n\t\t\t\tthis.object(destination),\n\t\t\t\tsources.map((src) => this.object(src)),\n\t\t\t),\n\t\t);\n\t}\n\tpublish({ modules, dependencies }: { modules: number[][] | string[]; dependencies: string[] }) {\n\t\treturn this.add(\n\t\t\tTransactionCommands.Publish({\n\t\t\t\tmodules,\n\t\t\t\tdependencies,\n\t\t\t}),\n\t\t);\n\t}\n\tupgrade({\n\t\tmodules,\n\t\tdependencies,\n\t\tpackage: packageId,\n\t\tticket,\n\t}: {\n\t\tmodules: number[][] | string[];\n\t\tdependencies: string[];\n\t\tpackage: string;\n\t\tticket: TransactionObjectArgument | string;\n\t}) {\n\t\treturn this.add(\n\t\t\tTransactionCommands.Upgrade({\n\t\t\t\tmodules,\n\t\t\t\tdependencies,\n\t\t\t\tpackage: packageId,\n\t\t\t\tticket: this.object(ticket),\n\t\t\t}),\n\t\t);\n\t}\n\tmoveCall({\n\t\targuments: args,\n\t\t...input\n\t}:\n\t\t| {\n\t\t\t\tpackage: string;\n\t\t\t\tmodule: string;\n\t\t\t\tfunction: string;\n\t\t\t\targuments?: (TransactionArgument | SerializedBcs<any>)[];\n\t\t\t\ttypeArguments?: string[];\n\t\t }\n\t\t| {\n\t\t\t\ttarget: string;\n\t\t\t\targuments?: (TransactionArgument | SerializedBcs<any>)[];\n\t\t\t\ttypeArguments?: string[];\n\t\t }) {\n\t\treturn this.add(\n\t\t\tTransactionCommands.MoveCall({\n\t\t\t\t...input,\n\t\t\t\targuments: args?.map((arg) => this.#normalizeTransactionArgument(arg)),\n\t\t\t} as Parameters<typeof TransactionCommands.MoveCall>[0]),\n\t\t);\n\t}\n\ttransferObjects(\n\t\tobjects: (TransactionObjectArgument | string)[],\n\t\taddress: TransactionArgument | SerializedBcs<any> | string,\n\t) {\n\t\treturn this.add(\n\t\t\tTransactionCommands.TransferObjects(\n\t\t\t\tobjects.map((obj) => this.object(obj)),\n\t\t\t\ttypeof address === 'string'\n\t\t\t\t\t? this.pure.address(address)\n\t\t\t\t\t: this.#normalizeTransactionArgument(address),\n\t\t\t),\n\t\t);\n\t}\n\tmakeMoveVec({\n\t\ttype,\n\t\telements,\n\t}: {\n\t\telements: (TransactionObjectArgument | string)[];\n\t\ttype?: string;\n\t}) {\n\t\treturn this.add(\n\t\t\tTransactionCommands.MakeMoveVec({\n\t\t\t\ttype,\n\t\t\t\telements: elements.map((obj) => this.object(obj)),\n\t\t\t}),\n\t\t);\n\t}\n\n\t/**\n\t * Create a FundsWithdrawal input for withdrawing Balance<T> from an address balance accumulator.\n\t * This is used for gas payments from address balances.\n\t *\n\t * @param options.amount - The Amount to withdraw (u64).\n\t * @param options.type - The balance type (e.g., \"0x2::sui::SUI\"). Defaults to SUI.\n\t */\n\twithdrawal({ amount, type }: { amount: number | bigint | string; type?: string | null }): {\n\t\t$kind: 'Input';\n\t\tInput: number;\n\t\ttype?: 'object';\n\t} {\n\t\tconst input: CallArg = {\n\t\t\t$kind: 'FundsWithdrawal',\n\t\t\tFundsWithdrawal: {\n\t\t\t\t// TODO: support entire balance withdrawals once supported\n\t\t\t\treservation: { $kind: 'MaxAmountU64', MaxAmountU64: String(amount) },\n\t\t\t\ttypeArg: { $kind: 'Balance', Balance: type ?? '0x2::sui::SUI' },\n\t\t\t\twithdrawFrom:\n\t\t\t\t\t// fromSponsor === true\n\t\t\t\t\t// \t? { $kind: 'Sponsor', Sponsor: true } :\n\t\t\t\t\t// TODO: currently only supporting withdrawals from sender\n\t\t\t\t\t{ $kind: 'Sender', Sender: true },\n\t\t\t},\n\t\t};\n\n\t\treturn this.#addInput('object', input);\n\t}\n\n\t/**\n\t * @deprecated Use toJSON instead.\n\t * For synchronous serialization, you can use `getData()`\n\t * */\n\tserialize() {\n\t\treturn JSON.stringify(serializeV1TransactionData(this.#data.snapshot()));\n\t}\n\n\tasync toJSON(options: SerializeTransactionOptions = {}): Promise<string> {\n\t\tawait this.prepareForSerialization(options);\n\t\tconst fullyResolved = this.isFullyResolved();\n\t\treturn JSON.stringify(\n\t\t\tparse(\n\t\t\t\tSerializedTransactionDataV2Schema,\n\t\t\t\tfullyResolved\n\t\t\t\t\t? {\n\t\t\t\t\t\t\t...this.#data.snapshot(),\n\t\t\t\t\t\t\tdigest: this.#data.getDigest(),\n\t\t\t\t\t\t}\n\t\t\t\t\t: this.#data.snapshot(),\n\t\t\t),\n\t\t\t(_key, value) => (typeof value === 'bigint' ? value.toString() : value),\n\t\t\t2,\n\t\t);\n\t}\n\n\t/** Build the transaction to BCS bytes, and sign it with the provided keypair. */\n\tasync sign(options: SignOptions): Promise<SignatureWithBytes> {\n\t\tconst { signer, ...buildOptions } = options;\n\t\tconst bytes = await this.build(buildOptions);\n\t\treturn signer.signTransaction(bytes);\n\t}\n\n\t/**\n\t * Checks if the transaction is prepared for serialization to JSON.\n\t * This means:\n\t * - All async thunks have been fully resolved\n\t * - All transaction intents have been resolved (unless in supportedIntents)\n\t *\n\t * Unlike `isFullyResolved()`, this does not require the sender, gas payment,\n\t * budget, or object versions to be set.\n\t */\n\tisPreparedForSerialization(options: { supportedIntents?: string[] } = {}) {\n\t\tif (this.#pendingPromises.size > 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (\n\t\t\tthis.#data.commands.some(\n\t\t\t\t(cmd) => cmd.$Intent && !options.supportedIntents?.includes(cmd.$Intent.name),\n\t\t\t)\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/**\n\t * Ensures that:\n\t * - All objects have been fully resolved to a specific version\n\t * - All pure inputs have been serialized to bytes\n\t * - All async thunks have been fully resolved\n\t * - All transaction intents have been resolved\n\t * \t- The gas payment, budget, and price have been set\n\t * - The transaction sender has been set\n\t *\n\t * When true, the transaction will always be built to the same bytes and digest (unless the transaction is mutated)\n\t */\n\tisFullyResolved() {\n\t\tif (!this.isPreparedForSerialization()) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (!this.#data.sender) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (needsTransactionResolution(this.#data, {})) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n\n\t/** Build the transaction to BCS bytes. */\n\tasync build(options: BuildTransactionOptions = {}): Promise<Uint8Array<ArrayBuffer>> {\n\t\tawait this.prepareForSerialization(options);\n\t\tawait this.#prepareBuild(options);\n\t\treturn this.#data.build({\n\t\t\tonlyTransactionKind: options.onlyTransactionKind,\n\t\t});\n\t}\n\n\t/** Derive transaction digest */\n\tasync getDigest(\n\t\toptions: {\n\t\t\tclient?: ClientWithCoreApi;\n\t\t} = {},\n\t): Promise<string> {\n\t\tawait this.prepareForSerialization(options);\n\t\tawait this.#prepareBuild(options);\n\t\treturn this.#data.getDigest();\n\t}\n\n\t/**\n\t * Prepare the transaction by validating the transaction data and resolving all inputs\n\t * so that it can be built into bytes.\n\t */\n\tasync #prepareBuild(options: BuildTransactionOptions) {\n\t\tif (!options.onlyTransactionKind && !this.#data.sender) {\n\t\t\tthrow new Error('Missing transaction sender');\n\t\t}\n\n\t\tawait this.#runPlugins([...this.#buildPlugins, resolveTransactionPlugin], options);\n\t}\n\n\tasync #runPlugins(plugins: TransactionPlugin[], options: SerializeTransactionOptions) {\n\t\ttry {\n\t\t\tconst createNext = (i: number) => {\n\t\t\t\tif (i >= plugins.length) {\n\t\t\t\t\treturn () => {};\n\t\t\t\t}\n\t\t\t\tconst plugin = plugins[i];\n\n\t\t\t\treturn async () => {\n\t\t\t\t\tconst next = createNext(i + 1);\n\t\t\t\t\tlet calledNext = false;\n\t\t\t\t\tlet nextResolved = false;\n\n\t\t\t\t\tawait plugin(this.#data, options, async () => {\n\t\t\t\t\t\tif (calledNext) {\n\t\t\t\t\t\t\tthrow new Error(`next() was call multiple times in TransactionPlugin ${i}`);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcalledNext = true;\n\n\t\t\t\t\t\tawait next();\n\n\t\t\t\t\t\tnextResolved = true;\n\t\t\t\t\t});\n\n\t\t\t\t\tif (!calledNext) {\n\t\t\t\t\t\tthrow new Error(`next() was not called in TransactionPlugin ${i}`);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!nextResolved) {\n\t\t\t\t\t\tthrow new Error(`next() was not awaited in TransactionPlugin ${i}`);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tawait createNext(0)();\n\t\t} finally {\n\t\t\tthis.#inputSection = this.#data.inputs.slice();\n\t\t\tthis.#commandSection = this.#data.commands.slice();\n\t\t\tthis.#availableResults = new Set(this.#commandSection.map((_, i) => i));\n\t\t}\n\t}\n\n\tasync #waitForPendingTasks() {\n\t\twhile (this.#pendingPromises.size > 0) {\n\t\t\tconst newPromise = Promise.all(this.#pendingPromises);\n\t\t\tthis.#pendingPromises.clear();\n\t\t\tthis.#pendingPromises.add(newPromise);\n\t\t\tawait newPromise;\n\t\t\tthis.#pendingPromises.delete(newPromise);\n\t\t}\n\t}\n\n\t#sortCommandsAndInputs() {\n\t\tconst unorderedCommands = this.#data.commands;\n\t\tconst unorderedInputs = this.#data.inputs;\n\n\t\tconst orderedCommands = (this.#commandSection as Command[]).flat(Infinity);\n\t\tconst orderedInputs = (this.#inputSection as CallArg[]).flat(Infinity);\n\n\t\tif (orderedCommands.length !== unorderedCommands.length) {\n\t\t\tthrow new Error('Unexpected number of commands found in transaction data');\n\t\t}\n\n\t\tif (orderedInputs.length !== unorderedInputs.length) {\n\t\t\tthrow new Error('Unexpected number of inputs found in transaction data');\n\t\t}\n\n\t\tconst filteredCommands = orderedCommands.filter(\n\t\t\t(cmd) => cmd.$Intent?.name !== 'AsyncTransactionThunk',\n\t\t);\n\n\t\tthis.#data.commands = filteredCommands;\n\t\tthis.#data.inputs = orderedInputs;\n\t\tthis.#commandSection = filteredCommands;\n\t\tthis.#inputSection = orderedInputs;\n\t\tthis.#availableResults = new Set(filteredCommands.map((_, i) => i));\n\n\t\tfunction getOriginalIndex(index: number): number {\n\t\t\tconst command = unorderedCommands[index];\n\t\t\tif (command.$Intent?.name === 'AsyncTransactionThunk') {\n\t\t\t\tconst result = command.$Intent.data.result as TransactionResult | null;\n\n\t\t\t\tif (result == null) {\n\t\t\t\t\tthrow new Error('AsyncTransactionThunk has not been resolved');\n\t\t\t\t}\n\n\t\t\t\treturn getOriginalIndex(result.Result);\n\t\t\t}\n\n\t\t\tconst updated = filteredCommands.indexOf(command);\n\n\t\t\tif (updated === -1) {\n\t\t\t\tthrow new Error('Unable to find original index for command');\n\t\t\t}\n\n\t\t\treturn updated;\n\t\t}\n\n\t\tthis.#data.mapArguments((arg) => {\n\t\t\tif (arg.$kind === 'Input') {\n\t\t\t\tconst updated = orderedInputs.indexOf(unorderedInputs[arg.Input]);\n\n\t\t\t\tif (updated === -1) {\n\t\t\t\t\tthrow new Error('Input has not been resolved');\n\t\t\t\t}\n\n\t\t\t\treturn { ...arg, Input: updated };\n\t\t\t} else if (arg.$kind === 'Result') {\n\t\t\t\tconst updated = getOriginalIndex(arg.Result);\n\n\t\t\t\treturn { ...arg, Result: updated };\n\t\t\t} else if (arg.$kind === 'NestedResult') {\n\t\t\t\tconst updated = getOriginalIndex(arg.NestedResult[0]);\n\n\t\t\t\treturn { ...arg, NestedResult: [updated, arg.NestedResult[1]] };\n\t\t\t}\n\n\t\t\treturn arg;\n\t\t});\n\n\t\tfor (const [i, cmd] of unorderedCommands.entries()) {\n\t\t\tif (cmd.$Intent?.name === 'AsyncTransactionThunk') {\n\t\t\t\ttry {\n\t\t\t\t\tcmd.$Intent.data.resultIndex = getOriginalIndex(i);\n\t\t\t\t} catch {\n\t\t\t\t\t// If async thunk did not return a result, this will error, but is safe to ignore\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tasync prepareForSerialization(options: SerializeTransactionOptions) {\n\t\tawait this.#waitForPendingTasks();\n\t\tthis.#sortCommandsAndInputs();\n\t\tconst intents = new Set<string>();\n\t\tfor (const command of this.#data.commands) {\n\t\t\tif (command.$Intent) {\n\t\t\t\tintents.add(command.$Intent.name);\n\t\t\t}\n\t\t}\n\n\t\tconst steps = [...this.#serializationPlugins];\n\n\t\tfor (const intent of intents) {\n\t\t\tif (options.supportedIntents?.includes(intent)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!this.#intentResolvers.has(intent)) {\n\t\t\t\tthrow new Error(`Missing intent resolver for ${intent}`);\n\t\t\t}\n\n\t\t\tsteps.push(this.#intentResolvers.get(intent)!);\n\t\t}\n\n\t\tsteps.push(namedPackagesPlugin());\n\n\t\tawait this.#runPlugins(steps, options);\n\t}\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { bcs } from '../bcs/index.js';\nimport { normalizeSuiAddress } from '../utils/sui-types.js';\nimport type { SuiClientTypes } from '../client/types.js';\nimport type { TransactionPlugin } from './resolve.js';\n\nexport interface ObjectCacheEntry {\n\tobjectId: string;\n\tversion: string;\n\tdigest: string;\n\towner: string | null;\n\tinitialSharedVersion: string | null;\n}\n\nexport interface MoveFunctionCacheEntry {\n\tpackage: string;\n\tmodule: string;\n\tfunction: string;\n\tparameters: SuiClientTypes.OpenSignature[];\n}\n\nexport interface CacheEntryTypes {\n\tOwnedObject: ObjectCacheEntry;\n\tSharedOrImmutableObject: ObjectCacheEntry;\n\tMoveFunction: MoveFunctionCacheEntry;\n\tCustom: unknown;\n}\nexport abstract class AsyncCache {\n\tprotected abstract get<T extends keyof CacheEntryTypes>(\n\t\ttype: T,\n\t\tkey: string,\n\t): Promise<CacheEntryTypes[T] | null>;\n\tprotected abstract set<T extends keyof CacheEntryTypes>(\n\t\ttype: T,\n\t\tkey: string,\n\t\tvalue: CacheEntryTypes[T],\n\t): Promise<void>;\n\tprotected abstract delete<T extends keyof CacheEntryTypes>(type: T, key: string): Promise<void>;\n\tabstract clear<T extends keyof CacheEntryTypes>(type?: T): Promise<void>;\n\n\tasync getObject(id: string) {\n\t\tconst [owned, shared] = await Promise.all([\n\t\t\tthis.get('OwnedObject', id),\n\t\t\tthis.get('SharedOrImmutableObject', id),\n\t\t]);\n\n\t\treturn owned ?? shared ?? null;\n\t}\n\n\tasync getObjects(ids: string[]) {\n\t\treturn Promise.all(ids.map((id) => this.getObject(id)));\n\t}\n\n\tasync addObject(object: ObjectCacheEntry) {\n\t\tif (object.owner) {\n\t\t\tawait this.set('OwnedObject', object.objectId, object);\n\t\t} else {\n\t\t\tawait this.set('SharedOrImmutableObject', object.objectId, object);\n\t\t}\n\n\t\treturn object;\n\t}\n\n\tasync addObjects(objects: ObjectCacheEntry[]) {\n\t\tawait Promise.all(objects.map(async (object) => this.addObject(object)));\n\t}\n\n\tasync deleteObject(id: string) {\n\t\tawait Promise.all([this.delete('OwnedObject', id), this.delete('SharedOrImmutableObject', id)]);\n\t}\n\n\tasync deleteObjects(ids: string[]) {\n\t\tawait Promise.all(ids.map((id) => this.deleteObject(id)));\n\t}\n\n\tasync getMoveFunctionDefinition(ref: { package: string; module: string; function: string }) {\n\t\tconst functionName = `${normalizeSuiAddress(ref.package)}::${ref.module}::${ref.function}`;\n\t\treturn this.get('MoveFunction', functionName);\n\t}\n\n\tasync addMoveFunctionDefinition(functionEntry: MoveFunctionCacheEntry) {\n\t\tconst pkg = normalizeSuiAddress(functionEntry.package);\n\t\tconst functionName = `${pkg}::${functionEntry.module}::${functionEntry.function}`;\n\t\tconst entry = {\n\t\t\t...functionEntry,\n\t\t\tpackage: pkg,\n\t\t};\n\n\t\tawait this.set('MoveFunction', functionName, entry);\n\n\t\treturn entry;\n\t}\n\n\tasync deleteMoveFunctionDefinition(ref: { package: string; module: string; function: string }) {\n\t\tconst functionName = `${normalizeSuiAddress(ref.package)}::${ref.module}::${ref.function}`;\n\t\tawait this.delete('MoveFunction', functionName);\n\t}\n\n\tasync getCustom<T>(key: string) {\n\t\treturn this.get('Custom', key) as Promise<T | null>;\n\t}\n\n\tasync setCustom<T>(key: string, value: T) {\n\t\treturn this.set('Custom', key, value);\n\t}\n\n\tasync deleteCustom(key: string) {\n\t\treturn this.delete('Custom', key);\n\t}\n}\n\nexport class InMemoryCache extends AsyncCache {\n\t#caches = {\n\t\tOwnedObject: new Map<string, ObjectCacheEntry>(),\n\t\tSharedOrImmutableObject: new Map<string, ObjectCacheEntry>(),\n\t\tMoveFunction: new Map<string, MoveFunctionCacheEntry>(),\n\t\tCustom: new Map<string, unknown>(),\n\t};\n\n\tprotected async get<T extends keyof CacheEntryTypes>(type: T, key: string) {\n\t\treturn (this.#caches[type].get(key) as CacheEntryTypes[T]) ?? null;\n\t}\n\n\tprotected async set<T extends keyof CacheEntryTypes>(\n\t\ttype: T,\n\t\tkey: string,\n\t\tvalue: CacheEntryTypes[T],\n\t) {\n\t\t(this.#caches[type] as Map<string, typeof value>).set(key, value as never);\n\t}\n\n\tprotected async delete<T extends keyof CacheEntryTypes>(type: T, key: string) {\n\t\tthis.#caches[type].delete(key);\n\t}\n\n\tasync clear<T extends keyof CacheEntryTypes>(type?: T) {\n\t\tif (type) {\n\t\t\tthis.#caches[type].clear();\n\t\t} else {\n\t\t\tfor (const cache of Object.values(this.#caches)) {\n\t\t\t\tcache.clear();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport interface ObjectCacheOptions {\n\tcache?: AsyncCache;\n\tonEffects?: (effects: typeof bcs.TransactionEffects.$inferType) => Promise<void>;\n}\n\nexport class ObjectCache {\n\t#cache: AsyncCache;\n\t#onEffects?: (effects: typeof bcs.TransactionEffects.$inferType) => Promise<void>;\n\n\tconstructor({ cache = new InMemoryCache(), onEffects }: ObjectCacheOptions) {\n\t\tthis.#cache = cache;\n\t\tthis.#onEffects = onEffects;\n\t}\n\n\tasPlugin(): TransactionPlugin {\n\t\treturn async (transactionData, _options, next) => {\n\t\t\tconst unresolvedObjects = transactionData.inputs\n\t\t\t\t.filter((input) => input.UnresolvedObject)\n\t\t\t\t.map((input) => input.UnresolvedObject!.objectId);\n\n\t\t\tconst cached = (await this.#cache.getObjects(unresolvedObjects)).filter(\n\t\t\t\t(obj) => obj !== null,\n\t\t\t);\n\n\t\t\tconst byId = new Map(cached.map((obj) => [obj!.objectId, obj]));\n\n\t\t\tfor (const input of transactionData.inputs) {\n\t\t\t\tif (!input.UnresolvedObject) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst cached = byId.get(input.UnresolvedObject.objectId);\n\n\t\t\t\tif (!cached) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (cached.initialSharedVersion && !input.UnresolvedObject.initialSharedVersion) {\n\t\t\t\t\tinput.UnresolvedObject.initialSharedVersion = cached.initialSharedVersion;\n\t\t\t\t} else {\n\t\t\t\t\tif (cached.version && !input.UnresolvedObject.version) {\n\t\t\t\t\t\tinput.UnresolvedObject.version = cached.version;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (cached.digest && !input.UnresolvedObject.digest) {\n\t\t\t\t\t\tinput.UnresolvedObject.digest = cached.digest;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait Promise.all(\n\t\t\t\ttransactionData.commands.map(async (commands) => {\n\t\t\t\t\tif (commands.MoveCall) {\n\t\t\t\t\t\tconst def = await this.getMoveFunctionDefinition({\n\t\t\t\t\t\t\tpackage: commands.MoveCall.package,\n\t\t\t\t\t\t\tmodule: commands.MoveCall.module,\n\t\t\t\t\t\t\tfunction: commands.MoveCall.function,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (def) {\n\t\t\t\t\t\t\tcommands.MoveCall._argumentTypes = def.parameters;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\tawait next();\n\n\t\t\tawait Promise.all(\n\t\t\t\ttransactionData.commands.map(async (commands) => {\n\t\t\t\t\tif (commands.MoveCall?._argumentTypes) {\n\t\t\t\t\t\tawait this.#cache.addMoveFunctionDefinition({\n\t\t\t\t\t\t\tpackage: commands.MoveCall.package,\n\t\t\t\t\t\t\tmodule: commands.MoveCall.module,\n\t\t\t\t\t\t\tfunction: commands.MoveCall.function,\n\t\t\t\t\t\t\tparameters: commands.MoveCall._argumentTypes,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t);\n\t\t};\n\t}\n\n\tasync clear() {\n\t\tawait this.#cache.clear();\n\t}\n\n\tasync getMoveFunctionDefinition(ref: { package: string; module: string; function: string }) {\n\t\treturn this.#cache.getMoveFunctionDefinition(ref);\n\t}\n\n\tasync getObjects(ids: string[]) {\n\t\treturn this.#cache.getObjects(ids);\n\t}\n\n\tasync deleteObjects(ids: string[]) {\n\t\treturn this.#cache.deleteObjects(ids);\n\t}\n\n\tasync clearOwnedObjects() {\n\t\tawait this.#cache.clear('OwnedObject');\n\t}\n\n\tasync clearCustom() {\n\t\tawait this.#cache.clear('Custom');\n\t}\n\n\tasync getCustom<T>(key: string) {\n\t\treturn this.#cache.getCustom<T>(key);\n\t}\n\n\tasync setCustom<T>(key: string, value: T) {\n\t\treturn this.#cache.setCustom(key, value);\n\t}\n\n\tasync deleteCustom(key: string) {\n\t\treturn this.#cache.deleteCustom(key);\n\t}\n\n\tasync applyEffects(effects: typeof bcs.TransactionEffects.$inferType) {\n\t\tif (!effects.V2) {\n\t\t\tthrow new Error(`Unsupported transaction effects version ${effects.$kind}`);\n\t\t}\n\n\t\tconst { lamportVersion, changedObjects } = effects.V2;\n\n\t\tconst deletedIds: string[] = [];\n\t\tconst addedObjects: ObjectCacheEntry[] = [];\n\n\t\tchangedObjects.forEach(([id, change]) => {\n\t\t\tif (change.outputState.NotExist) {\n\t\t\t\tdeletedIds.push(id);\n\t\t\t} else if (change.outputState.ObjectWrite) {\n\t\t\t\tconst [digest, owner] = change.outputState.ObjectWrite;\n\n\t\t\t\taddedObjects.push({\n\t\t\t\t\tobjectId: id,\n\t\t\t\t\tdigest,\n\t\t\t\t\tversion: lamportVersion,\n\t\t\t\t\towner: owner.AddressOwner ?? owner.ObjectOwner ?? null,\n\t\t\t\t\tinitialSharedVersion: owner.Shared?.initialSharedVersion ?? null,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tawait Promise.all([\n\t\t\tthis.#cache.addObjects(addedObjects),\n\t\t\tthis.#cache.deleteObjects(deletedIds),\n\t\t\tthis.#onEffects?.(effects),\n\t\t]);\n\t}\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { bcs } from '../../bcs/index.js';\nimport type { ClientWithCoreApi } from '../../client/core.js';\nimport { coreClientResolveTransactionPlugin } from '../../client/core-resolver.js';\nimport type { SuiClientTypes } from '../../client/types.js';\nimport type { Signer } from '../../cryptography/keypair.js';\nimport type { BuildTransactionOptions } from '../resolve.js';\nimport type { ObjectCacheOptions } from '../ObjectCache.js';\nimport { ObjectCache } from '../ObjectCache.js';\nimport type { Transaction } from '../Transaction.js';\nimport { isTransaction } from '../Transaction.js';\n\nexport interface ExecuteTransactionOptions<Include extends SuiClientTypes.TransactionInclude = {}> {\n\ttransaction: Transaction | Uint8Array;\n\tsignatures: string[];\n\tinclude?: Include & SuiClientTypes.TransactionInclude;\n}\n\nexport class CachingTransactionExecutor {\n\t#client: ClientWithCoreApi;\n\t#lastDigest: string | null = null;\n\tcache: ObjectCache;\n\n\tconstructor({\n\t\tclient,\n\t\t...options\n\t}: ObjectCacheOptions & {\n\t\tclient: ClientWithCoreApi;\n\t}) {\n\t\tthis.#client = client;\n\t\tthis.cache = new ObjectCache(options);\n\t}\n\n\t/**\n\t * Clears all Owned objects\n\t * Immutable objects, Shared objects, and Move function definitions will be preserved\n\t */\n\tasync reset() {\n\t\tawait Promise.all([\n\t\t\tthis.cache.clearOwnedObjects(),\n\t\t\tthis.cache.clearCustom(),\n\t\t\tthis.waitForLastTransaction(),\n\t\t]);\n\t}\n\n\tasync buildTransaction({\n\t\ttransaction,\n\t\t...options\n\t}: { transaction: Transaction } & BuildTransactionOptions) {\n\t\ttransaction.addBuildPlugin(this.cache.asPlugin());\n\t\ttransaction.addBuildPlugin(coreClientResolveTransactionPlugin);\n\t\treturn transaction.build({\n\t\t\tclient: this.#client,\n\t\t\t...options,\n\t\t});\n\t}\n\n\tasync executeTransaction<Include extends SuiClientTypes.TransactionInclude = {}>({\n\t\ttransaction,\n\t\tsignatures,\n\t\tinclude,\n\t}: ExecuteTransactionOptions<Include>): Promise<\n\t\tSuiClientTypes.TransactionResult<Include & { effects: true }>\n\t> {\n\t\tconst bytes = isTransaction(transaction)\n\t\t\t? await this.buildTransaction({ transaction })\n\t\t\t: transaction;\n\n\t\tconst results = await this.#client.core.executeTransaction({\n\t\t\ttransaction: bytes,\n\t\t\tsignatures,\n\t\t\tinclude: {\n\t\t\t\t...include,\n\t\t\t\teffects: true,\n\t\t\t},\n\t\t});\n\n\t\tconst tx = results.$kind === 'Transaction' ? results.Transaction : results.FailedTransaction;\n\t\tif (tx.effects?.bcs) {\n\t\t\tconst effects = bcs.TransactionEffects.parse(tx.effects.bcs);\n\t\t\tawait this.applyEffects(effects);\n\t\t}\n\n\t\treturn results as SuiClientTypes.TransactionResult<Include & { effects: true }>;\n\t}\n\n\tasync signAndExecuteTransaction<Include extends SuiClientTypes.TransactionInclude = {}>({\n\t\tinclude,\n\t\ttransaction,\n\t\tsigner,\n\t}: {\n\t\ttransaction: Transaction;\n\t\tsigner: Signer;\n\t\tinclude?: Include & SuiClientTypes.TransactionInclude;\n\t}): Promise<SuiClientTypes.TransactionResult<Include & { effects: true }>> {\n\t\ttransaction.setSenderIfNotSet(signer.toSuiAddress());\n\t\tconst bytes = await this.buildTransaction({ transaction });\n\t\tconst { signature } = await signer.signTransaction(bytes);\n\t\treturn this.executeTransaction({\n\t\t\ttransaction: bytes,\n\t\t\tsignatures: [signature],\n\t\t\tinclude,\n\t\t});\n\t}\n\n\tasync applyEffects(effects: typeof bcs.TransactionEffects.$inferType) {\n\t\tthis.#lastDigest = effects.V2?.transactionDigest ?? null;\n\t\tawait this.cache.applyEffects(effects);\n\t}\n\n\tasync waitForLastTransaction() {\n\t\tif (this.#lastDigest) {\n\t\t\tawait this.#client.core.waitForTransaction({ digest: this.#lastDigest });\n\t\t\tthis.#lastDigest = null;\n\t\t}\n\t}\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nexport class SerialQueue {\n\t#queue: Array<() => void> = [];\n\n\tasync runTask<T>(task: () => Promise<T>): Promise<T> {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.#queue.push(() => {\n\t\t\t\ttask()\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\tthis.#queue.shift();\n\t\t\t\t\t\tif (this.#queue.length > 0) {\n\t\t\t\t\t\t\tthis.#queue[0]();\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.then(resolve, reject);\n\t\t\t});\n\n\t\t\tif (this.#queue.length === 1) {\n\t\t\t\tthis.#queue[0]();\n\t\t\t}\n\t\t});\n\t}\n}\n\nexport class ParallelQueue {\n\t#queue: Array<() => void> = [];\n\tactiveTasks = 0;\n\tmaxTasks: number;\n\n\tconstructor(maxTasks: number) {\n\t\tthis.maxTasks = maxTasks;\n\t}\n\n\trunTask<T>(task: () => Promise<T>): Promise<T> {\n\t\treturn new Promise<T>((resolve, reject) => {\n\t\t\tif (this.activeTasks < this.maxTasks) {\n\t\t\t\tthis.activeTasks++;\n\n\t\t\t\ttask()\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\tif (this.#queue.length > 0) {\n\t\t\t\t\t\t\tthis.#queue.shift()!();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.activeTasks--;\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.then(resolve, reject);\n\t\t\t} else {\n\t\t\t\tthis.#queue.push(() => {\n\t\t\t\t\ttask()\n\t\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\t\tif (this.#queue.length > 0) {\n\t\t\t\t\t\t\t\tthis.#queue.shift()!();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.activeTasks--;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.then(resolve, reject);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { bcs } from '../../bcs/index.js';\nimport type { ClientWithCoreApi } from '../../client/core.js';\nimport type { SuiClientTypes } from '../../client/types.js';\nimport type { Signer } from '../../cryptography/keypair.js';\nimport type { ObjectCacheOptions } from '../ObjectCache.js';\nimport { isTransaction, Transaction } from '../Transaction.js';\nimport { CachingTransactionExecutor } from './caching.js';\nimport { SerialQueue } from './queue.js';\n\nconst EPOCH_BOUNDARY_WINDOW = 60_000;\n\ninterface SerialTransactionExecutorBaseOptions extends Omit<ObjectCacheOptions, 'address'> {\n\tclient: ClientWithCoreApi;\n\tsigner: Signer;\n\tdefaultGasBudget?: bigint;\n}\n\nexport interface SerialTransactionExecutorCoinOptions extends SerialTransactionExecutorBaseOptions {\n\tgasMode?: 'coins';\n}\n\nexport interface SerialTransactionExecutorAddressBalanceOptions extends SerialTransactionExecutorBaseOptions {\n\tgasMode: 'addressBalance';\n}\n\nexport type SerialTransactionExecutorOptions =\n\t| SerialTransactionExecutorCoinOptions\n\t| SerialTransactionExecutorAddressBalanceOptions;\n\nexport class SerialTransactionExecutor {\n\t#queue = new SerialQueue();\n\t#signer: Signer;\n\t#client: ClientWithCoreApi;\n\t#cache: CachingTransactionExecutor;\n\t#defaultGasBudget: bigint;\n\t#gasMode: 'coins' | 'addressBalance';\n\t#epochInfo: null | {\n\t\tepoch: string;\n\t\texpiration: number;\n\t\tchainIdentifier: string;\n\t} = null;\n\t#epochInfoPromise: Promise<void> | null = null;\n\n\tconstructor(options: SerialTransactionExecutorOptions) {\n\t\tconst { signer, defaultGasBudget = 50_000_000n, client, cache } = options;\n\t\tthis.#signer = signer;\n\t\tthis.#client = client;\n\t\tthis.#defaultGasBudget = defaultGasBudget;\n\t\tthis.#gasMode = options.gasMode ?? 'coins';\n\t\tthis.#cache = new CachingTransactionExecutor({\n\t\t\tclient,\n\t\t\tcache,\n\t\t\tonEffects: (effects) => this.#cacheGasCoin(effects),\n\t\t});\n\t}\n\n\tasync applyEffects(effects: typeof bcs.TransactionEffects.$inferType) {\n\t\treturn this.#cache.applyEffects(effects);\n\t}\n\n\t#cacheGasCoin = async (effects: typeof bcs.TransactionEffects.$inferType) => {\n\t\tif (this.#gasMode === 'addressBalance' || !effects.V2) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst gasCoin = getGasCoinFromEffects(effects).ref;\n\t\tif (gasCoin) {\n\t\t\tthis.#cache.cache.setCustom('gasCoin', gasCoin);\n\t\t} else {\n\t\t\tthis.#cache.cache.deleteCustom('gasCoin');\n\t\t}\n\t};\n\n\tasync buildTransaction(transaction: Transaction) {\n\t\treturn this.#queue.runTask(() => this.#buildTransaction(transaction));\n\t}\n\n\t#buildTransaction = async (transaction: Transaction) => {\n\t\tawait transaction.prepareForSerialization({\n\t\t\tclient: this.#client,\n\t\t\tsupportedIntents: ['CoinWithBalance'],\n\t\t});\n\t\tconst copy = Transaction.from(transaction);\n\n\t\tif (this.#gasMode === 'addressBalance') {\n\t\t\tcopy.setGasPayment([]);\n\t\t\tcopy.setExpiration(await this.#getValidDuringExpiration());\n\t\t} else {\n\t\t\t// Coin mode: use cached gas coin if available\n\t\t\tconst gasCoin = await this.#cache.cache.getCustom<{\n\t\t\t\tobjectId: string;\n\t\t\t\tversion: string;\n\t\t\t\tdigest: string;\n\t\t\t}>('gasCoin');\n\n\t\t\tif (gasCoin) {\n\t\t\t\tcopy.setGasPayment([gasCoin]);\n\t\t\t}\n\t\t}\n\n\t\tcopy.setGasBudgetIfNotSet(this.#defaultGasBudget);\n\t\tcopy.setSenderIfNotSet(this.#signer.toSuiAddress());\n\n\t\treturn this.#cache.buildTransaction({ transaction: copy });\n\t};\n\n\tasync #getValidDuringExpiration() {\n\t\tawait this.#ensureEpochInfo();\n\t\tconst currentEpoch = BigInt(this.#epochInfo!.epoch);\n\t\treturn {\n\t\t\tValidDuring: {\n\t\t\t\tminEpoch: String(currentEpoch),\n\t\t\t\tmaxEpoch: String(currentEpoch + 1n),\n\t\t\t\tminTimestamp: null,\n\t\t\t\tmaxTimestamp: null,\n\t\t\t\tchain: this.#epochInfo!.chainIdentifier,\n\t\t\t\tnonce: (Math.random() * 0x100000000) >>> 0,\n\t\t\t},\n\t\t};\n\t}\n\n\tasync #ensureEpochInfo(): Promise<void> {\n\t\tif (this.#epochInfo && this.#epochInfo.expiration - EPOCH_BOUNDARY_WINDOW - Date.now() > 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.#epochInfoPromise) {\n\t\t\tawait this.#epochInfoPromise;\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#epochInfoPromise = this.#fetchEpochInfo();\n\t\ttry {\n\t\t\tawait this.#epochInfoPromise;\n\t\t} finally {\n\t\t\tthis.#epochInfoPromise = null;\n\t\t}\n\t}\n\n\tasync #fetchEpochInfo(): Promise<void> {\n\t\tconst [{ systemState }, { chainIdentifier }] = await Promise.all([\n\t\t\tthis.#client.core.getCurrentSystemState(),\n\t\t\tthis.#client.core.getChainIdentifier(),\n\t\t]);\n\n\t\tthis.#epochInfo = {\n\t\t\tepoch: systemState.epoch,\n\t\t\texpiration:\n\t\t\t\tNumber(systemState.epochStartTimestampMs) + Number(systemState.parameters.epochDurationMs),\n\t\t\tchainIdentifier,\n\t\t};\n\t}\n\n\tresetCache() {\n\t\treturn this.#cache.reset();\n\t}\n\n\twaitForLastTransaction() {\n\t\treturn this.#cache.waitForLastTransaction();\n\t}\n\n\texecuteTransaction<Include extends SuiClientTypes.TransactionInclude = {}>(\n\t\ttransaction: Transaction | Uint8Array,\n\t\tinclude?: Include & SuiClientTypes.TransactionInclude,\n\t\tadditionalSignatures: string[] = [],\n\t): Promise<SuiClientTypes.TransactionResult<Include & { effects: true }>> {\n\t\treturn this.#queue.runTask(async () => {\n\t\t\tconst bytes = isTransaction(transaction)\n\t\t\t\t? await this.#buildTransaction(transaction)\n\t\t\t\t: transaction;\n\n\t\t\tconst { signature } = await this.#signer.signTransaction(bytes);\n\t\t\treturn this.#cache\n\t\t\t\t.executeTransaction({\n\t\t\t\t\tsignatures: [signature, ...additionalSignatures],\n\t\t\t\t\ttransaction: bytes,\n\t\t\t\t\tinclude,\n\t\t\t\t})\n\t\t\t\t.catch(async (error) => {\n\t\t\t\t\tawait this.resetCache();\n\t\t\t\t\tthrow error;\n\t\t\t\t});\n\t\t});\n\t}\n}\n\nexport function getGasCoinFromEffects(effects: typeof bcs.TransactionEffects.$inferType) {\n\tif (!effects.V2) {\n\t\tthrow new Error('Unexpected effects version');\n\t}\n\n\tconst gasObjectChange = effects.V2.changedObjects[effects.V2.gasObjectIndex!];\n\n\tif (!gasObjectChange) {\n\t\tthrow new Error('Gas object not found in effects');\n\t}\n\n\tconst [objectId, { outputState }] = gasObjectChange;\n\n\tif (!outputState.ObjectWrite) {\n\t\tthrow new Error('Unexpected gas object state');\n\t}\n\n\tconst [digest, owner] = outputState.ObjectWrite;\n\n\treturn {\n\t\tref: {\n\t\t\tobjectId,\n\t\t\tdigest,\n\t\t\tversion: effects.V2.lamportVersion,\n\t\t},\n\t\towner: owner.AddressOwner || owner.ObjectOwner!,\n\t};\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { promiseWithResolvers } from '@mysten/utils';\nimport type { SuiObjectRef } from '../../bcs/types.js';\nimport type { ClientWithCoreApi } from '../../client/core.js';\nimport { coreClientResolveTransactionPlugin } from '../../client/core-resolver.js';\nimport type { SuiClientTypes } from '../../client/types.js';\nimport type { Signer } from '../../cryptography/index.js';\nimport type { ObjectCacheOptions } from '../ObjectCache.js';\nimport { Transaction } from '../Transaction.js';\nimport { TransactionDataBuilder } from '../TransactionData.js';\nimport { CachingTransactionExecutor } from './caching.js';\nimport { ParallelQueue, SerialQueue } from './queue.js';\n\nconst PARALLEL_EXECUTOR_DEFAULTS = {\n\tcoinBatchSize: 20,\n\tinitialCoinBalance: 200_000_000n,\n\tminimumCoinBalance: 50_000_000n,\n\tmaxPoolSize: 50,\n} satisfies Partial<ParallelTransactionExecutorCoinOptions>;\n\nconst EPOCH_BOUNDARY_WINDOW = 60_000;\n\ninterface ParallelTransactionExecutorBaseOptions extends Omit<ObjectCacheOptions, 'address'> {\n\tclient: ClientWithCoreApi;\n\tsigner: Signer;\n\t/** The gasBudget to use if the transaction has not defined it's own gasBudget, defaults to `minimumCoinBalance` */\n\tdefaultGasBudget?: bigint;\n\t/** The maximum number of transactions that can be execute in parallel, this also determines the maximum number of gas coins that will be created */\n\tmaxPoolSize?: number;\n}\n\nexport interface ParallelTransactionExecutorCoinOptions extends ParallelTransactionExecutorBaseOptions {\n\t/** Gas mode - use owned coins for gas payments (default) */\n\tgasMode?: 'coins';\n\t/** The number of coins to create in a batch when refilling the gas pool */\n\tcoinBatchSize?: number;\n\t/** The initial balance of each coin created for the gas pool */\n\tinitialCoinBalance?: bigint;\n\t/** The minimum balance of a coin that can be reused for future transactions. If the gasCoin is below this value, it will be used when refilling the gasPool */\n\tminimumCoinBalance?: bigint;\n\t/** An initial list of coins used to fund the gas pool, uses all owned SUI coins by default */\n\tsourceCoins?: string[];\n}\n\nexport interface ParallelTransactionExecutorAddressBalanceOptions extends ParallelTransactionExecutorBaseOptions {\n\t/** Gas mode - use address balance for gas payments instead of owned coins */\n\tgasMode: 'addressBalance';\n}\n\n/** Options for ParallelTransactionExecutor - discriminated union based on gasMode */\nexport type ParallelTransactionExecutorOptions =\n\t| ParallelTransactionExecutorCoinOptions\n\t| ParallelTransactionExecutorAddressBalanceOptions;\n\ninterface CoinWithBalance {\n\tid: string;\n\tversion: string;\n\tdigest: string;\n\tbalance: bigint;\n}\nexport class ParallelTransactionExecutor {\n\t#signer: Signer;\n\t#client: ClientWithCoreApi;\n\t#gasMode: 'coins' | 'addressBalance';\n\t#coinBatchSize: number;\n\t#initialCoinBalance: bigint;\n\t#minimumCoinBalance: bigint;\n\t#defaultGasBudget: bigint;\n\t#maxPoolSize: number;\n\t#sourceCoins: Map<string, SuiObjectRef | null> | null;\n\t#coinPool: CoinWithBalance[] = [];\n\t#cache: CachingTransactionExecutor;\n\t#objectIdQueues = new Map<string, (() => void)[]>();\n\t#buildQueue = new SerialQueue();\n\t#executeQueue: ParallelQueue;\n\t#lastDigest: string | null = null;\n\t#cacheLock: Promise<void> | null = null;\n\t#pendingTransactions = 0;\n\t#epochInfo: null | {\n\t\tepoch: string;\n\t\tprice: bigint;\n\t\texpiration: number;\n\t\tchainIdentifier: string;\n\t} = null;\n\t#epochInfoPromise: Promise<void> | null = null;\n\n\tconstructor(options: ParallelTransactionExecutorOptions) {\n\t\tthis.#signer = options.signer;\n\t\tthis.#client = options.client;\n\t\tthis.#gasMode = options.gasMode ?? 'coins';\n\n\t\tif (this.#gasMode === 'coins') {\n\t\t\tconst coinOptions = options as ParallelTransactionExecutorCoinOptions;\n\t\t\tthis.#coinBatchSize = coinOptions.coinBatchSize ?? PARALLEL_EXECUTOR_DEFAULTS.coinBatchSize;\n\t\t\tthis.#initialCoinBalance =\n\t\t\t\tcoinOptions.initialCoinBalance ?? PARALLEL_EXECUTOR_DEFAULTS.initialCoinBalance;\n\t\t\tthis.#minimumCoinBalance =\n\t\t\t\tcoinOptions.minimumCoinBalance ?? PARALLEL_EXECUTOR_DEFAULTS.minimumCoinBalance;\n\t\t\tthis.#sourceCoins = coinOptions.sourceCoins\n\t\t\t\t? new Map(coinOptions.sourceCoins.map((id) => [id, null]))\n\t\t\t\t: null;\n\t\t} else {\n\t\t\tthis.#coinBatchSize = 0;\n\t\t\tthis.#initialCoinBalance = 0n;\n\t\t\tthis.#minimumCoinBalance = PARALLEL_EXECUTOR_DEFAULTS.minimumCoinBalance;\n\t\t\tthis.#sourceCoins = null;\n\t\t}\n\n\t\tthis.#defaultGasBudget = options.defaultGasBudget ?? this.#minimumCoinBalance;\n\t\tthis.#maxPoolSize = options.maxPoolSize ?? PARALLEL_EXECUTOR_DEFAULTS.maxPoolSize;\n\t\tthis.#cache = new CachingTransactionExecutor({\n\t\t\tclient: options.client,\n\t\t\tcache: options.cache,\n\t\t});\n\t\tthis.#executeQueue = new ParallelQueue(this.#maxPoolSize);\n\t}\n\n\tresetCache() {\n\t\tthis.#epochInfo = null;\n\t\treturn this.#updateCache(() => this.#cache.reset());\n\t}\n\n\tasync waitForLastTransaction() {\n\t\tawait this.#updateCache(() => this.#waitForLastDigest());\n\t}\n\n\tasync executeTransaction<Include extends SuiClientTypes.TransactionInclude = {}>(\n\t\ttransaction: Transaction,\n\t\tinclude?: Include & SuiClientTypes.TransactionInclude,\n\t\tadditionalSignatures: string[] = [],\n\t): Promise<SuiClientTypes.TransactionResult<Include & { effects: true }>> {\n\t\tconst { promise, resolve, reject } =\n\t\t\tpromiseWithResolvers<SuiClientTypes.TransactionResult<Include & { effects: true }>>();\n\t\tconst usedObjects = await this.#getUsedObjects(transaction);\n\n\t\tconst execute = () => {\n\t\t\tthis.#executeQueue.runTask(() => {\n\t\t\t\tconst promise = this.#execute(transaction, usedObjects, include, additionalSignatures);\n\n\t\t\t\treturn promise.then(resolve, reject);\n\t\t\t});\n\t\t};\n\n\t\tconst conflicts = new Set<string>();\n\n\t\tusedObjects.forEach((objectId) => {\n\t\t\tconst queue = this.#objectIdQueues.get(objectId);\n\t\t\tif (queue) {\n\t\t\t\tconflicts.add(objectId);\n\t\t\t\tthis.#objectIdQueues.get(objectId)!.push(() => {\n\t\t\t\t\tconflicts.delete(objectId);\n\t\t\t\t\tif (conflicts.size === 0) {\n\t\t\t\t\t\texecute();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.#objectIdQueues.set(objectId, []);\n\t\t\t}\n\t\t});\n\n\t\tif (conflicts.size === 0) {\n\t\t\texecute();\n\t\t}\n\n\t\treturn promise;\n\t}\n\n\tasync #getUsedObjects(transaction: Transaction) {\n\t\tconst usedObjects = new Set<string>();\n\t\tlet serialized = false;\n\n\t\ttransaction.addSerializationPlugin(async (blockData, _options, next) => {\n\t\t\tawait next();\n\n\t\t\tif (serialized) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tserialized = true;\n\n\t\t\tblockData.inputs.forEach((input) => {\n\t\t\t\tif (input.Object?.ImmOrOwnedObject?.objectId) {\n\t\t\t\t\tusedObjects.add(input.Object.ImmOrOwnedObject.objectId);\n\t\t\t\t} else if (input.Object?.Receiving?.objectId) {\n\t\t\t\t\tusedObjects.add(input.Object.Receiving.objectId);\n\t\t\t\t} else if (\n\t\t\t\t\tinput.UnresolvedObject?.objectId &&\n\t\t\t\t\t!input.UnresolvedObject.initialSharedVersion\n\t\t\t\t) {\n\t\t\t\t\tusedObjects.add(input.UnresolvedObject.objectId);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\tawait transaction.prepareForSerialization({ client: this.#client });\n\n\t\treturn usedObjects;\n\t}\n\n\tasync #execute<Include extends SuiClientTypes.TransactionInclude = {}>(\n\t\ttransaction: Transaction,\n\t\tusedObjects: Set<string>,\n\t\tinclude?: Include,\n\t\tadditionalSignatures: string[] = [],\n\t): Promise<SuiClientTypes.TransactionResult<Include & { effects: true }>> {\n\t\tlet gasCoin: CoinWithBalance | null = null;\n\t\ttry {\n\t\t\ttransaction.setSenderIfNotSet(this.#signer.toSuiAddress());\n\n\t\t\tawait this.#buildQueue.runTask(async () => {\n\t\t\t\tconst data = transaction.getData();\n\n\t\t\t\tif (!data.gasData.price) {\n\t\t\t\t\ttransaction.setGasPrice(await this.#getGasPrice());\n\t\t\t\t}\n\n\t\t\t\ttransaction.setGasBudgetIfNotSet(this.#defaultGasBudget);\n\n\t\t\t\tawait this.#updateCache();\n\t\t\t\tthis.#pendingTransactions++;\n\n\t\t\t\tif (this.#gasMode === 'addressBalance') {\n\t\t\t\t\t// Address balance mode: use empty gas payment with ValidDuring expiration\n\t\t\t\t\ttransaction.setGasPayment([]);\n\t\t\t\t\ttransaction.setExpiration(await this.#getValidDuringExpiration());\n\t\t\t\t} else {\n\t\t\t\t\t// Coin mode: use gas coin from pool\n\t\t\t\t\tgasCoin = await this.#getGasCoin();\n\t\t\t\t\ttransaction.setGasPayment([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tobjectId: gasCoin.id,\n\t\t\t\t\t\t\tversion: gasCoin.version,\n\t\t\t\t\t\t\tdigest: gasCoin.digest,\n\t\t\t\t\t\t},\n\t\t\t\t\t]);\n\t\t\t\t}\n\n\t\t\t\t// Resolve cached references\n\t\t\t\tawait this.#cache.buildTransaction({ transaction, onlyTransactionKind: true });\n\t\t\t});\n\n\t\t\tconst bytes = await transaction.build({ client: this.#client });\n\n\t\t\tconst { signature } = await this.#signer.signTransaction(bytes);\n\n\t\t\tconst results = await this.#cache.executeTransaction({\n\t\t\t\ttransaction: bytes,\n\t\t\t\tsignatures: [signature, ...additionalSignatures],\n\t\t\t\tinclude,\n\t\t\t});\n\n\t\t\tconst tx = results.$kind === 'Transaction' ? results.Transaction : results.FailedTransaction;\n\t\t\tconst effects = tx.effects!;\n\t\t\tconst gasObject = effects.gasObject;\n\t\t\tconst gasUsed = effects.gasUsed;\n\n\t\t\tif (gasCoin && gasUsed && gasObject) {\n\t\t\t\tconst coin = gasCoin as CoinWithBalance;\n\t\t\t\tconst gasOwner = gasObject.outputOwner?.AddressOwner ?? gasObject.outputOwner?.ObjectOwner;\n\n\t\t\t\tif (gasOwner === this.#signer.toSuiAddress()) {\n\t\t\t\t\tconst totalUsed =\n\t\t\t\t\t\tBigInt(gasUsed.computationCost) +\n\t\t\t\t\t\tBigInt(gasUsed.storageCost) -\n\t\t\t\t\t\tBigInt(gasUsed.storageRebate);\n\t\t\t\t\tconst remainingBalance = coin.balance - totalUsed;\n\n\t\t\t\t\tlet usesGasCoin = false;\n\t\t\t\t\tnew TransactionDataBuilder(transaction.getData()).mapArguments((arg) => {\n\t\t\t\t\t\tif (arg.$kind === 'GasCoin') {\n\t\t\t\t\t\t\tusesGasCoin = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn arg;\n\t\t\t\t\t});\n\n\t\t\t\t\tconst gasRef = {\n\t\t\t\t\t\tobjectId: gasObject.objectId,\n\t\t\t\t\t\tversion: gasObject.outputVersion!,\n\t\t\t\t\t\tdigest: gasObject.outputDigest!,\n\t\t\t\t\t};\n\n\t\t\t\t\tif (!usesGasCoin && remainingBalance >= this.#minimumCoinBalance) {\n\t\t\t\t\t\tthis.#coinPool.push({\n\t\t\t\t\t\t\tid: gasRef.objectId,\n\t\t\t\t\t\t\tversion: gasRef.version,\n\t\t\t\t\t\t\tdigest: gasRef.digest,\n\t\t\t\t\t\t\tbalance: remainingBalance,\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (!this.#sourceCoins) {\n\t\t\t\t\t\t\tthis.#sourceCoins = new Map();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.#sourceCoins.set(gasRef.objectId, gasRef);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.#lastDigest = tx.digest;\n\n\t\t\treturn results as SuiClientTypes.TransactionResult<Include & { effects: true }>;\n\t\t} catch (error) {\n\t\t\tif (gasCoin) {\n\t\t\t\tif (!this.#sourceCoins) {\n\t\t\t\t\tthis.#sourceCoins = new Map();\n\t\t\t\t}\n\n\t\t\t\tthis.#sourceCoins.set((gasCoin as CoinWithBalance).id, null);\n\t\t\t}\n\n\t\t\tawait this.#updateCache(async () => {\n\t\t\t\tawait Promise.all([\n\t\t\t\t\tthis.#cache.cache.deleteObjects([...usedObjects]),\n\t\t\t\t\tthis.#waitForLastDigest(),\n\t\t\t\t]);\n\t\t\t});\n\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tusedObjects.forEach((objectId) => {\n\t\t\t\tconst queue = this.#objectIdQueues.get(objectId);\n\t\t\t\tif (queue && queue.length > 0) {\n\t\t\t\t\tqueue.shift()!();\n\t\t\t\t} else if (queue) {\n\t\t\t\t\tthis.#objectIdQueues.delete(objectId);\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.#pendingTransactions--;\n\t\t}\n\t}\n\n\t/** Helper for synchronizing cache updates, by ensuring only one update happens at a time. This can also be used to wait for any pending cache updates */\n\tasync #updateCache(fn?: () => Promise<void>) {\n\t\tif (this.#cacheLock) {\n\t\t\tawait this.#cacheLock;\n\t\t}\n\n\t\tthis.#cacheLock =\n\t\t\tfn?.().then(\n\t\t\t\t() => {\n\t\t\t\t\tthis.#cacheLock = null;\n\t\t\t\t},\n\t\t\t\t() => {},\n\t\t\t) ?? null;\n\t}\n\n\tasync #waitForLastDigest() {\n\t\tconst digest = this.#lastDigest;\n\t\tif (digest) {\n\t\t\tthis.#lastDigest = null;\n\t\t\tawait this.#client.core.waitForTransaction({ digest });\n\t\t}\n\t}\n\n\tasync #getGasCoin() {\n\t\tif (this.#coinPool.length === 0 && this.#pendingTransactions <= this.#maxPoolSize) {\n\t\t\tawait this.#refillCoinPool();\n\t\t}\n\n\t\tif (this.#coinPool.length === 0) {\n\t\t\tthrow new Error('No coins available');\n\t\t}\n\n\t\tconst coin = this.#coinPool.shift()!;\n\t\treturn coin;\n\t}\n\n\tasync #getGasPrice(): Promise<bigint> {\n\t\tawait this.#ensureEpochInfo();\n\t\treturn this.#epochInfo!.price;\n\t}\n\n\tasync #getValidDuringExpiration() {\n\t\tawait this.#ensureEpochInfo();\n\t\tconst currentEpoch = BigInt(this.#epochInfo!.epoch);\n\t\treturn {\n\t\t\tValidDuring: {\n\t\t\t\tminEpoch: String(currentEpoch),\n\t\t\t\tmaxEpoch: String(currentEpoch + 1n),\n\t\t\t\tminTimestamp: null,\n\t\t\t\tmaxTimestamp: null,\n\t\t\t\tchain: this.#epochInfo!.chainIdentifier,\n\t\t\t\tnonce: (Math.random() * 0x100000000) >>> 0,\n\t\t\t},\n\t\t};\n\t}\n\n\tasync #ensureEpochInfo(): Promise<void> {\n\t\tif (this.#epochInfo && this.#epochInfo.expiration - EPOCH_BOUNDARY_WINDOW - Date.now() > 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.#epochInfoPromise) {\n\t\t\tawait this.#epochInfoPromise;\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#epochInfoPromise = this.#fetchEpochInfo();\n\t\ttry {\n\t\t\tawait this.#epochInfoPromise;\n\t\t} finally {\n\t\t\tthis.#epochInfoPromise = null;\n\t\t}\n\t}\n\n\tasync #fetchEpochInfo(): Promise<void> {\n\t\tconst [{ systemState }, { chainIdentifier }] = await Promise.all([\n\t\t\tthis.#client.core.getCurrentSystemState(),\n\t\t\tthis.#client.core.getChainIdentifier(),\n\t\t]);\n\n\t\tthis.#epochInfo = {\n\t\t\tepoch: systemState.epoch,\n\t\t\tprice: BigInt(systemState.referenceGasPrice),\n\t\t\texpiration:\n\t\t\t\tNumber(systemState.epochStartTimestampMs) + Number(systemState.parameters.epochDurationMs),\n\t\t\tchainIdentifier,\n\t\t};\n\t}\n\n\tasync #refillCoinPool() {\n\t\tconst batchSize = Math.min(\n\t\t\tthis.#coinBatchSize,\n\t\t\tthis.#maxPoolSize - (this.#coinPool.length + this.#pendingTransactions) + 1,\n\t\t);\n\n\t\tif (batchSize === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst txb = new Transaction();\n\t\tconst address = this.#signer.toSuiAddress();\n\t\ttxb.setSender(address);\n\n\t\tif (this.#sourceCoins) {\n\t\t\tconst refs = [];\n\t\t\tconst ids = [];\n\t\t\tfor (const [id, ref] of this.#sourceCoins) {\n\t\t\t\tif (ref) {\n\t\t\t\t\trefs.push(ref);\n\t\t\t\t} else {\n\t\t\t\t\tids.push(id);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ids.length > 0) {\n\t\t\t\tconst { objects } = await this.#client.core.getObjects({\n\t\t\t\t\tobjectIds: ids,\n\t\t\t\t});\n\t\t\t\trefs.push(\n\t\t\t\t\t...objects\n\t\t\t\t\t\t.filter((obj): obj is SuiClientTypes.Object => !(obj instanceof Error))\n\t\t\t\t\t\t.map((obj) => ({\n\t\t\t\t\t\t\tobjectId: obj.objectId,\n\t\t\t\t\t\t\tversion: obj.version,\n\t\t\t\t\t\t\tdigest: obj.digest,\n\t\t\t\t\t\t})),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\ttxb.setGasPayment(refs);\n\t\t\tthis.#sourceCoins = new Map();\n\t\t}\n\n\t\tconst amounts = new Array(batchSize).fill(this.#initialCoinBalance);\n\t\tconst splitResults = txb.splitCoins(txb.gas, amounts);\n\t\tconst coinResults = [];\n\t\tfor (let i = 0; i < amounts.length; i++) {\n\t\t\tcoinResults.push(splitResults[i]);\n\t\t}\n\t\ttxb.transferObjects(coinResults, address);\n\n\t\tawait this.waitForLastTransaction();\n\n\t\ttxb.addBuildPlugin(coreClientResolveTransactionPlugin);\n\t\tconst bytes = await txb.build({ client: this.#client });\n\t\tconst { signature } = await this.#signer.signTransaction(bytes);\n\n\t\tconst result = await this.#client.core.executeTransaction({\n\t\t\ttransaction: bytes,\n\t\t\tsignatures: [signature],\n\t\t\tinclude: { effects: true },\n\t\t});\n\n\t\tconst tx = result.$kind === 'Transaction' ? result.Transaction : result.FailedTransaction;\n\t\tconst effects = tx.effects!;\n\n\t\teffects.changedObjects.forEach((changedObj) => {\n\t\t\tif (\n\t\t\t\tchangedObj.objectId === effects.gasObject?.objectId ||\n\t\t\t\tchangedObj.outputState !== 'ObjectWrite'\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.#coinPool.push({\n\t\t\t\tid: changedObj.objectId,\n\t\t\t\tversion: changedObj.outputVersion!,\n\t\t\t\tdigest: changedObj.outputDigest!,\n\t\t\t\tbalance: BigInt(this.#initialCoinBalance),\n\t\t\t});\n\t\t});\n\n\t\tif (!this.#sourceCoins) {\n\t\t\tthis.#sourceCoins = new Map();\n\t\t}\n\n\t\tconst gasObject = effects.gasObject!;\n\t\tthis.#sourceCoins!.set(gasObject.objectId, {\n\t\t\tobjectId: gasObject.objectId,\n\t\t\tversion: gasObject.outputVersion!,\n\t\t\tdigest: gasObject.outputDigest!,\n\t\t});\n\n\t\tawait this.#client.core.waitForTransaction({ digest: tx.digest });\n\t}\n}\n","// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { Argument } from './data/internal.js';\nimport type { Inputs } from './Inputs.js';\nimport { createObjectMethods } from './object.js';\nimport { createPure } from './pure.js';\nimport type { Transaction, TransactionObjectArgument } from './Transaction.js';\n\nexport const Arguments = {\n\tpure: createPure<(tx: Transaction) => Argument>((value) => (tx) => tx.pure(value)) as ReturnType<\n\t\ttypeof createPure<(tx: Transaction) => Argument>\n\t>,\n\tobject: createObjectMethods<TransactionObjectArgument>((value) => (tx) => tx.object(value)),\n\tsharedObjectRef:\n\t\t(...args: Parameters<(typeof Inputs)['SharedObjectRef']>) =>\n\t\t(tx: Transaction) =>\n\t\t\ttx.sharedObjectRef(...args),\n\tobjectRef:\n\t\t(...args: Parameters<(typeof Inputs)['ObjectRef']>) =>\n\t\t(tx: Transaction) =>\n\t\t\ttx.objectRef(...args),\n\treceivingRef:\n\t\t(...args: Parameters<(typeof Inputs)['ReceivingRef']>) =>\n\t\t(tx: Transaction) =>\n\t\t\ttx.receivingRef(...args),\n};\n"],"mappings":"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","names":["bcs","bcs","balance","TransactionExpiration","bcs","object","getClient","bcs","object","bcs","Transaction","#availableResults","#inputSection","#commandSection","#fork","result","#pendingPromises","#waitForPendingTasks","#sortCommandsAndInputs","#serializationPlugins","object","#caches","cached","bcs","#lastDigest","#getValidDuringExpiration","#defaultGasBudget","#ensureEpochInfo","#fetchEpochInfo","EPOCH_BOUNDARY_WINDOW","#maxPoolSize","#updateCache","#waitForLastDigest","#client","#getGasPrice","#defaultGasBudget","#getValidDuringExpiration","#getGasCoin","#refillCoinPool","#ensureEpochInfo","#fetchEpochInfo","#initialCoinBalance"]}