@mysten/sui 1.17.0 → 1.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/dist/cjs/bcs/bcs.d.ts +95 -95
- package/dist/cjs/bcs/effects.d.ts +41 -41
- package/dist/cjs/bcs/index.d.ts +136 -136
- package/dist/cjs/client/client.d.ts +1 -0
- package/dist/cjs/client/types/generated.d.ts +76 -27
- package/dist/cjs/client/types/generated.js.map +1 -1
- package/dist/cjs/client/types/params.d.ts +5 -1
- package/dist/cjs/client/types/params.js.map +1 -1
- package/dist/cjs/cryptography/intent.d.ts +1 -1
- package/dist/cjs/cryptography/publickey.d.ts +4 -0
- package/dist/cjs/cryptography/publickey.js +6 -0
- package/dist/cjs/cryptography/publickey.js.map +2 -2
- package/dist/cjs/cryptography/signature.d.ts +9 -9
- package/dist/cjs/graphql/generated/2024.1/tada-env.d.ts +11380 -0
- package/dist/cjs/graphql/generated/2024.1/tada-env.js +13142 -0
- package/dist/cjs/graphql/generated/2024.1/tada-env.js.map +7 -0
- package/dist/cjs/graphql/generated/2024.1/tsconfig.tada.js +1 -1
- package/dist/cjs/graphql/generated/2024.1/tsconfig.tada.js.map +1 -1
- package/dist/cjs/graphql/generated/2024.4/tada-env.d.ts +11496 -0
- package/dist/cjs/graphql/generated/2024.4/tada-env.js +13288 -0
- package/dist/cjs/graphql/generated/2024.4/tada-env.js.map +7 -0
- package/dist/cjs/graphql/generated/2024.4/tsconfig.tada.js +1 -1
- package/dist/cjs/graphql/generated/2024.4/tsconfig.tada.js.map +1 -1
- package/dist/cjs/graphql/generated/latest/tada-env.d.ts +12540 -0
- package/dist/cjs/graphql/generated/latest/tada-env.js +14498 -0
- package/dist/cjs/graphql/generated/latest/tada-env.js.map +7 -0
- package/dist/cjs/graphql/generated/latest/tsconfig.tada.js +12 -0
- package/dist/cjs/graphql/generated/latest/tsconfig.tada.js.map +7 -0
- package/dist/cjs/graphql/schemas/2024.1/index.d.ts +6 -8999
- package/dist/cjs/graphql/schemas/2024.1/index.js.map +1 -1
- package/dist/cjs/graphql/schemas/2024.4/index.d.ts +6 -9053
- package/dist/cjs/graphql/schemas/2024.4/index.js.map +1 -1
- package/dist/cjs/graphql/schemas/latest/index.d.ts +10 -0
- package/dist/cjs/graphql/schemas/latest/index.js +31 -0
- package/dist/cjs/graphql/schemas/latest/index.js.map +7 -0
- package/dist/cjs/keypairs/ed25519/ed25519-hd-key.d.ts +0 -5
- package/dist/cjs/keypairs/ed25519/ed25519-hd-key.js +1 -25
- package/dist/cjs/keypairs/ed25519/ed25519-hd-key.js.map +3 -3
- package/dist/cjs/keypairs/ed25519/keypair.d.ts +1 -1
- package/dist/cjs/keypairs/ed25519/keypair.js +22 -18
- package/dist/cjs/keypairs/ed25519/keypair.js.map +3 -3
- package/dist/cjs/keypairs/ed25519/publickey.js +2 -12
- package/dist/cjs/keypairs/ed25519/publickey.js.map +3 -3
- package/dist/cjs/keypairs/passkey/keypair.d.ts +1 -1
- package/dist/cjs/keypairs/passkey/publickey.d.ts +4 -4
- package/dist/cjs/keypairs/secp256k1/keypair.d.ts +1 -1
- package/dist/cjs/keypairs/secp256r1/keypair.d.ts +1 -1
- package/dist/cjs/transactions/Arguments.d.ts +11 -980
- package/dist/cjs/transactions/Arguments.js +1 -3
- package/dist/cjs/transactions/Arguments.js.map +2 -2
- package/dist/cjs/transactions/ObjectCache.d.ts +2 -1
- package/dist/cjs/transactions/ObjectCache.js +8 -3
- package/dist/cjs/transactions/ObjectCache.js.map +2 -2
- package/dist/cjs/transactions/Transaction.d.ts +13 -33
- package/dist/cjs/transactions/Transaction.js +8 -8
- package/dist/cjs/transactions/Transaction.js.map +2 -2
- package/dist/cjs/transactions/TransactionData.d.ts +1 -1
- package/dist/cjs/transactions/executor/caching.d.ts +1 -1
- package/dist/cjs/transactions/executor/serial.d.ts +3 -3
- package/dist/cjs/transactions/executor/serial.js +3 -5
- package/dist/cjs/transactions/executor/serial.js.map +3 -3
- package/dist/cjs/verify/verify.d.ts +5 -1
- package/dist/cjs/verify/verify.js +10 -1
- package/dist/cjs/verify/verify.js.map +2 -2
- package/dist/cjs/version.d.ts +2 -2
- package/dist/cjs/version.js +2 -2
- package/dist/cjs/version.js.map +1 -1
- package/dist/cjs/zklogin/publickey.d.ts +6 -2
- package/dist/cjs/zklogin/publickey.js +22 -10
- package/dist/cjs/zklogin/publickey.js.map +2 -2
- package/dist/esm/bcs/bcs.d.ts +95 -95
- package/dist/esm/bcs/effects.d.ts +41 -41
- package/dist/esm/bcs/index.d.ts +136 -136
- package/dist/esm/client/client.d.ts +1 -0
- package/dist/esm/client/types/generated.d.ts +76 -27
- package/dist/esm/client/types/params.d.ts +5 -1
- package/dist/esm/cryptography/intent.d.ts +1 -1
- package/dist/esm/cryptography/publickey.d.ts +4 -0
- package/dist/esm/cryptography/publickey.js +6 -0
- package/dist/esm/cryptography/publickey.js.map +2 -2
- package/dist/esm/cryptography/signature.d.ts +9 -9
- package/dist/esm/graphql/generated/2024.1/tada-env.d.ts +11380 -0
- package/dist/esm/graphql/generated/2024.1/tada-env.js +13122 -0
- package/dist/esm/graphql/generated/2024.1/tada-env.js.map +7 -0
- package/dist/esm/graphql/generated/2024.1/tsconfig.tada.js +1 -1
- package/dist/esm/graphql/generated/2024.1/tsconfig.tada.js.map +1 -1
- package/dist/esm/graphql/generated/2024.4/tada-env.d.ts +11496 -0
- package/dist/esm/graphql/generated/2024.4/tada-env.js +13268 -0
- package/dist/esm/graphql/generated/2024.4/tada-env.js.map +7 -0
- package/dist/esm/graphql/generated/2024.4/tsconfig.tada.js +1 -1
- package/dist/esm/graphql/generated/2024.4/tsconfig.tada.js.map +1 -1
- package/dist/esm/graphql/generated/latest/tada-env.d.ts +12540 -0
- package/dist/esm/graphql/generated/latest/tada-env.js +14478 -0
- package/dist/esm/graphql/generated/latest/tada-env.js.map +7 -0
- package/dist/esm/graphql/generated/latest/tsconfig.tada.js +17 -0
- package/dist/esm/graphql/generated/latest/tsconfig.tada.js.map +7 -0
- package/dist/esm/graphql/schemas/2024.1/index.d.ts +6 -8999
- package/dist/esm/graphql/schemas/2024.1/index.js.map +1 -1
- package/dist/esm/graphql/schemas/2024.4/index.d.ts +6 -9053
- package/dist/esm/graphql/schemas/2024.4/index.js.map +1 -1
- package/dist/esm/graphql/schemas/latest/index.d.ts +10 -0
- package/dist/esm/graphql/schemas/latest/index.js +10 -0
- package/dist/esm/graphql/schemas/latest/index.js.map +7 -0
- package/dist/esm/keypairs/ed25519/ed25519-hd-key.d.ts +0 -5
- package/dist/esm/keypairs/ed25519/ed25519-hd-key.js +1 -15
- package/dist/esm/keypairs/ed25519/ed25519-hd-key.js.map +2 -2
- package/dist/esm/keypairs/ed25519/keypair.d.ts +1 -1
- package/dist/esm/keypairs/ed25519/keypair.js +22 -8
- package/dist/esm/keypairs/ed25519/keypair.js.map +2 -2
- package/dist/esm/keypairs/ed25519/publickey.js +2 -2
- package/dist/esm/keypairs/ed25519/publickey.js.map +2 -2
- package/dist/esm/keypairs/passkey/keypair.d.ts +1 -1
- package/dist/esm/keypairs/passkey/publickey.d.ts +4 -4
- package/dist/esm/keypairs/secp256k1/keypair.d.ts +1 -1
- package/dist/esm/keypairs/secp256r1/keypair.d.ts +1 -1
- package/dist/esm/transactions/Arguments.d.ts +11 -980
- package/dist/esm/transactions/Arguments.js +1 -3
- package/dist/esm/transactions/Arguments.js.map +2 -2
- package/dist/esm/transactions/ObjectCache.d.ts +2 -1
- package/dist/esm/transactions/ObjectCache.js +8 -3
- package/dist/esm/transactions/ObjectCache.js.map +2 -2
- package/dist/esm/transactions/Transaction.d.ts +13 -33
- package/dist/esm/transactions/Transaction.js +8 -8
- package/dist/esm/transactions/Transaction.js.map +2 -2
- package/dist/esm/transactions/TransactionData.d.ts +1 -1
- package/dist/esm/transactions/executor/caching.d.ts +1 -1
- package/dist/esm/transactions/executor/serial.d.ts +3 -3
- package/dist/esm/transactions/executor/serial.js +3 -5
- package/dist/esm/transactions/executor/serial.js.map +2 -2
- package/dist/esm/verify/verify.d.ts +5 -1
- package/dist/esm/verify/verify.js +10 -1
- package/dist/esm/verify/verify.js.map +2 -2
- package/dist/esm/version.d.ts +2 -2
- package/dist/esm/version.js +2 -2
- package/dist/esm/version.js.map +1 -1
- package/dist/esm/zklogin/publickey.d.ts +6 -2
- package/dist/esm/zklogin/publickey.js +21 -9
- package/dist/esm/zklogin/publickey.js.map +2 -2
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/graphql/schemas/latest/package.json +6 -0
- package/package.json +15 -13
- package/src/client/types/generated.ts +110 -59
- package/src/client/types/params.ts +5 -1
- package/src/cryptography/publickey.ts +7 -0
- package/src/graphql/generated/2024.1/tada-env.ts +13144 -0
- package/src/graphql/generated/2024.1/tsconfig.tada.json +1 -1
- package/src/graphql/generated/2024.4/tada-env.ts +13290 -0
- package/src/graphql/generated/2024.4/tsconfig.tada.json +1 -1
- package/src/graphql/generated/latest/schema.graphql +4808 -0
- package/src/graphql/generated/latest/tada-env.ts +14500 -0
- package/src/graphql/generated/latest/tsconfig.tada.json +11 -0
- package/src/graphql/schemas/2024.1/index.ts +1 -1
- package/src/graphql/schemas/2024.4/index.ts +1 -1
- package/src/graphql/schemas/latest/index.ts +17 -0
- package/src/keypairs/ed25519/ed25519-hd-key.ts +4 -14
- package/src/keypairs/ed25519/keypair.ts +23 -8
- package/src/keypairs/ed25519/publickey.ts +2 -2
- package/src/transactions/Arguments.ts +6 -5
- package/src/transactions/ObjectCache.ts +5 -1
- package/src/transactions/Transaction.ts +21 -15
- package/src/transactions/__tests__/bcs.test.ts +1 -1
- package/src/transactions/executor/serial.ts +3 -5
- package/src/verify/verify.ts +21 -3
- package/src/version.ts +2 -2
- package/src/zklogin/publickey.ts +19 -8
- package/dist/cjs/graphql/generated/2024.1/tada-env.d.js +0 -17
- package/dist/cjs/graphql/generated/2024.1/tada-env.d.js.map +0 -7
- package/dist/cjs/graphql/generated/2024.4/tada-env.d.js +0 -17
- package/dist/cjs/graphql/generated/2024.4/tada-env.d.js.map +0 -7
- package/dist/esm/graphql/generated/2024.1/tada-env.d.js +0 -1
- package/dist/esm/graphql/generated/2024.1/tada-env.d.js.map +0 -7
- package/dist/esm/graphql/generated/2024.4/tada-env.d.js +0 -1
- package/dist/esm/graphql/generated/2024.4/tada-env.d.js.map +0 -7
- package/src/graphql/generated/2024.1/tada-env.d.ts +0 -201
- package/src/graphql/generated/2024.4/tada-env.d.ts +0 -203
|
@@ -25,9 +25,7 @@ var import_object = require("./object.js");
|
|
|
25
25
|
var import_pure = require("./pure.js");
|
|
26
26
|
const Arguments = {
|
|
27
27
|
pure: (0, import_pure.createPure)((value) => (tx) => tx.pure(value)),
|
|
28
|
-
object: (0, import_object.createObjectMethods)(
|
|
29
|
-
(value) => (tx) => tx.object(value)
|
|
30
|
-
),
|
|
28
|
+
object: (0, import_object.createObjectMethods)((value) => (tx) => tx.object(value)),
|
|
31
29
|
sharedObjectRef: (...args) => (tx) => tx.sharedObjectRef(...args),
|
|
32
30
|
objectRef: (...args) => (tx) => tx.objectRef(...args),
|
|
33
31
|
receivingRef: (...args) => (tx) => tx.receivingRef(...args)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/transactions/Arguments.ts"],
|
|
4
|
-
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { Inputs } from './Inputs.js';\nimport { createObjectMethods } from './object.js';\nimport { createPure } from './pure.js';\nimport type { Transaction,
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"sourcesContent": ["// 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"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,oBAAoC;AACpC,kBAA2B;AAGpB,MAAM,YAAY;AAAA,EACxB,UAAM,wBAA0C,CAAC,UAAU,CAAC,OAAO,GAAG,KAAK,KAAK,CAAC;AAAA,EAGjF,YAAQ,mCAA+C,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,KAAK,CAAC;AAAA,EAC1F,iBACC,IAAI,SACJ,CAAC,OACA,GAAG,gBAAgB,GAAG,IAAI;AAAA,EAC5B,WACC,IAAI,SACJ,CAAC,OACA,GAAG,UAAU,GAAG,IAAI;AAAA,EACtB,cACC,IAAI,SACJ,CAAC,OACA,GAAG,aAAa,GAAG,IAAI;AAC1B;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -60,10 +60,11 @@ export declare class InMemoryCache extends AsyncCache {
|
|
|
60
60
|
}
|
|
61
61
|
export interface ObjectCacheOptions {
|
|
62
62
|
cache?: AsyncCache;
|
|
63
|
+
onEffects?: (effects: typeof bcs.TransactionEffects.$inferType) => Promise<void>;
|
|
63
64
|
}
|
|
64
65
|
export declare class ObjectCache {
|
|
65
66
|
#private;
|
|
66
|
-
constructor({ cache }: ObjectCacheOptions);
|
|
67
|
+
constructor({ cache, onEffects }: ObjectCacheOptions);
|
|
67
68
|
asPlugin(): TransactionPlugin;
|
|
68
69
|
clear(): Promise<void>;
|
|
69
70
|
getMoveFunctionDefinition(ref: {
|
|
@@ -31,7 +31,7 @@ __export(ObjectCache_exports, {
|
|
|
31
31
|
});
|
|
32
32
|
module.exports = __toCommonJS(ObjectCache_exports);
|
|
33
33
|
var import_sui_types = require("../utils/sui-types.js");
|
|
34
|
-
var _caches, _cache;
|
|
34
|
+
var _caches, _cache, _onEffects;
|
|
35
35
|
class AsyncCache {
|
|
36
36
|
async getObject(id) {
|
|
37
37
|
const [owned, shared] = await Promise.all([
|
|
@@ -119,9 +119,11 @@ class InMemoryCache extends AsyncCache {
|
|
|
119
119
|
}
|
|
120
120
|
_caches = new WeakMap();
|
|
121
121
|
class ObjectCache {
|
|
122
|
-
constructor({ cache = new InMemoryCache() }) {
|
|
122
|
+
constructor({ cache = new InMemoryCache(), onEffects }) {
|
|
123
123
|
__privateAdd(this, _cache);
|
|
124
|
+
__privateAdd(this, _onEffects);
|
|
124
125
|
__privateSet(this, _cache, cache);
|
|
126
|
+
__privateSet(this, _onEffects, onEffects);
|
|
125
127
|
}
|
|
126
128
|
asPlugin() {
|
|
127
129
|
return async (transactionData, _options, next) => {
|
|
@@ -206,6 +208,7 @@ class ObjectCache {
|
|
|
206
208
|
return __privateGet(this, _cache).deleteCustom(key);
|
|
207
209
|
}
|
|
208
210
|
async applyEffects(effects) {
|
|
211
|
+
var _a;
|
|
209
212
|
if (!effects.V2) {
|
|
210
213
|
throw new Error(`Unsupported transaction effects version ${effects.$kind}`);
|
|
211
214
|
}
|
|
@@ -228,9 +231,11 @@ class ObjectCache {
|
|
|
228
231
|
});
|
|
229
232
|
await Promise.all([
|
|
230
233
|
__privateGet(this, _cache).addObjects(addedObjects),
|
|
231
|
-
__privateGet(this, _cache).deleteObjects(deletedIds)
|
|
234
|
+
__privateGet(this, _cache).deleteObjects(deletedIds),
|
|
235
|
+
(_a = __privateGet(this, _onEffects)) == null ? void 0 : _a.call(this, effects)
|
|
232
236
|
]);
|
|
233
237
|
}
|
|
234
238
|
}
|
|
235
239
|
_cache = new WeakMap();
|
|
240
|
+
_onEffects = new WeakMap();
|
|
236
241
|
//# sourceMappingURL=ObjectCache.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/transactions/ObjectCache.ts"],
|
|
4
|
-
"sourcesContent": ["// 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 { OpenMoveTypeSignature } from './data/internal.js';\nimport type { TransactionPlugin } from './json-rpc-resolver.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: OpenMoveTypeSignature[];\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}\n\nexport class ObjectCache {\n\t#cache: AsyncCache;\n\n\tconstructor({ cache = new InMemoryCache() }: ObjectCacheOptions) {\n\t\tthis.#cache = cache;\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]);\n\t}\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["// 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 { OpenMoveTypeSignature } from './data/internal.js';\nimport type { TransactionPlugin } from './json-rpc-resolver.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: OpenMoveTypeSignature[];\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"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["cached"]
|
|
7
7
|
}
|
|
@@ -7,6 +7,7 @@ import type { CallArg, Command } from './data/internal.js';
|
|
|
7
7
|
import { Argument, ObjectRef, TransactionExpiration } from './data/internal.js';
|
|
8
8
|
import { Inputs } from './Inputs.js';
|
|
9
9
|
import type { BuildTransactionOptions, SerializeTransactionOptions, TransactionPlugin } from './json-rpc-resolver.js';
|
|
10
|
+
import { createObjectMethods } from './object.js';
|
|
10
11
|
import { createPure } from './pure.js';
|
|
11
12
|
export type TransactionObjectArgument = Exclude<InferInput<typeof Argument>, {
|
|
12
13
|
Input: unknown;
|
|
@@ -30,6 +31,7 @@ export type TransactionObjectInput = string | CallArg | TransactionObjectArgumen
|
|
|
30
31
|
*/
|
|
31
32
|
export declare class Transaction {
|
|
32
33
|
#private;
|
|
34
|
+
[x: number]: boolean;
|
|
33
35
|
/**
|
|
34
36
|
* Converts from a serialize transaction kind (built with `build({ onlyTransactionKind: true })`) to a `Transaction` class.
|
|
35
37
|
* Supports either a byte array, or base64-encoded bytes.
|
|
@@ -102,7 +104,7 @@ export declare class Transaction {
|
|
|
102
104
|
resultIndex: number;
|
|
103
105
|
})[];
|
|
104
106
|
kind: "MoveCall";
|
|
105
|
-
target:
|
|
107
|
+
target: import("valibot").GenericSchema<`${string}::${string}::${string}`>;
|
|
106
108
|
} | {
|
|
107
109
|
address: {
|
|
108
110
|
kind: "Input";
|
|
@@ -598,37 +600,11 @@ export declare class Transaction {
|
|
|
598
600
|
/**
|
|
599
601
|
* Add a new object input to the transaction.
|
|
600
602
|
*/
|
|
601
|
-
object: {
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
};
|
|
607
|
-
system(): {
|
|
608
|
-
$kind: "Input";
|
|
609
|
-
Input: number;
|
|
610
|
-
type?: "object";
|
|
611
|
-
};
|
|
612
|
-
clock(): {
|
|
613
|
-
$kind: "Input";
|
|
614
|
-
Input: number;
|
|
615
|
-
type?: "object";
|
|
616
|
-
};
|
|
617
|
-
random(): {
|
|
618
|
-
$kind: "Input";
|
|
619
|
-
Input: number;
|
|
620
|
-
type?: "object";
|
|
621
|
-
};
|
|
622
|
-
denyList(): {
|
|
623
|
-
$kind: "Input";
|
|
624
|
-
Input: number;
|
|
625
|
-
type?: "object";
|
|
626
|
-
};
|
|
627
|
-
option({ type, value }: {
|
|
628
|
-
type: string;
|
|
629
|
-
value: TransactionObjectInput | null;
|
|
630
|
-
}): (tx: Transaction) => TransactionResult;
|
|
631
|
-
};
|
|
603
|
+
object: ReturnType<typeof createObjectMethods<{
|
|
604
|
+
$kind: 'Input';
|
|
605
|
+
Input: number;
|
|
606
|
+
type?: 'object';
|
|
607
|
+
}>>;
|
|
632
608
|
/**
|
|
633
609
|
* Add a new object input to the transaction using the fully-resolved object reference.
|
|
634
610
|
* If you only have an object ID, use `builder.object(id)` instead.
|
|
@@ -658,7 +634,11 @@ export declare class Transaction {
|
|
|
658
634
|
};
|
|
659
635
|
/** Add a transaction to the transaction */
|
|
660
636
|
add<T = TransactionResult>(command: Command | ((tx: Transaction) => T)): T;
|
|
661
|
-
splitCoins
|
|
637
|
+
splitCoins<const Amounts extends (TransactionArgument | SerializedBcs<any> | number | string | bigint)[]>(coin: TransactionObjectArgument | string, amounts: Amounts): Extract<Argument, {
|
|
638
|
+
Result: unknown;
|
|
639
|
+
}> & { [K in keyof Amounts]: Extract<Argument, {
|
|
640
|
+
NestedResult: unknown;
|
|
641
|
+
}>; };
|
|
662
642
|
mergeCoins(destination: TransactionObjectArgument | string, sources: (TransactionObjectArgument | string)[]): TransactionResult;
|
|
663
643
|
publish({ modules, dependencies }: {
|
|
664
644
|
modules: number[][] | string[];
|
|
@@ -44,7 +44,7 @@ var import_pure = require("./pure.js");
|
|
|
44
44
|
var import_TransactionData = require("./TransactionData.js");
|
|
45
45
|
var import_utils = require("./utils.js");
|
|
46
46
|
var _serializationPlugins, _buildPlugins, _intentResolvers, _data, _Transaction_instances, normalizeTransactionArgument_fn, resolveArgument_fn, prepareBuild_fn, runPlugins_fn;
|
|
47
|
-
function createTransactionResult(index) {
|
|
47
|
+
function createTransactionResult(index, length = Infinity) {
|
|
48
48
|
const baseResult = { $kind: "Result", Result: index };
|
|
49
49
|
const nestedResults = [];
|
|
50
50
|
const nestedResultFor = (resultIndex) => nestedResults[resultIndex] ?? (nestedResults[resultIndex] = {
|
|
@@ -67,7 +67,7 @@ function createTransactionResult(index) {
|
|
|
67
67
|
if (property === Symbol.iterator) {
|
|
68
68
|
return function* () {
|
|
69
69
|
let i = 0;
|
|
70
|
-
while (
|
|
70
|
+
while (i < length) {
|
|
71
71
|
yield nestedResultFor(i);
|
|
72
72
|
i++;
|
|
73
73
|
}
|
|
@@ -298,14 +298,14 @@ const _Transaction = class _Transaction {
|
|
|
298
298
|
}
|
|
299
299
|
// Method shorthands:
|
|
300
300
|
splitCoins(coin, amounts) {
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
(amount) => typeof amount === "number" || typeof amount === "bigint" || typeof amount === "string" ? this.pure.u64(amount) : __privateMethod(this, _Transaction_instances, normalizeTransactionArgument_fn).call(this, amount)
|
|
306
|
-
)
|
|
301
|
+
const command = import_Commands.Commands.SplitCoins(
|
|
302
|
+
typeof coin === "string" ? this.object(coin) : __privateMethod(this, _Transaction_instances, resolveArgument_fn).call(this, coin),
|
|
303
|
+
amounts.map(
|
|
304
|
+
(amount) => typeof amount === "number" || typeof amount === "bigint" || typeof amount === "string" ? this.pure.u64(amount) : __privateMethod(this, _Transaction_instances, normalizeTransactionArgument_fn).call(this, amount)
|
|
307
305
|
)
|
|
308
306
|
);
|
|
307
|
+
const index = __privateGet(this, _data).commands.push(command);
|
|
308
|
+
return createTransactionResult(index - 1, amounts.length);
|
|
309
309
|
}
|
|
310
310
|
mergeCoins(destination, sources) {
|
|
311
311
|
return this.add(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/transactions/Transaction.ts"],
|
|
4
|
-
"sourcesContent": ["// 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 { SuiClient } from '../client/index.js';\nimport type { SignatureWithBytes, Signer } from '../cryptography/index.js';\nimport { normalizeSuiAddress } from '../utils/sui-types.js';\nimport type { TransactionArgument } from './Commands.js';\nimport { Commands } from './Commands.js';\nimport type { CallArg, Command } from './data/internal.js';\nimport { Argument, NormalizedCallArg, ObjectRef, TransactionExpiration } from './data/internal.js';\nimport { serializeV1TransactionData } from './data/v1.js';\nimport { SerializedTransactionDataV2 } from './data/v2.js';\nimport { Inputs } from './Inputs.js';\nimport type {\n\tBuildTransactionOptions,\n\tSerializeTransactionOptions,\n\tTransactionPlugin,\n} from './json-rpc-resolver.js';\nimport { resolveTransactionData } from './json-rpc-resolver.js';\nimport { createObjectMethods } from './object.js';\nimport { createPure } from './pure.js';\nimport { TransactionDataBuilder } from './TransactionData.js';\nimport { getIdFromCallArg } from './utils.js';\n\nexport type TransactionObjectArgument =\n\t| Exclude<InferInput<typeof Argument>, { Input: unknown; type?: 'pure' }>\n\t| ((tx: Transaction) => Exclude<InferInput<typeof Argument>, { Input: unknown; type?: 'pure' }>);\n\nexport type TransactionResult = Extract<Argument, { Result: unknown }> &\n\tExtract<Argument, { NestedResult: unknown }>[];\n\nfunction createTransactionResult(index: number) {\n\tconst baseResult = { $kind: 'Result' as const, Result: index };\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\tNestedResult: [index, resultIndex],\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 (true) {\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 Transaction {\n\treturn !!obj && typeof obj === 'object' && (obj as any)[TRANSACTION_BRAND] === true;\n}\n\nexport type TransactionObjectInput = string | CallArg | TransactionObjectArgument;\n\ninterface TransactionPluginRegistry {\n\t// eslint-disable-next-line @typescript-eslint/ban-types\n\tbuildPlugins: Map<string | Function, TransactionPlugin>;\n\t// eslint-disable-next-line @typescript-eslint/ban-types\n\tserializationPlugins: Map<string | Function, TransactionPlugin>;\n}\n\nconst modulePluginRegistry: TransactionPluginRegistry = {\n\tbuildPlugins: new Map(),\n\tserializationPlugins: new Map(),\n};\n\nconst TRANSACTION_REGISTRY_KEY = Symbol.for('@mysten/transaction/registry');\nfunction getGlobalPluginRegistry() {\n\ttry {\n\t\tconst target = globalThis as {\n\t\t\t[TRANSACTION_REGISTRY_KEY]?: TransactionPluginRegistry;\n\t\t};\n\n\t\tif (!target[TRANSACTION_REGISTRY_KEY]) {\n\t\t\ttarget[TRANSACTION_REGISTRY_KEY] = modulePluginRegistry;\n\t\t}\n\n\t\treturn target[TRANSACTION_REGISTRY_KEY];\n\t} catch (e) {\n\t\treturn modulePluginRegistry;\n\t}\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\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\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 | Transaction) {\n\t\tconst newTransaction = new Transaction();\n\n\t\tif (isTransaction(transaction)) {\n\t\t\tnewTransaction.#data = new TransactionDataBuilder(transaction.getData());\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\treturn newTransaction;\n\t}\n\n\t/** @deprecated global plugins should be registered with a name */\n\tstatic registerGlobalSerializationPlugin(step: TransactionPlugin): void;\n\tstatic registerGlobalSerializationPlugin(name: string, step: TransactionPlugin): void;\n\tstatic registerGlobalSerializationPlugin(\n\t\tstepOrStep: TransactionPlugin | string,\n\t\tstep?: TransactionPlugin,\n\t) {\n\t\tgetGlobalPluginRegistry().serializationPlugins.set(\n\t\t\tstepOrStep,\n\t\t\tstep ?? (stepOrStep as TransactionPlugin),\n\t\t);\n\t}\n\n\tstatic unregisterGlobalSerializationPlugin(name: string) {\n\t\tgetGlobalPluginRegistry().serializationPlugins.delete(name);\n\t}\n\n\t/** @deprecated global plugins should be registered with a name */\n\tstatic registerGlobalBuildPlugin(step: TransactionPlugin): void;\n\tstatic registerGlobalBuildPlugin(name: string, step: TransactionPlugin): void;\n\tstatic registerGlobalBuildPlugin(\n\t\tstepOrStep: TransactionPlugin | string,\n\t\tstep?: TransactionPlugin,\n\t) {\n\t\tgetGlobalPluginRegistry().buildPlugins.set(\n\t\t\tstepOrStep,\n\t\t\tstep ?? (stepOrStep as TransactionPlugin),\n\t\t);\n\t}\n\n\tstatic unregisterGlobalBuildPlugin(name: string) {\n\t\tgetGlobalPluginRegistry().buildPlugins.delete(name);\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) {\n\t\tthis.#data.gasConfig.price = String(price);\n\t}\n\tsetGasBudget(budget: number | bigint) {\n\t\tthis.#data.gasConfig.budget = String(budget);\n\t}\n\n\tsetGasBudgetIfNotSet(budget: number | bigint) {\n\t\tif (this.#data.gasData.budget == null) {\n\t\t\tthis.#data.gasConfig.budget = String(budget);\n\t\t}\n\t}\n\n\tsetGasOwner(owner: string) {\n\t\tthis.#data.gasConfig.owner = owner;\n\t}\n\tsetGasPayment(payments: ObjectRef[]) {\n\t\tthis.#data.gasConfig.payment = payments.map((payment) => parse(ObjectRef, payment));\n\t}\n\n\t#data: TransactionDataBuilder;\n\n\t/** @deprecated Use `getData()` instead. */\n\tget blockData() {\n\t\treturn serializeV1TransactionData(this.#data.snapshot());\n\t}\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.#data.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.#data.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\tconst globalPlugins = getGlobalPluginRegistry();\n\t\tthis.#data = new TransactionDataBuilder();\n\t\tthis.#buildPlugins = [...globalPlugins.buildPlugins.values()];\n\t\tthis.#serializationPlugins = [...globalPlugins.serializationPlugins.values()];\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 * Add a new object input to the transaction.\n\t */\n\tobject = 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(value(this));\n\t\t\t}\n\n\t\t\tif (typeof value === 'object' && is(Argument, 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.#data.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/** Add a transaction to the transaction */\n\tadd<T = TransactionResult>(command: Command | ((tx: Transaction) => T)): T {\n\t\tif (typeof command === 'function') {\n\t\t\treturn command(this);\n\t\t}\n\n\t\tconst index = this.#data.commands.push(command);\n\n\t\treturn createTransactionResult(index - 1) as T;\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\treturn parse(Argument, arg(this));\n\t\t}\n\n\t\treturn parse(Argument, arg);\n\t}\n\n\t// Method shorthands:\n\n\tsplitCoins(\n\t\tcoin: TransactionObjectArgument | string,\n\t\tamounts: (TransactionArgument | SerializedBcs<any> | number | string | bigint)[],\n\t) {\n\t\treturn this.add(\n\t\t\tCommands.SplitCoins(\n\t\t\t\ttypeof coin === 'string' ? this.object(coin) : this.#resolveArgument(coin),\n\t\t\t\tamounts.map((amount) =>\n\t\t\t\t\ttypeof amount === 'number' || typeof amount === 'bigint' || typeof amount === 'string'\n\t\t\t\t\t\t? this.pure.u64(amount)\n\t\t\t\t\t\t: this.#normalizeTransactionArgument(amount),\n\t\t\t\t),\n\t\t\t),\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\tCommands.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\tCommands.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\tCommands.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\tCommands.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 Commands.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\tCommands.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\tCommands.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 * @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\treturn JSON.stringify(\n\t\t\tparse(SerializedTransactionDataV2, this.#data.snapshot()),\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/** Build the transaction to BCS bytes. */\n\tasync build(options: BuildTransactionOptions = {}): Promise<Uint8Array> {\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?: SuiClient;\n\t\t} = {},\n\t): Promise<string> {\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, resolveTransactionData], options);\n\t}\n\n\tasync #runPlugins(plugins: TransactionPlugin[], options: SerializeTransactionOptions) {\n\t\tconst createNext = (i: number) => {\n\t\t\tif (i >= plugins.length) {\n\t\t\t\treturn () => {};\n\t\t\t}\n\t\t\tconst plugin = plugins[i];\n\n\t\t\treturn async () => {\n\t\t\t\tconst next = createNext(i + 1);\n\t\t\t\tlet calledNext = false;\n\t\t\t\tlet nextResolved = false;\n\n\t\t\t\tawait plugin(this.#data, options, async () => {\n\t\t\t\t\tif (calledNext) {\n\t\t\t\t\t\tthrow new Error(`next() was call multiple times in TransactionPlugin ${i}`);\n\t\t\t\t\t}\n\n\t\t\t\t\tcalledNext = true;\n\n\t\t\t\t\tawait next();\n\n\t\t\t\t\tnextResolved = true;\n\t\t\t\t});\n\n\t\t\t\tif (!calledNext) {\n\t\t\t\t\tthrow new Error(`next() was not called in TransactionPlugin ${i}`);\n\t\t\t\t}\n\n\t\t\t\tif (!nextResolved) {\n\t\t\t\t\tthrow new Error(`next() was not awaited in TransactionPlugin ${i}`);\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\n\t\tawait createNext(0)();\n\t}\n\n\tasync prepareForSerialization(options: SerializeTransactionOptions) {\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\tawait this.#runPlugins(steps, options);\n\t}\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,iBAA4C;AAE5C,qBAA0B;AAI1B,uBAAoC;AAEpC,sBAAyB;AAEzB,sBAA8E;AAC9E,gBAA2C;AAC3C,gBAA4C;AAC5C,oBAAuB;AAMvB,+BAAuC;AACvC,oBAAoC;AACpC,kBAA2B;AAC3B,6BAAuC;AACvC,mBAAiC;AA3BjC;AAoCA,SAAS,wBAAwB,OAAe;
|
|
4
|
+
"sourcesContent": ["// 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 { SuiClient } from '../client/index.js';\nimport type { SignatureWithBytes, Signer } from '../cryptography/index.js';\nimport { normalizeSuiAddress } from '../utils/sui-types.js';\nimport type { TransactionArgument } from './Commands.js';\nimport { Commands } from './Commands.js';\nimport type { CallArg, Command } from './data/internal.js';\nimport { Argument, NormalizedCallArg, ObjectRef, TransactionExpiration } from './data/internal.js';\nimport { serializeV1TransactionData } from './data/v1.js';\nimport { SerializedTransactionDataV2 } from './data/v2.js';\nimport { Inputs } from './Inputs.js';\nimport type {\n\tBuildTransactionOptions,\n\tSerializeTransactionOptions,\n\tTransactionPlugin,\n} from './json-rpc-resolver.js';\nimport { resolveTransactionData } from './json-rpc-resolver.js';\nimport { createObjectMethods } from './object.js';\nimport { createPure } from './pure.js';\nimport { TransactionDataBuilder } from './TransactionData.js';\nimport { getIdFromCallArg } from './utils.js';\n\nexport type TransactionObjectArgument =\n\t| Exclude<InferInput<typeof Argument>, { Input: unknown; type?: 'pure' }>\n\t| ((tx: Transaction) => Exclude<InferInput<typeof Argument>, { Input: unknown; type?: 'pure' }>);\n\nexport type TransactionResult = Extract<Argument, { Result: unknown }> &\n\tExtract<Argument, { NestedResult: unknown }>[];\n\nfunction createTransactionResult(index: number, length = Infinity): TransactionResult {\n\tconst baseResult = { $kind: 'Result' as const, Result: index };\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\tNestedResult: [index, resultIndex],\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 Transaction {\n\treturn !!obj && typeof obj === 'object' && (obj as any)[TRANSACTION_BRAND] === true;\n}\n\nexport type TransactionObjectInput = string | CallArg | TransactionObjectArgument;\n\ninterface TransactionPluginRegistry {\n\t// eslint-disable-next-line @typescript-eslint/ban-types\n\tbuildPlugins: Map<string | Function, TransactionPlugin>;\n\t// eslint-disable-next-line @typescript-eslint/ban-types\n\tserializationPlugins: Map<string | Function, TransactionPlugin>;\n}\n\nconst modulePluginRegistry: TransactionPluginRegistry = {\n\tbuildPlugins: new Map(),\n\tserializationPlugins: new Map(),\n};\n\nconst TRANSACTION_REGISTRY_KEY = Symbol.for('@mysten/transaction/registry');\nfunction getGlobalPluginRegistry() {\n\ttry {\n\t\tconst target = globalThis as {\n\t\t\t[TRANSACTION_REGISTRY_KEY]?: TransactionPluginRegistry;\n\t\t};\n\n\t\tif (!target[TRANSACTION_REGISTRY_KEY]) {\n\t\t\ttarget[TRANSACTION_REGISTRY_KEY] = modulePluginRegistry;\n\t\t}\n\n\t\treturn target[TRANSACTION_REGISTRY_KEY];\n\t} catch (e) {\n\t\treturn modulePluginRegistry;\n\t}\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\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\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 | Transaction) {\n\t\tconst newTransaction = new Transaction();\n\n\t\tif (isTransaction(transaction)) {\n\t\t\tnewTransaction.#data = new TransactionDataBuilder(transaction.getData());\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\treturn newTransaction;\n\t}\n\n\t/** @deprecated global plugins should be registered with a name */\n\tstatic registerGlobalSerializationPlugin(step: TransactionPlugin): void;\n\tstatic registerGlobalSerializationPlugin(name: string, step: TransactionPlugin): void;\n\tstatic registerGlobalSerializationPlugin(\n\t\tstepOrStep: TransactionPlugin | string,\n\t\tstep?: TransactionPlugin,\n\t) {\n\t\tgetGlobalPluginRegistry().serializationPlugins.set(\n\t\t\tstepOrStep,\n\t\t\tstep ?? (stepOrStep as TransactionPlugin),\n\t\t);\n\t}\n\n\tstatic unregisterGlobalSerializationPlugin(name: string) {\n\t\tgetGlobalPluginRegistry().serializationPlugins.delete(name);\n\t}\n\n\t/** @deprecated global plugins should be registered with a name */\n\tstatic registerGlobalBuildPlugin(step: TransactionPlugin): void;\n\tstatic registerGlobalBuildPlugin(name: string, step: TransactionPlugin): void;\n\tstatic registerGlobalBuildPlugin(\n\t\tstepOrStep: TransactionPlugin | string,\n\t\tstep?: TransactionPlugin,\n\t) {\n\t\tgetGlobalPluginRegistry().buildPlugins.set(\n\t\t\tstepOrStep,\n\t\t\tstep ?? (stepOrStep as TransactionPlugin),\n\t\t);\n\t}\n\n\tstatic unregisterGlobalBuildPlugin(name: string) {\n\t\tgetGlobalPluginRegistry().buildPlugins.delete(name);\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) {\n\t\tthis.#data.gasConfig.price = String(price);\n\t}\n\tsetGasBudget(budget: number | bigint) {\n\t\tthis.#data.gasConfig.budget = String(budget);\n\t}\n\n\tsetGasBudgetIfNotSet(budget: number | bigint) {\n\t\tif (this.#data.gasData.budget == null) {\n\t\t\tthis.#data.gasConfig.budget = String(budget);\n\t\t}\n\t}\n\n\tsetGasOwner(owner: string) {\n\t\tthis.#data.gasConfig.owner = owner;\n\t}\n\tsetGasPayment(payments: ObjectRef[]) {\n\t\tthis.#data.gasConfig.payment = payments.map((payment) => parse(ObjectRef, payment));\n\t}\n\n\t#data: TransactionDataBuilder;\n\n\t/** @deprecated Use `getData()` instead. */\n\tget blockData() {\n\t\treturn serializeV1TransactionData(this.#data.snapshot());\n\t}\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.#data.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.#data.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\tconst globalPlugins = getGlobalPluginRegistry();\n\t\tthis.#data = new TransactionDataBuilder();\n\t\tthis.#buildPlugins = [...globalPlugins.buildPlugins.values()];\n\t\tthis.#serializationPlugins = [...globalPlugins.serializationPlugins.values()];\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 * 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(value(this));\n\t\t\t}\n\n\t\t\tif (typeof value === 'object' && is(Argument, 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.#data.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/** Add a transaction to the transaction */\n\tadd<T = TransactionResult>(command: Command | ((tx: Transaction) => T)): T {\n\t\tif (typeof command === 'function') {\n\t\t\treturn command(this);\n\t\t}\n\n\t\tconst index = this.#data.commands.push(command);\n\n\t\treturn createTransactionResult(index - 1) as T;\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\treturn parse(Argument, arg(this));\n\t\t}\n\n\t\treturn parse(Argument, 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 = Commands.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\tconst index = this.#data.commands.push(command);\n\t\treturn createTransactionResult(index - 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\tCommands.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\tCommands.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\tCommands.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\tCommands.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 Commands.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\tCommands.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\tCommands.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 * @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\treturn JSON.stringify(\n\t\t\tparse(SerializedTransactionDataV2, this.#data.snapshot()),\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/** Build the transaction to BCS bytes. */\n\tasync build(options: BuildTransactionOptions = {}): Promise<Uint8Array> {\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?: SuiClient;\n\t\t} = {},\n\t): Promise<string> {\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, resolveTransactionData], options);\n\t}\n\n\tasync #runPlugins(plugins: TransactionPlugin[], options: SerializeTransactionOptions) {\n\t\tconst createNext = (i: number) => {\n\t\t\tif (i >= plugins.length) {\n\t\t\t\treturn () => {};\n\t\t\t}\n\t\t\tconst plugin = plugins[i];\n\n\t\t\treturn async () => {\n\t\t\t\tconst next = createNext(i + 1);\n\t\t\t\tlet calledNext = false;\n\t\t\t\tlet nextResolved = false;\n\n\t\t\t\tawait plugin(this.#data, options, async () => {\n\t\t\t\t\tif (calledNext) {\n\t\t\t\t\t\tthrow new Error(`next() was call multiple times in TransactionPlugin ${i}`);\n\t\t\t\t\t}\n\n\t\t\t\t\tcalledNext = true;\n\n\t\t\t\t\tawait next();\n\n\t\t\t\t\tnextResolved = true;\n\t\t\t\t});\n\n\t\t\t\tif (!calledNext) {\n\t\t\t\t\tthrow new Error(`next() was not called in TransactionPlugin ${i}`);\n\t\t\t\t}\n\n\t\t\t\tif (!nextResolved) {\n\t\t\t\t\tthrow new Error(`next() was not awaited in TransactionPlugin ${i}`);\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\n\t\tawait createNext(0)();\n\t}\n\n\tasync prepareForSerialization(options: SerializeTransactionOptions) {\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\tawait this.#runPlugins(steps, options);\n\t}\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -50,7 +50,7 @@ export declare class TransactionDataBuilder implements TransactionData {
|
|
|
50
50
|
gasData?: Partial<GasData>;
|
|
51
51
|
};
|
|
52
52
|
onlyTransactionKind?: boolean;
|
|
53
|
-
}): Uint8Array
|
|
53
|
+
}): Uint8Array<ArrayBufferLike>;
|
|
54
54
|
addInput<T extends 'object' | 'pure'>(type: T, arg: CallArg): {
|
|
55
55
|
Input: number;
|
|
56
56
|
type: T;
|
|
@@ -18,7 +18,7 @@ export declare class CachingTransactionExecutor {
|
|
|
18
18
|
reset(): Promise<void>;
|
|
19
19
|
buildTransaction({ transaction, ...options }: {
|
|
20
20
|
transaction: Transaction;
|
|
21
|
-
} & BuildTransactionOptions): Promise<Uint8Array
|
|
21
|
+
} & BuildTransactionOptions): Promise<Uint8Array<ArrayBufferLike>>;
|
|
22
22
|
executeTransaction({ transaction, options, ...input }: {
|
|
23
23
|
transaction: Transaction | Uint8Array;
|
|
24
24
|
} & Omit<ExecuteTransactionBlockParams, 'transactionBlock'>): Promise<import("../../client/index.js").SuiTransactionBlockResponse>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { bcs } from '../../bcs/index.js';
|
|
1
|
+
import type { bcs } from '../../bcs/index.js';
|
|
2
2
|
import type { SuiClient, SuiTransactionBlockResponseOptions } from '../../client/index.js';
|
|
3
3
|
import type { Signer } from '../../cryptography/keypair.js';
|
|
4
4
|
import type { ObjectCacheOptions } from '../ObjectCache.js';
|
|
@@ -11,8 +11,8 @@ export declare class SerialTransactionExecutor {
|
|
|
11
11
|
/** The gasBudget to use if the transaction has not defined it's own gasBudget, defaults to `50_000_000n` */
|
|
12
12
|
defaultGasBudget?: bigint;
|
|
13
13
|
});
|
|
14
|
-
applyEffects(effects: typeof bcs.TransactionEffects.$inferType): Promise<
|
|
15
|
-
buildTransaction(transaction: Transaction): Promise<Uint8Array
|
|
14
|
+
applyEffects(effects: typeof bcs.TransactionEffects.$inferType): Promise<void>;
|
|
15
|
+
buildTransaction(transaction: Transaction): Promise<Uint8Array<ArrayBufferLike>>;
|
|
16
16
|
resetCache(): Promise<void>;
|
|
17
17
|
waitForLastTransaction(): Promise<void>;
|
|
18
18
|
executeTransaction(transaction: Transaction | Uint8Array, options?: SuiTransactionBlockResponseOptions): Promise<{
|
|
@@ -30,7 +30,6 @@ __export(serial_exports, {
|
|
|
30
30
|
});
|
|
31
31
|
module.exports = __toCommonJS(serial_exports);
|
|
32
32
|
var import_bcs = require("@mysten/bcs");
|
|
33
|
-
var import_bcs2 = require("../../bcs/index.js");
|
|
34
33
|
var import_Transaction = require("../Transaction.js");
|
|
35
34
|
var import_caching = require("./caching.js");
|
|
36
35
|
var import_queue = require("./queue.js");
|
|
@@ -70,11 +69,12 @@ class SerialTransactionExecutor {
|
|
|
70
69
|
__privateSet(this, _defaultGasBudget, defaultGasBudget);
|
|
71
70
|
__privateSet(this, _cache, new import_caching.CachingTransactionExecutor({
|
|
72
71
|
client: options.client,
|
|
73
|
-
cache: options.cache
|
|
72
|
+
cache: options.cache,
|
|
73
|
+
onEffects: (effects) => __privateGet(this, _cacheGasCoin).call(this, effects)
|
|
74
74
|
}));
|
|
75
75
|
}
|
|
76
76
|
async applyEffects(effects) {
|
|
77
|
-
return
|
|
77
|
+
return __privateGet(this, _cache).applyEffects(effects);
|
|
78
78
|
}
|
|
79
79
|
async buildTransaction(transaction) {
|
|
80
80
|
return __privateGet(this, _queue).runTask(() => __privateGet(this, _buildTransaction).call(this, transaction));
|
|
@@ -98,8 +98,6 @@ class SerialTransactionExecutor {
|
|
|
98
98
|
throw error;
|
|
99
99
|
});
|
|
100
100
|
const effectsBytes = Uint8Array.from(results.rawEffects);
|
|
101
|
-
const effects = import_bcs2.bcs.TransactionEffects.parse(effectsBytes);
|
|
102
|
-
await this.applyEffects(effects);
|
|
103
101
|
return {
|
|
104
102
|
digest: results.digest,
|
|
105
103
|
effects: (0, import_bcs.toBase64)(effectsBytes),
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/transactions/executor/serial.ts"],
|
|
4
|
-
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { toBase64 } from '@mysten/bcs';\n\nimport { bcs } from '../../bcs/index.js';\nimport type { SuiClient, SuiTransactionBlockResponseOptions } from '../../client/index.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\nexport class SerialTransactionExecutor {\n\t#queue = new SerialQueue();\n\t#signer: Signer;\n\t#cache: CachingTransactionExecutor;\n\t#defaultGasBudget: bigint;\n\n\tconstructor({\n\t\tsigner,\n\t\tdefaultGasBudget = 50_000_000n,\n\t\t...options\n\t}: Omit<ObjectCacheOptions, 'address'> & {\n\t\tclient: SuiClient;\n\t\tsigner: Signer;\n\t\t/** The gasBudget to use if the transaction has not defined it's own gasBudget, defaults to `50_000_000n` */\n\t\tdefaultGasBudget?: bigint;\n\t}) {\n\t\tthis.#signer = signer;\n\t\tthis.#defaultGasBudget = defaultGasBudget;\n\t\tthis.#cache = new CachingTransactionExecutor({\n\t\t\tclient: options.client,\n\t\t\tcache: options.cache,\n\t\t});\n\t}\n\n\tasync applyEffects(effects: typeof bcs.TransactionEffects.$inferType) {\n\t\treturn
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,iBAAyB;
|
|
6
|
-
"names": [
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { toBase64 } from '@mysten/bcs';\n\nimport type { bcs } from '../../bcs/index.js';\nimport type { SuiClient, SuiTransactionBlockResponseOptions } from '../../client/index.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\nexport class SerialTransactionExecutor {\n\t#queue = new SerialQueue();\n\t#signer: Signer;\n\t#cache: CachingTransactionExecutor;\n\t#defaultGasBudget: bigint;\n\n\tconstructor({\n\t\tsigner,\n\t\tdefaultGasBudget = 50_000_000n,\n\t\t...options\n\t}: Omit<ObjectCacheOptions, 'address'> & {\n\t\tclient: SuiClient;\n\t\tsigner: Signer;\n\t\t/** The gasBudget to use if the transaction has not defined it's own gasBudget, defaults to `50_000_000n` */\n\t\tdefaultGasBudget?: bigint;\n\t}) {\n\t\tthis.#signer = signer;\n\t\tthis.#defaultGasBudget = defaultGasBudget;\n\t\tthis.#cache = new CachingTransactionExecutor({\n\t\t\tclient: options.client,\n\t\t\tcache: options.cache,\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 (!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\tconst gasCoin = await this.#cache.cache.getCustom<{\n\t\t\tobjectId: string;\n\t\t\tversion: string;\n\t\t\tdigest: string;\n\t\t}>('gasCoin');\n\n\t\tconst copy = Transaction.from(transaction);\n\t\tif (gasCoin) {\n\t\t\tcopy.setGasPayment([gasCoin]);\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\tresetCache() {\n\t\treturn this.#cache.reset();\n\t}\n\n\twaitForLastTransaction() {\n\t\treturn this.#cache.waitForLastTransaction();\n\t}\n\n\texecuteTransaction(\n\t\ttransaction: Transaction | Uint8Array,\n\t\toptions?: SuiTransactionBlockResponseOptions,\n\t) {\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\tconst results = await this.#cache\n\t\t\t\t.executeTransaction({\n\t\t\t\t\tsignature,\n\t\t\t\t\ttransaction: bytes,\n\t\t\t\t\toptions,\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\n\t\t\tconst effectsBytes = Uint8Array.from(results.rawEffects!);\n\t\t\treturn {\n\t\t\t\tdigest: results.digest,\n\t\t\t\teffects: toBase64(effectsBytes),\n\t\t\t\tdata: results,\n\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"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
7
|
}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import type { PublicKey, SignatureScheme } from '../cryptography/index.js';
|
|
2
2
|
import type { SuiGraphQLClient } from '../graphql/client.js';
|
|
3
|
-
export declare function verifySignature(bytes: Uint8Array, signature: string
|
|
3
|
+
export declare function verifySignature(bytes: Uint8Array, signature: string, options?: {
|
|
4
|
+
address?: string;
|
|
5
|
+
}): Promise<PublicKey>;
|
|
4
6
|
export declare function verifyPersonalMessageSignature(message: Uint8Array, signature: string, options?: {
|
|
5
7
|
client?: SuiGraphQLClient;
|
|
8
|
+
address?: string;
|
|
6
9
|
}): Promise<PublicKey>;
|
|
7
10
|
export declare function verifyTransactionSignature(transaction: Uint8Array, signature: string, options?: {
|
|
8
11
|
client?: SuiGraphQLClient;
|
|
12
|
+
address?: string;
|
|
9
13
|
}): Promise<PublicKey>;
|
|
10
14
|
export declare function publicKeyFromRawBytes(signatureScheme: SignatureScheme, bytes: Uint8Array, options?: {
|
|
11
15
|
client?: SuiGraphQLClient;
|
|
@@ -33,11 +33,14 @@ var import_publickey3 = require("../keypairs/secp256k1/publickey.js");
|
|
|
33
33
|
var import_publickey4 = require("../keypairs/secp256r1/publickey.js");
|
|
34
34
|
var import_publickey5 = require("../multisig/publickey.js");
|
|
35
35
|
var import_publickey6 = require("../zklogin/publickey.js");
|
|
36
|
-
async function verifySignature(bytes, signature) {
|
|
36
|
+
async function verifySignature(bytes, signature, options) {
|
|
37
37
|
const parsedSignature = parseSignature(signature);
|
|
38
38
|
if (!await parsedSignature.publicKey.verify(bytes, parsedSignature.serializedSignature)) {
|
|
39
39
|
throw new Error(`Signature is not valid for the provided data`);
|
|
40
40
|
}
|
|
41
|
+
if (options?.address && !parsedSignature.publicKey.verifyAddress(options.address)) {
|
|
42
|
+
throw new Error(`Signature is not valid for the provided address`);
|
|
43
|
+
}
|
|
41
44
|
return parsedSignature.publicKey;
|
|
42
45
|
}
|
|
43
46
|
async function verifyPersonalMessageSignature(message, signature, options = {}) {
|
|
@@ -48,6 +51,9 @@ async function verifyPersonalMessageSignature(message, signature, options = {})
|
|
|
48
51
|
)) {
|
|
49
52
|
throw new Error(`Signature is not valid for the provided message`);
|
|
50
53
|
}
|
|
54
|
+
if (options?.address && !parsedSignature.publicKey.verifyAddress(options.address)) {
|
|
55
|
+
throw new Error(`Signature is not valid for the provided address`);
|
|
56
|
+
}
|
|
51
57
|
return parsedSignature.publicKey;
|
|
52
58
|
}
|
|
53
59
|
async function verifyTransactionSignature(transaction, signature, options = {}) {
|
|
@@ -58,6 +64,9 @@ async function verifyTransactionSignature(transaction, signature, options = {})
|
|
|
58
64
|
)) {
|
|
59
65
|
throw new Error(`Signature is not valid for the provided Transaction`);
|
|
60
66
|
}
|
|
67
|
+
if (options?.address && !parsedSignature.publicKey.verifyAddress(options.address)) {
|
|
68
|
+
throw new Error(`Signature is not valid for the provided address`);
|
|
69
|
+
}
|
|
61
70
|
return parsedSignature.publicKey;
|
|
62
71
|
}
|
|
63
72
|
function parseSignature(signature, options = {}) {
|