sui-effect 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +209 -0
- package/LICENSE +21 -0
- package/LLMS.md +6707 -0
- package/README.md +300 -0
- package/dist/domain/bcs.d.ts +101 -0
- package/dist/domain/bcs.d.ts.map +1 -0
- package/dist/domain/bcs.js +183 -0
- package/dist/domain/bcs.js.map +1 -0
- package/dist/domain/errors.d.ts +595 -0
- package/dist/domain/errors.d.ts.map +1 -0
- package/dist/domain/errors.js +476 -0
- package/dist/domain/errors.js.map +1 -0
- package/dist/domain/executed.d.ts +325 -0
- package/dist/domain/executed.d.ts.map +1 -0
- package/dist/domain/executed.js +253 -0
- package/dist/domain/executed.js.map +1 -0
- package/dist/domain/journal-entry.d.ts +468 -0
- package/dist/domain/journal-entry.d.ts.map +1 -0
- package/dist/domain/journal-entry.js +63 -0
- package/dist/domain/journal-entry.js.map +1 -0
- package/dist/domain/schemas.d.ts +950 -0
- package/dist/domain/schemas.d.ts.map +1 -0
- package/dist/domain/schemas.js +571 -0
- package/dist/domain/schemas.js.map +1 -0
- package/dist/domain/sui-schema.d.ts +12 -0
- package/dist/domain/sui-schema.d.ts.map +1 -0
- package/dist/domain/sui-schema.js +12 -0
- package/dist/domain/sui-schema.js.map +1 -0
- package/dist/extension.d.ts +7 -0
- package/dist/extension.d.ts.map +1 -0
- package/dist/extension.js +7 -0
- package/dist/extension.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/internal.d.ts +18 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +18 -0
- package/dist/internal.js.map +1 -0
- package/dist/journal.d.ts +51 -0
- package/dist/journal.d.ts.map +1 -0
- package/dist/journal.js +18 -0
- package/dist/journal.js.map +1 -0
- package/dist/script.d.ts +7 -0
- package/dist/script.d.ts.map +1 -0
- package/dist/script.js +7 -0
- package/dist/script.js.map +1 -0
- package/dist/services/Journal.d.ts +76 -0
- package/dist/services/Journal.d.ts.map +1 -0
- package/dist/services/Journal.js +70 -0
- package/dist/services/Journal.js.map +1 -0
- package/dist/services/JournalKeyValueStore.d.ts +73 -0
- package/dist/services/JournalKeyValueStore.d.ts.map +1 -0
- package/dist/services/JournalKeyValueStore.js +155 -0
- package/dist/services/JournalKeyValueStore.js.map +1 -0
- package/dist/services/Script.d.ts +210 -0
- package/dist/services/Script.d.ts.map +1 -0
- package/dist/services/Script.js +441 -0
- package/dist/services/Script.js.map +1 -0
- package/dist/services/Signer.d.ts +132 -0
- package/dist/services/Signer.d.ts.map +1 -0
- package/dist/services/Signer.js +158 -0
- package/dist/services/Signer.js.map +1 -0
- package/dist/services/SubmitConfig.d.ts +175 -0
- package/dist/services/SubmitConfig.d.ts.map +1 -0
- package/dist/services/SubmitConfig.js +52 -0
- package/dist/services/SubmitConfig.js.map +1 -0
- package/dist/services/Sui.d.ts +295 -0
- package/dist/services/Sui.d.ts.map +1 -0
- package/dist/services/Sui.js +414 -0
- package/dist/services/Sui.js.map +1 -0
- package/dist/services/SuiCore.d.ts +227 -0
- package/dist/services/SuiCore.d.ts.map +1 -0
- package/dist/services/SuiCore.js +400 -0
- package/dist/services/SuiCore.js.map +1 -0
- package/dist/services/SuiCoreFake.d.ts +278 -0
- package/dist/services/SuiCoreFake.d.ts.map +1 -0
- package/dist/services/SuiCoreFake.js +1003 -0
- package/dist/services/SuiCoreFake.js.map +1 -0
- package/dist/services/SuiExtension.d.ts +208 -0
- package/dist/services/SuiExtension.d.ts.map +1 -0
- package/dist/services/SuiExtension.js +355 -0
- package/dist/services/SuiExtension.js.map +1 -0
- package/dist/services/SuiGraphQL.d.ts +98 -0
- package/dist/services/SuiGraphQL.d.ts.map +1 -0
- package/dist/services/SuiGraphQL.js +118 -0
- package/dist/services/SuiGraphQL.js.map +1 -0
- package/dist/services/Tx.d.ts +687 -0
- package/dist/services/Tx.d.ts.map +1 -0
- package/dist/services/Tx.js +1224 -0
- package/dist/services/Tx.js.map +1 -0
- package/dist/testing.d.ts +88 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +163 -0
- package/dist/testing.js.map +1 -0
- package/dist/tx.d.ts +24 -0
- package/dist/tx.d.ts.map +1 -0
- package/dist/tx.js +24 -0
- package/dist/tx.js.map +1 -0
- package/docs/extensions.md +1685 -0
- package/examples/extension-template/README.md +170 -0
- package/examples/extension-template/package.json +44 -0
- package/examples/extension-template/scripts/check-package.ts +145 -0
- package/examples/extension-template/src/Escrow.ts +445 -0
- package/examples/extension-template/src/Platform.ts +136 -0
- package/examples/extension-template/src/errors.ts +61 -0
- package/examples/extension-template/src/extension.ts +63 -0
- package/examples/extension-template/src/index.ts +34 -0
- package/examples/extension-template/src/schema.ts +158 -0
- package/examples/extension-template/src/upstream.ts +66 -0
- package/examples/extension-template/test/escrow.test.ts +559 -0
- package/examples/extension-template/tsconfig.build.json +26 -0
- package/examples/extension-template/tsconfig.json +35 -0
- package/package.json +87 -0
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `Executed`: a transaction that reached the chain, with accessors that answer
|
|
3
|
+
* the questions the next transaction needs answered.
|
|
4
|
+
*
|
|
5
|
+
* Every accessor returns {@link ChangedRef}s — the object's id plus whatever
|
|
6
|
+
* else the effects actually carried — and ignores accumulator writes
|
|
7
|
+
* (`outputState: "AccumulatorWriteV1"`), which are balance bookkeeping rather
|
|
8
|
+
* than objects. Use {@link objectRefOf} to turn one into the full `ObjectRef`
|
|
9
|
+
* the transaction builder wants, which succeeds exactly when the node reported
|
|
10
|
+
* every field it needs.
|
|
11
|
+
*
|
|
12
|
+
* @since 0.1.0
|
|
13
|
+
*/
|
|
14
|
+
import type { SuiClientTypes } from "@mysten/sui/client";
|
|
15
|
+
import { Effect, Schema } from "effect";
|
|
16
|
+
import { DecodeError, ExecutionFailed, UnexpectedEffects } from "./errors.ts";
|
|
17
|
+
import { CoinType, ObjectId, ObjectRef, ObjectType, Owner, SuiAddress, Version } from "./schemas.ts";
|
|
18
|
+
/**
|
|
19
|
+
* What the effects say about one object a transaction touched.
|
|
20
|
+
*
|
|
21
|
+
* `id` is always there. Everything else is present only when the node reported
|
|
22
|
+
* it: `type` comes from the `objectTypes` join, and the version, digest and
|
|
23
|
+
* owner from the side of the change being read (a deleted object has no output
|
|
24
|
+
* version, and a created one has no input version). Nothing is defaulted, so a
|
|
25
|
+
* caller that needs a full `ObjectRef` for the builder can see what is missing
|
|
26
|
+
* rather than being handed a fabricated version 0.
|
|
27
|
+
*/
|
|
28
|
+
export interface ChangedRef {
|
|
29
|
+
readonly id: ObjectId;
|
|
30
|
+
readonly type?: ObjectType;
|
|
31
|
+
readonly version?: Version;
|
|
32
|
+
readonly digest?: string;
|
|
33
|
+
readonly owner?: Owner;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The full builder reference of a changed object, when the effects carried
|
|
37
|
+
* every field the builder needs. Never fails.
|
|
38
|
+
*/
|
|
39
|
+
export declare const objectRefOf: (ref: ChangedRef) => ObjectRef | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* The shape `Transaction#objectRef` and `Inputs.ObjectRef` want: `objectId`
|
|
42
|
+
* rather than `id`, and a decimal **string** version rather than a `bigint`.
|
|
43
|
+
*
|
|
44
|
+
* sui-effect's own `ObjectRef` carries the branded `id` and a `bigint`
|
|
45
|
+
* `version`, because that is what a domain model wants and what a `Version`
|
|
46
|
+
* check can be run on; the SDK builder wants neither. This is the one
|
|
47
|
+
* conversion, so nobody writes `{ objectId: ref.id, version: String(ref.version) }`
|
|
48
|
+
* by hand and gets the field name wrong.
|
|
49
|
+
*
|
|
50
|
+
* **Only for an address-owned (or immutable) object.** `tx.objectRef` pins a
|
|
51
|
+
* version, which is exactly right for an owned input and exactly wrong for a
|
|
52
|
+
* **shared** object: a shared object is passed with `tx.sharedObjectRef({
|
|
53
|
+
* objectId, initialSharedVersion, mutable })` (the initial shared version lives
|
|
54
|
+
* on `ref.owner.Shared.initialSharedVersion`), and a **receiving** object with
|
|
55
|
+
* `tx.receivingRef(...)`, which takes the same three fields this returns.
|
|
56
|
+
* Passing a shared object by `objectRef` produces bytes a validator rejects.
|
|
57
|
+
*
|
|
58
|
+
* `undefined` when the effects did not carry a version or a digest — a deleted
|
|
59
|
+
* object has no output version, and nothing can be consumed without both.
|
|
60
|
+
* Never fails.
|
|
61
|
+
*/
|
|
62
|
+
export declare const sdkRefOf: (ref: ChangedRef | ObjectRef) => SdkObjectRef | undefined;
|
|
63
|
+
/** The SDK's own object reference shape, as `Transaction#objectRef` takes it. */
|
|
64
|
+
export interface SdkObjectRef {
|
|
65
|
+
readonly objectId: string;
|
|
66
|
+
readonly version: string;
|
|
67
|
+
readonly digest: string;
|
|
68
|
+
}
|
|
69
|
+
declare const Executed_base: Schema.Class<Executed, Schema.Struct<{
|
|
70
|
+
readonly digest: Schema.brand<Schema.String, "Digest">;
|
|
71
|
+
readonly effects: Schema.Struct<{
|
|
72
|
+
readonly version: Schema.Number;
|
|
73
|
+
readonly status: Schema.Struct<{
|
|
74
|
+
readonly success: Schema.Boolean;
|
|
75
|
+
}>;
|
|
76
|
+
readonly gasUsed: Schema.Struct<{
|
|
77
|
+
readonly computationCost: Schema.brand<Schema.BigIntFromString, "Mist">;
|
|
78
|
+
readonly storageCost: Schema.brand<Schema.BigIntFromString, "Mist">;
|
|
79
|
+
readonly storageRebate: Schema.brand<Schema.BigIntFromString, "Mist">;
|
|
80
|
+
readonly nonRefundableStorageFee: Schema.brand<Schema.BigIntFromString, "Mist">;
|
|
81
|
+
}>;
|
|
82
|
+
readonly transactionDigest: Schema.brand<Schema.String, "Digest">;
|
|
83
|
+
readonly gasObject: Schema.NullOr<Schema.Struct<{
|
|
84
|
+
readonly objectId: Schema.brand<Schema.decodeTo<Schema.toType<Schema.String>, Schema.String, never, never>, "ObjectId">;
|
|
85
|
+
readonly inputState: Schema.Literals<readonly ["Unknown", "DoesNotExist", "Exists"]>;
|
|
86
|
+
readonly inputVersion: Schema.NullOr<Schema.brand<Schema.BigIntFromString, "Version">>;
|
|
87
|
+
readonly inputDigest: Schema.NullOr<Schema.String>;
|
|
88
|
+
readonly inputOwner: Schema.NullOr<Schema.toTaggedUnion<"$kind", readonly [Schema.Struct<{
|
|
89
|
+
readonly $kind: Schema.Literal<"AddressOwner">;
|
|
90
|
+
readonly AddressOwner: Schema.brand<Schema.decodeTo<Schema.toType<Schema.String>, Schema.String, never, never>, "SuiAddress">;
|
|
91
|
+
}>, Schema.Struct<{
|
|
92
|
+
readonly $kind: Schema.Literal<"ObjectOwner">;
|
|
93
|
+
readonly ObjectOwner: Schema.brand<Schema.decodeTo<Schema.toType<Schema.String>, Schema.String, never, never>, "ObjectId">;
|
|
94
|
+
}>, Schema.Struct<{
|
|
95
|
+
readonly $kind: Schema.Literal<"Shared">;
|
|
96
|
+
readonly Shared: Schema.Struct<{
|
|
97
|
+
readonly initialSharedVersion: Schema.brand<Schema.BigIntFromString, "Version">;
|
|
98
|
+
}>;
|
|
99
|
+
}>, Schema.Struct<{
|
|
100
|
+
readonly $kind: Schema.Literal<"Immutable">;
|
|
101
|
+
readonly Immutable: Schema.Literal<true>;
|
|
102
|
+
}>, Schema.Struct<{
|
|
103
|
+
readonly $kind: Schema.Literal<"ConsensusAddressOwner">;
|
|
104
|
+
readonly ConsensusAddressOwner: Schema.Struct<{
|
|
105
|
+
readonly startVersion: Schema.brand<Schema.BigIntFromString, "Version">;
|
|
106
|
+
readonly owner: Schema.brand<Schema.decodeTo<Schema.toType<Schema.String>, Schema.String, never, never>, "SuiAddress">;
|
|
107
|
+
}>;
|
|
108
|
+
}>, Schema.Struct<{
|
|
109
|
+
readonly $kind: Schema.Literal<"Unknown">;
|
|
110
|
+
}>]>>;
|
|
111
|
+
readonly outputState: Schema.Literals<readonly ["Unknown", "DoesNotExist", "ObjectWrite", "PackageWrite", "AccumulatorWriteV1"]>;
|
|
112
|
+
readonly outputVersion: Schema.NullOr<Schema.brand<Schema.BigIntFromString, "Version">>;
|
|
113
|
+
readonly outputDigest: Schema.NullOr<Schema.String>;
|
|
114
|
+
readonly outputOwner: Schema.NullOr<Schema.toTaggedUnion<"$kind", readonly [Schema.Struct<{
|
|
115
|
+
readonly $kind: Schema.Literal<"AddressOwner">;
|
|
116
|
+
readonly AddressOwner: Schema.brand<Schema.decodeTo<Schema.toType<Schema.String>, Schema.String, never, never>, "SuiAddress">;
|
|
117
|
+
}>, Schema.Struct<{
|
|
118
|
+
readonly $kind: Schema.Literal<"ObjectOwner">;
|
|
119
|
+
readonly ObjectOwner: Schema.brand<Schema.decodeTo<Schema.toType<Schema.String>, Schema.String, never, never>, "ObjectId">;
|
|
120
|
+
}>, Schema.Struct<{
|
|
121
|
+
readonly $kind: Schema.Literal<"Shared">;
|
|
122
|
+
readonly Shared: Schema.Struct<{
|
|
123
|
+
readonly initialSharedVersion: Schema.brand<Schema.BigIntFromString, "Version">;
|
|
124
|
+
}>;
|
|
125
|
+
}>, Schema.Struct<{
|
|
126
|
+
readonly $kind: Schema.Literal<"Immutable">;
|
|
127
|
+
readonly Immutable: Schema.Literal<true>;
|
|
128
|
+
}>, Schema.Struct<{
|
|
129
|
+
readonly $kind: Schema.Literal<"ConsensusAddressOwner">;
|
|
130
|
+
readonly ConsensusAddressOwner: Schema.Struct<{
|
|
131
|
+
readonly startVersion: Schema.brand<Schema.BigIntFromString, "Version">;
|
|
132
|
+
readonly owner: Schema.brand<Schema.decodeTo<Schema.toType<Schema.String>, Schema.String, never, never>, "SuiAddress">;
|
|
133
|
+
}>;
|
|
134
|
+
}>, Schema.Struct<{
|
|
135
|
+
readonly $kind: Schema.Literal<"Unknown">;
|
|
136
|
+
}>]>>;
|
|
137
|
+
readonly idOperation: Schema.Literals<readonly ["Unknown", "None", "Created", "Deleted"]>;
|
|
138
|
+
}>>;
|
|
139
|
+
readonly eventsDigest: Schema.NullOr<Schema.String>;
|
|
140
|
+
readonly dependencies: Schema.$Array<Schema.String>;
|
|
141
|
+
readonly lamportVersion: Schema.NullOr<Schema.brand<Schema.BigIntFromString, "Version">>;
|
|
142
|
+
readonly changedObjects: Schema.$Array<Schema.Struct<{
|
|
143
|
+
readonly objectId: Schema.brand<Schema.decodeTo<Schema.toType<Schema.String>, Schema.String, never, never>, "ObjectId">;
|
|
144
|
+
readonly inputState: Schema.Literals<readonly ["Unknown", "DoesNotExist", "Exists"]>;
|
|
145
|
+
readonly inputVersion: Schema.NullOr<Schema.brand<Schema.BigIntFromString, "Version">>;
|
|
146
|
+
readonly inputDigest: Schema.NullOr<Schema.String>;
|
|
147
|
+
readonly inputOwner: Schema.NullOr<Schema.toTaggedUnion<"$kind", readonly [Schema.Struct<{
|
|
148
|
+
readonly $kind: Schema.Literal<"AddressOwner">;
|
|
149
|
+
readonly AddressOwner: Schema.brand<Schema.decodeTo<Schema.toType<Schema.String>, Schema.String, never, never>, "SuiAddress">;
|
|
150
|
+
}>, Schema.Struct<{
|
|
151
|
+
readonly $kind: Schema.Literal<"ObjectOwner">;
|
|
152
|
+
readonly ObjectOwner: Schema.brand<Schema.decodeTo<Schema.toType<Schema.String>, Schema.String, never, never>, "ObjectId">;
|
|
153
|
+
}>, Schema.Struct<{
|
|
154
|
+
readonly $kind: Schema.Literal<"Shared">;
|
|
155
|
+
readonly Shared: Schema.Struct<{
|
|
156
|
+
readonly initialSharedVersion: Schema.brand<Schema.BigIntFromString, "Version">;
|
|
157
|
+
}>;
|
|
158
|
+
}>, Schema.Struct<{
|
|
159
|
+
readonly $kind: Schema.Literal<"Immutable">;
|
|
160
|
+
readonly Immutable: Schema.Literal<true>;
|
|
161
|
+
}>, Schema.Struct<{
|
|
162
|
+
readonly $kind: Schema.Literal<"ConsensusAddressOwner">;
|
|
163
|
+
readonly ConsensusAddressOwner: Schema.Struct<{
|
|
164
|
+
readonly startVersion: Schema.brand<Schema.BigIntFromString, "Version">;
|
|
165
|
+
readonly owner: Schema.brand<Schema.decodeTo<Schema.toType<Schema.String>, Schema.String, never, never>, "SuiAddress">;
|
|
166
|
+
}>;
|
|
167
|
+
}>, Schema.Struct<{
|
|
168
|
+
readonly $kind: Schema.Literal<"Unknown">;
|
|
169
|
+
}>]>>;
|
|
170
|
+
readonly outputState: Schema.Literals<readonly ["Unknown", "DoesNotExist", "ObjectWrite", "PackageWrite", "AccumulatorWriteV1"]>;
|
|
171
|
+
readonly outputVersion: Schema.NullOr<Schema.brand<Schema.BigIntFromString, "Version">>;
|
|
172
|
+
readonly outputDigest: Schema.NullOr<Schema.String>;
|
|
173
|
+
readonly outputOwner: Schema.NullOr<Schema.toTaggedUnion<"$kind", readonly [Schema.Struct<{
|
|
174
|
+
readonly $kind: Schema.Literal<"AddressOwner">;
|
|
175
|
+
readonly AddressOwner: Schema.brand<Schema.decodeTo<Schema.toType<Schema.String>, Schema.String, never, never>, "SuiAddress">;
|
|
176
|
+
}>, Schema.Struct<{
|
|
177
|
+
readonly $kind: Schema.Literal<"ObjectOwner">;
|
|
178
|
+
readonly ObjectOwner: Schema.brand<Schema.decodeTo<Schema.toType<Schema.String>, Schema.String, never, never>, "ObjectId">;
|
|
179
|
+
}>, Schema.Struct<{
|
|
180
|
+
readonly $kind: Schema.Literal<"Shared">;
|
|
181
|
+
readonly Shared: Schema.Struct<{
|
|
182
|
+
readonly initialSharedVersion: Schema.brand<Schema.BigIntFromString, "Version">;
|
|
183
|
+
}>;
|
|
184
|
+
}>, Schema.Struct<{
|
|
185
|
+
readonly $kind: Schema.Literal<"Immutable">;
|
|
186
|
+
readonly Immutable: Schema.Literal<true>;
|
|
187
|
+
}>, Schema.Struct<{
|
|
188
|
+
readonly $kind: Schema.Literal<"ConsensusAddressOwner">;
|
|
189
|
+
readonly ConsensusAddressOwner: Schema.Struct<{
|
|
190
|
+
readonly startVersion: Schema.brand<Schema.BigIntFromString, "Version">;
|
|
191
|
+
readonly owner: Schema.brand<Schema.decodeTo<Schema.toType<Schema.String>, Schema.String, never, never>, "SuiAddress">;
|
|
192
|
+
}>;
|
|
193
|
+
}>, Schema.Struct<{
|
|
194
|
+
readonly $kind: Schema.Literal<"Unknown">;
|
|
195
|
+
}>]>>;
|
|
196
|
+
readonly idOperation: Schema.Literals<readonly ["Unknown", "None", "Created", "Deleted"]>;
|
|
197
|
+
}>>;
|
|
198
|
+
readonly unchangedConsensusObjects: Schema.$Array<Schema.Struct<{
|
|
199
|
+
readonly kind: Schema.Literals<readonly ["Unknown", "ReadOnlyRoot", "MutateConsensusStreamEnded", "ReadConsensusStreamEnded", "Cancelled", "PerEpochConfig"]>;
|
|
200
|
+
readonly objectId: Schema.brand<Schema.decodeTo<Schema.toType<Schema.String>, Schema.String, never, never>, "ObjectId">;
|
|
201
|
+
readonly version: Schema.NullOr<Schema.brand<Schema.BigIntFromString, "Version">>;
|
|
202
|
+
readonly digest: Schema.NullOr<Schema.String>;
|
|
203
|
+
}>>;
|
|
204
|
+
readonly auxiliaryDataDigest: Schema.NullOr<Schema.String>;
|
|
205
|
+
}>;
|
|
206
|
+
readonly events: Schema.$Array<Schema.Struct<{
|
|
207
|
+
readonly packageId: Schema.brand<Schema.decodeTo<Schema.toType<Schema.String>, Schema.String, never, never>, "ObjectId">;
|
|
208
|
+
readonly module: Schema.String;
|
|
209
|
+
readonly sender: Schema.brand<Schema.decodeTo<Schema.toType<Schema.String>, Schema.String, never, never>, "SuiAddress">;
|
|
210
|
+
readonly eventType: Schema.String;
|
|
211
|
+
readonly bcs: Schema.Uint8Array;
|
|
212
|
+
}>>;
|
|
213
|
+
readonly balanceChanges: Schema.$Array<Schema.Struct<{
|
|
214
|
+
readonly coinType: Schema.brand<Schema.decodeTo<Schema.toType<Schema.String>, Schema.String, never, never>, "CoinType">;
|
|
215
|
+
readonly address: Schema.brand<Schema.decodeTo<Schema.toType<Schema.String>, Schema.String, never, never>, "SuiAddress">;
|
|
216
|
+
readonly amount: Schema.BigIntFromString;
|
|
217
|
+
}>>;
|
|
218
|
+
readonly objectTypes: Schema.$Record<Schema.String, Schema.String>;
|
|
219
|
+
readonly checkpoint: Schema.NullOr<Schema.BigIntFromString>;
|
|
220
|
+
readonly timestampMs: Schema.NullOr<Schema.Number>;
|
|
221
|
+
}>, {}>;
|
|
222
|
+
/**
|
|
223
|
+
* A transaction the network executed, built from the fixed execute include set:
|
|
224
|
+
* effects, events, balance changes and object types.
|
|
225
|
+
*/
|
|
226
|
+
export declare class Executed extends Executed_base {
|
|
227
|
+
/**
|
|
228
|
+
* The type of a changed object, from the `objectTypes` join. A published
|
|
229
|
+
* package reports the literal `package` rather than a struct tag, so the
|
|
230
|
+
* decode goes through {@link ObjectType}.
|
|
231
|
+
*/
|
|
232
|
+
private typeOf;
|
|
233
|
+
/**
|
|
234
|
+
* Everything the effects actually say about one changed object. Nothing is
|
|
235
|
+
* invented: a field the node did not report stays `undefined`, so a caller
|
|
236
|
+
* that needs a full builder reference can tell the difference between
|
|
237
|
+
* "version 0" and "the node did not say".
|
|
238
|
+
*/
|
|
239
|
+
private refOf;
|
|
240
|
+
private select;
|
|
241
|
+
private static byType;
|
|
242
|
+
/**
|
|
243
|
+
* Objects this transaction created, optionally filtered by Move type
|
|
244
|
+
* (compared with `normalizeStructTag`). Never fails.
|
|
245
|
+
*/
|
|
246
|
+
created(type?: string): ReadonlyArray<ChangedRef>;
|
|
247
|
+
/**
|
|
248
|
+
* Objects this transaction created whose reference satisfies a predicate.
|
|
249
|
+
*
|
|
250
|
+
* The direct replacement for the substring matching every repo hand-rolls
|
|
251
|
+
* (`createdByType("::Receipt")`), without making substring matching the
|
|
252
|
+
* default: `created(type)` still compares normalized struct tags.
|
|
253
|
+
* Never fails.
|
|
254
|
+
*/
|
|
255
|
+
createdWhere(predicate: (ref: ChangedRef) => boolean): ReadonlyArray<ChangedRef>;
|
|
256
|
+
/** Objects this transaction mutated in place, optionally filtered by type. Never fails. */
|
|
257
|
+
mutated(type?: string): ReadonlyArray<ChangedRef>;
|
|
258
|
+
/**
|
|
259
|
+
* Objects this transaction deleted or wrapped. The refs carry the versions the
|
|
260
|
+
* objects had going in, since they have no output version.
|
|
261
|
+
*
|
|
262
|
+
* Two effect shapes land here, because from a caller's side both mean "this
|
|
263
|
+
* object is gone from where it was":
|
|
264
|
+
*
|
|
265
|
+
* - a **delete**, which the node reports as `idOperation: "Deleted"`;
|
|
266
|
+
* - a **wrap**, which has no id operation at all (`"None"`) and shows up only
|
|
267
|
+
* as an input that existed and an output that does not. {@link wrapped}
|
|
268
|
+
* returns just those, for a caller that has to tell the two apart — a
|
|
269
|
+
* wrapped object still exists inside its wrapper and can come back.
|
|
270
|
+
*
|
|
271
|
+
* Never fails.
|
|
272
|
+
*/
|
|
273
|
+
deleted(): ReadonlyArray<ChangedRef>;
|
|
274
|
+
/**
|
|
275
|
+
* Objects this transaction wrapped: they went in existing and came out
|
|
276
|
+
* nonexistent without their id being deleted, which is how the SDK's effects
|
|
277
|
+
* converter represents wrapping. They are a subset of {@link deleted}.
|
|
278
|
+
* Never fails.
|
|
279
|
+
*/
|
|
280
|
+
wrapped(): ReadonlyArray<ChangedRef>;
|
|
281
|
+
private static isDeleted;
|
|
282
|
+
private static isWrapped;
|
|
283
|
+
/**
|
|
284
|
+
* Packages this transaction published (`PackageWrite` plus `Created`), as
|
|
285
|
+
* full refs like every other accessor. A package's `type` is the literal
|
|
286
|
+
* `package` when the node reports one, and the ref falls back to it when the
|
|
287
|
+
* `objectTypes` join has no entry, so a publish is never silently dropped.
|
|
288
|
+
* Never fails.
|
|
289
|
+
*/
|
|
290
|
+
packagesPublished(): ReadonlyArray<ChangedRef>;
|
|
291
|
+
/** The net balance change for one address and coin type, in MIST. Never fails. */
|
|
292
|
+
balanceChange(address: SuiAddress, coinType: CoinType): bigint;
|
|
293
|
+
/** Computation plus storage less the storage rebate, in MIST. Can be negative. Never fails. */
|
|
294
|
+
get gasUsedTotal(): bigint;
|
|
295
|
+
/**
|
|
296
|
+
* The single object of this type the transaction created.
|
|
297
|
+
*
|
|
298
|
+
* Fails with: `UnexpectedEffects` when the transaction created no object of
|
|
299
|
+
* that type, or more than one.
|
|
300
|
+
*/
|
|
301
|
+
expectCreated(type: string): Effect.Effect<ChangedRef, UnexpectedEffects>;
|
|
302
|
+
}
|
|
303
|
+
/** The `include` set every execute, simulate and transaction read asks for. */
|
|
304
|
+
export declare const EXECUTE_INCLUDE: {
|
|
305
|
+
readonly effects: true;
|
|
306
|
+
readonly events: true;
|
|
307
|
+
readonly balanceChanges: true;
|
|
308
|
+
readonly objectTypes: true;
|
|
309
|
+
};
|
|
310
|
+
/**
|
|
311
|
+
* Turns an SDK `TransactionResult` read with {@link EXECUTE_INCLUDE} into an
|
|
312
|
+
* `Executed`, or into the one representation of an on-chain failure.
|
|
313
|
+
*
|
|
314
|
+
* Fails with: `ExecutionFailed` when the transaction was applied and failed,
|
|
315
|
+
* and `DecodeError` when the response does not carry the include set that was
|
|
316
|
+
* asked for.
|
|
317
|
+
*/
|
|
318
|
+
export declare const fromTransactionResult: (result: SuiClientTypes.TransactionResult<{
|
|
319
|
+
readonly effects: true;
|
|
320
|
+
readonly events: true;
|
|
321
|
+
readonly balanceChanges: true;
|
|
322
|
+
readonly objectTypes: true;
|
|
323
|
+
}>) => Effect.Effect<Executed, DecodeError | ExecutionFailed, never>;
|
|
324
|
+
export {};
|
|
325
|
+
//# sourceMappingURL=executed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executed.d.ts","sourceRoot":"","sources":["../../src/domain/executed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC7E,OAAO,EAGL,QAAQ,EAIR,QAAQ,EACR,SAAS,EACT,UAAU,EACV,KAAK,EACL,UAAU,EAEV,OAAO,EACR,MAAM,cAAc,CAAA;AAMrB;;;;;;;;;GASG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAA;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAA;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CACvB;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,KAAK,UAAU,KAAG,SAAS,GAAG,SAIsC,CAAA;AAEhG;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,QAAQ,GAAI,KAAK,UAAU,GAAG,SAAS,KAAG,YAAY,GAAG,SAGS,CAAA;AAE/E,iFAAiF;AACjF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED;;;GAGG;AACH,qBAAa,QAAS,SAAQ,aAQ5B;IACA;;;;OAIG;IACH,OAAO,CAAC,MAAM;IAOd;;;;;OAKG;IACH,OAAO,CAAC,KAAK;IAcb,OAAO,CAAC,MAAM;IAgBd,OAAO,CAAC,MAAM,CAAC,MAAM;IAKrB;;;OAGG;IACH,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC;IAQjD;;;;;;;OAOG;IACH,YAAY,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC;IAQhF,2FAA2F;IAC3F,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC;IAWjD;;;;;;;;;;;;;;OAcG;IACH,OAAO,IAAI,aAAa,CAAC,UAAU,CAAC;IAOpC;;;;;OAKG;IACH,OAAO,IAAI,aAAa,CAAC,UAAU,CAAC;IAIpC,OAAO,CAAC,MAAM,CAAC,SAAS;IAIxB,OAAO,CAAC,MAAM,CAAC,SAAS;IAKxB;;;;;;OAMG;IACH,iBAAiB,IAAI,aAAa,CAAC,UAAU,CAAC;IAa9C,kFAAkF;IAClF,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM;IAU9D,+FAA+F;IAC/F,IAAI,YAAY,IAAI,MAAM,CAGzB;IAED;;;;;OAKG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,iBAAiB,CAAC;CAY1E;AAED,+EAA+E;AAC/E,eAAO,MAAM,eAAe;;;;;CAKlB,CAAA;AAIV;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB;;;;;oEA6BjC,CAAA"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
import { Effect, Schema } from "effect";
|
|
2
|
+
import { DecodeError, ExecutionFailed, UnexpectedEffects } from "./errors.js";
|
|
3
|
+
import { BalanceChange, ChangedObject, CoinType, Digest, Event, executionReasonOf, ObjectId, ObjectRef, ObjectType, Owner, SuiAddress, TransactionEffects, Version } from "./schemas.js";
|
|
4
|
+
import { typeMatches } from "./bcs.js";
|
|
5
|
+
const isAccumulatorWrite = (change) => change.outputState === "AccumulatorWriteV1";
|
|
6
|
+
/**
|
|
7
|
+
* The full builder reference of a changed object, when the effects carried
|
|
8
|
+
* every field the builder needs. Never fails.
|
|
9
|
+
*/
|
|
10
|
+
export const objectRefOf = (ref) => ref.type === undefined || ref.version === undefined || ref.digest === undefined ||
|
|
11
|
+
ref.owner === undefined
|
|
12
|
+
? undefined
|
|
13
|
+
: { id: ref.id, type: ref.type, version: ref.version, digest: ref.digest, owner: ref.owner };
|
|
14
|
+
/**
|
|
15
|
+
* The shape `Transaction#objectRef` and `Inputs.ObjectRef` want: `objectId`
|
|
16
|
+
* rather than `id`, and a decimal **string** version rather than a `bigint`.
|
|
17
|
+
*
|
|
18
|
+
* sui-effect's own `ObjectRef` carries the branded `id` and a `bigint`
|
|
19
|
+
* `version`, because that is what a domain model wants and what a `Version`
|
|
20
|
+
* check can be run on; the SDK builder wants neither. This is the one
|
|
21
|
+
* conversion, so nobody writes `{ objectId: ref.id, version: String(ref.version) }`
|
|
22
|
+
* by hand and gets the field name wrong.
|
|
23
|
+
*
|
|
24
|
+
* **Only for an address-owned (or immutable) object.** `tx.objectRef` pins a
|
|
25
|
+
* version, which is exactly right for an owned input and exactly wrong for a
|
|
26
|
+
* **shared** object: a shared object is passed with `tx.sharedObjectRef({
|
|
27
|
+
* objectId, initialSharedVersion, mutable })` (the initial shared version lives
|
|
28
|
+
* on `ref.owner.Shared.initialSharedVersion`), and a **receiving** object with
|
|
29
|
+
* `tx.receivingRef(...)`, which takes the same three fields this returns.
|
|
30
|
+
* Passing a shared object by `objectRef` produces bytes a validator rejects.
|
|
31
|
+
*
|
|
32
|
+
* `undefined` when the effects did not carry a version or a digest — a deleted
|
|
33
|
+
* object has no output version, and nothing can be consumed without both.
|
|
34
|
+
* Never fails.
|
|
35
|
+
*/
|
|
36
|
+
export const sdkRefOf = (ref) => ref.version === undefined || ref.digest === undefined
|
|
37
|
+
? undefined
|
|
38
|
+
: { objectId: ref.id, version: ref.version.toString(), digest: ref.digest };
|
|
39
|
+
/**
|
|
40
|
+
* A transaction the network executed, built from the fixed execute include set:
|
|
41
|
+
* effects, events, balance changes and object types.
|
|
42
|
+
*/
|
|
43
|
+
export class Executed extends Schema.Class("sui-effect/Executed")({
|
|
44
|
+
digest: Digest,
|
|
45
|
+
effects: TransactionEffects,
|
|
46
|
+
events: Schema.Array(Event),
|
|
47
|
+
balanceChanges: Schema.Array(BalanceChange),
|
|
48
|
+
objectTypes: Schema.Record(Schema.String, Schema.String),
|
|
49
|
+
checkpoint: Schema.NullOr(Schema.BigIntFromString),
|
|
50
|
+
timestampMs: Schema.NullOr(Schema.Number)
|
|
51
|
+
}) {
|
|
52
|
+
/**
|
|
53
|
+
* The type of a changed object, from the `objectTypes` join. A published
|
|
54
|
+
* package reports the literal `package` rather than a struct tag, so the
|
|
55
|
+
* decode goes through {@link ObjectType}.
|
|
56
|
+
*/
|
|
57
|
+
typeOf(objectId) {
|
|
58
|
+
const type = this.objectTypes[objectId];
|
|
59
|
+
if (type === undefined)
|
|
60
|
+
return undefined;
|
|
61
|
+
const decoded = Schema.decodeUnknownOption(ObjectType)(type);
|
|
62
|
+
return decoded._tag === "Some" ? decoded.value : undefined;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Everything the effects actually say about one changed object. Nothing is
|
|
66
|
+
* invented: a field the node did not report stays `undefined`, so a caller
|
|
67
|
+
* that needs a full builder reference can tell the difference between
|
|
68
|
+
* "version 0" and "the node did not say".
|
|
69
|
+
*/
|
|
70
|
+
refOf(change, side) {
|
|
71
|
+
const version = side === "output" ? change.outputVersion : change.inputVersion;
|
|
72
|
+
const digest = side === "output" ? change.outputDigest : change.inputDigest;
|
|
73
|
+
const owner = side === "output" ? change.outputOwner : change.inputOwner;
|
|
74
|
+
const type = this.typeOf(change.objectId);
|
|
75
|
+
return {
|
|
76
|
+
id: change.objectId,
|
|
77
|
+
...(type === undefined ? {} : { type }),
|
|
78
|
+
...(version === null ? {} : { version }),
|
|
79
|
+
...(digest === null ? {} : { digest }),
|
|
80
|
+
...(owner === null ? {} : { owner })
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
select(predicate, side, filter) {
|
|
84
|
+
const refs = [];
|
|
85
|
+
for (const change of this.effects.changedObjects) {
|
|
86
|
+
if (isAccumulatorWrite(change))
|
|
87
|
+
continue;
|
|
88
|
+
if (!predicate(change))
|
|
89
|
+
continue;
|
|
90
|
+
const ref = this.refOf(change, side);
|
|
91
|
+
if (filter !== undefined && !filter(ref))
|
|
92
|
+
continue;
|
|
93
|
+
refs.push(ref);
|
|
94
|
+
}
|
|
95
|
+
return refs;
|
|
96
|
+
}
|
|
97
|
+
static byType(type) {
|
|
98
|
+
if (type === undefined)
|
|
99
|
+
return undefined;
|
|
100
|
+
return (ref) => ref.type !== undefined && typeMatches(type, ref.type);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Objects this transaction created, optionally filtered by Move type
|
|
104
|
+
* (compared with `normalizeStructTag`). Never fails.
|
|
105
|
+
*/
|
|
106
|
+
created(type) {
|
|
107
|
+
return this.select((change) => change.idOperation === "Created" && change.outputState === "ObjectWrite", "output", Executed.byType(type));
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Objects this transaction created whose reference satisfies a predicate.
|
|
111
|
+
*
|
|
112
|
+
* The direct replacement for the substring matching every repo hand-rolls
|
|
113
|
+
* (`createdByType("::Receipt")`), without making substring matching the
|
|
114
|
+
* default: `created(type)` still compares normalized struct tags.
|
|
115
|
+
* Never fails.
|
|
116
|
+
*/
|
|
117
|
+
createdWhere(predicate) {
|
|
118
|
+
return this.select((change) => change.idOperation === "Created" && change.outputState === "ObjectWrite", "output", predicate);
|
|
119
|
+
}
|
|
120
|
+
/** Objects this transaction mutated in place, optionally filtered by type. Never fails. */
|
|
121
|
+
mutated(type) {
|
|
122
|
+
return this.select((change) => change.idOperation === "None" &&
|
|
123
|
+
change.outputState === "ObjectWrite" &&
|
|
124
|
+
change.inputState === "Exists", "output", Executed.byType(type));
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Objects this transaction deleted or wrapped. The refs carry the versions the
|
|
128
|
+
* objects had going in, since they have no output version.
|
|
129
|
+
*
|
|
130
|
+
* Two effect shapes land here, because from a caller's side both mean "this
|
|
131
|
+
* object is gone from where it was":
|
|
132
|
+
*
|
|
133
|
+
* - a **delete**, which the node reports as `idOperation: "Deleted"`;
|
|
134
|
+
* - a **wrap**, which has no id operation at all (`"None"`) and shows up only
|
|
135
|
+
* as an input that existed and an output that does not. {@link wrapped}
|
|
136
|
+
* returns just those, for a caller that has to tell the two apart — a
|
|
137
|
+
* wrapped object still exists inside its wrapper and can come back.
|
|
138
|
+
*
|
|
139
|
+
* Never fails.
|
|
140
|
+
*/
|
|
141
|
+
deleted() {
|
|
142
|
+
return this.select((change) => Executed.isDeleted(change) || Executed.isWrapped(change), "input");
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Objects this transaction wrapped: they went in existing and came out
|
|
146
|
+
* nonexistent without their id being deleted, which is how the SDK's effects
|
|
147
|
+
* converter represents wrapping. They are a subset of {@link deleted}.
|
|
148
|
+
* Never fails.
|
|
149
|
+
*/
|
|
150
|
+
wrapped() {
|
|
151
|
+
return this.select(Executed.isWrapped, "input");
|
|
152
|
+
}
|
|
153
|
+
static isDeleted(change) {
|
|
154
|
+
return change.idOperation === "Deleted";
|
|
155
|
+
}
|
|
156
|
+
static isWrapped(change) {
|
|
157
|
+
return change.idOperation === "None" && change.inputState === "Exists" &&
|
|
158
|
+
change.outputState === "DoesNotExist";
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Packages this transaction published (`PackageWrite` plus `Created`), as
|
|
162
|
+
* full refs like every other accessor. A package's `type` is the literal
|
|
163
|
+
* `package` when the node reports one, and the ref falls back to it when the
|
|
164
|
+
* `objectTypes` join has no entry, so a publish is never silently dropped.
|
|
165
|
+
* Never fails.
|
|
166
|
+
*/
|
|
167
|
+
packagesPublished() {
|
|
168
|
+
const refs = [];
|
|
169
|
+
for (const change of this.effects.changedObjects) {
|
|
170
|
+
if (change.outputState !== "PackageWrite" || change.idOperation !== "Created")
|
|
171
|
+
continue;
|
|
172
|
+
const ref = this.refOf(change, "output");
|
|
173
|
+
// gRPC reports the literal `package` as a published package's type, and
|
|
174
|
+
// some nodes omit it from `objectTypes` entirely; a `PackageWrite` is a
|
|
175
|
+
// package either way.
|
|
176
|
+
refs.push(ref.type === undefined ? { ...ref, type: "package" } : ref);
|
|
177
|
+
}
|
|
178
|
+
return refs;
|
|
179
|
+
}
|
|
180
|
+
/** The net balance change for one address and coin type, in MIST. Never fails. */
|
|
181
|
+
balanceChange(address, coinType) {
|
|
182
|
+
let total = 0n;
|
|
183
|
+
for (const change of this.balanceChanges) {
|
|
184
|
+
if (change.address === address && typeMatches(coinType, change.coinType)) {
|
|
185
|
+
total += change.amount;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return total;
|
|
189
|
+
}
|
|
190
|
+
/** Computation plus storage less the storage rebate, in MIST. Can be negative. Never fails. */
|
|
191
|
+
get gasUsedTotal() {
|
|
192
|
+
const gas = this.effects.gasUsed;
|
|
193
|
+
return gas.computationCost + gas.storageCost - gas.storageRebate;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* The single object of this type the transaction created.
|
|
197
|
+
*
|
|
198
|
+
* Fails with: `UnexpectedEffects` when the transaction created no object of
|
|
199
|
+
* that type, or more than one.
|
|
200
|
+
*/
|
|
201
|
+
expectCreated(type) {
|
|
202
|
+
const created = this.created(type);
|
|
203
|
+
const only = created[0];
|
|
204
|
+
if (created.length === 1 && only !== undefined)
|
|
205
|
+
return Effect.succeed(only);
|
|
206
|
+
return Effect.fail(new UnexpectedEffects({
|
|
207
|
+
digest: this.digest,
|
|
208
|
+
expected: type,
|
|
209
|
+
found: created.map((ref) => ref.id)
|
|
210
|
+
}));
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
/** The `include` set every execute, simulate and transaction read asks for. */
|
|
214
|
+
export const EXECUTE_INCLUDE = {
|
|
215
|
+
effects: true,
|
|
216
|
+
events: true,
|
|
217
|
+
balanceChanges: true,
|
|
218
|
+
objectTypes: true
|
|
219
|
+
};
|
|
220
|
+
const decodeExecuted = Schema.decodeUnknownEffect(Executed);
|
|
221
|
+
/**
|
|
222
|
+
* Turns an SDK `TransactionResult` read with {@link EXECUTE_INCLUDE} into an
|
|
223
|
+
* `Executed`, or into the one representation of an on-chain failure.
|
|
224
|
+
*
|
|
225
|
+
* Fails with: `ExecutionFailed` when the transaction was applied and failed,
|
|
226
|
+
* and `DecodeError` when the response does not carry the include set that was
|
|
227
|
+
* asked for.
|
|
228
|
+
*/
|
|
229
|
+
export const fromTransactionResult = Effect.fn("Executed.fromTransactionResult")(function* (result) {
|
|
230
|
+
const transaction = result.$kind === "Transaction" ? result.Transaction : result.FailedTransaction;
|
|
231
|
+
const encoded = {
|
|
232
|
+
digest: transaction.digest,
|
|
233
|
+
effects: transaction.effects,
|
|
234
|
+
events: transaction.events,
|
|
235
|
+
balanceChanges: transaction.balanceChanges,
|
|
236
|
+
objectTypes: transaction.objectTypes,
|
|
237
|
+
checkpoint: transaction.checkpoint,
|
|
238
|
+
timestampMs: transaction.timestampMs
|
|
239
|
+
};
|
|
240
|
+
const executed = yield* decodeExecuted(encoded).pipe(Effect.mapError((error) => new DecodeError({ issue: error.message })));
|
|
241
|
+
if (!transaction.status.success) {
|
|
242
|
+
return yield* new ExecutionFailed({
|
|
243
|
+
digest: executed.digest,
|
|
244
|
+
reason: executionReasonOf(transaction.status.error),
|
|
245
|
+
...(transaction.status.error.command === undefined
|
|
246
|
+
? {}
|
|
247
|
+
: { command: transaction.status.error.command }),
|
|
248
|
+
effects: executed.effects
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
return executed;
|
|
252
|
+
});
|
|
253
|
+
//# sourceMappingURL=executed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executed.js","sourceRoot":"","sources":["../../src/domain/executed.ts"],"names":[],"mappings":"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"}
|