@agoric/smart-wallet 0.5.4-other-dev-8f8782b.0 → 0.5.4-other-dev-fbe72e7.0.fbe72e7
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/package.json +43 -29
- package/src/index.d.ts +2 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.js +6 -0
- package/src/invitations.d.ts +14 -10
- package/src/invitations.d.ts.map +1 -1
- package/src/invitations.js +39 -33
- package/src/marshal-contexts.d.ts +45 -41
- package/src/marshal-contexts.d.ts.map +1 -1
- package/src/marshal-contexts.js +69 -61
- package/src/offerWatcher.d.ts +54 -0
- package/src/offerWatcher.d.ts.map +1 -0
- package/src/offerWatcher.js +343 -0
- package/src/offers.d.ts +60 -30
- package/src/offers.d.ts.map +1 -1
- package/src/offers.js +38 -182
- package/src/proposals/upgrade-wallet-factory2-proposal.js +61 -0
- package/src/proposals/upgrade-walletFactory-proposal.js +46 -23
- package/src/smartWallet.d.ts +132 -68
- package/src/smartWallet.d.ts.map +1 -1
- package/src/smartWallet.js +718 -217
- package/src/typeGuards.d.ts +1 -1
- package/src/typeGuards.js +29 -1
- package/src/types-index.d.ts +2 -0
- package/src/types-index.js +2 -0
- package/src/types.d.ts +36 -41
- package/src/types.d.ts.map +1 -0
- package/src/types.ts +90 -0
- package/src/utils.d.ts +17 -14
- package/src/utils.d.ts.map +1 -1
- package/src/utils.js +19 -6
- package/src/walletFactory.d.ts +24 -78
- package/src/walletFactory.d.ts.map +1 -1
- package/src/walletFactory.js +64 -37
- package/CHANGELOG.md +0 -180
- package/src/payments.d.ts +0 -20
- package/src/payments.d.ts.map +0 -1
- package/src/payments.js +0 -89
- package/src/proposals/upgrade-walletFactory-proposal.d.ts +0 -17
- package/src/proposals/upgrade-walletFactory-proposal.d.ts.map +0 -1
package/src/smartWallet.d.ts
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
export const BRAND_TO_PURSES_KEY: "brandToPurses";
|
|
2
|
-
export function prepareSmartWallet(baggage:
|
|
2
|
+
export function prepareSmartWallet(baggage: import("@agoric/vat-data").Baggage, shared: SharedParams): (uniqueWithoutChildNodes: Omit<UniqueParams, "currentStorageNode" | "walletStorageNode"> & {
|
|
3
3
|
walletStorageNode: ERef<StorageNode>;
|
|
4
|
-
}) => Promise<{
|
|
4
|
+
}) => Promise<import("@endo/exo").Guarded<{
|
|
5
5
|
/**
|
|
6
|
-
* Umarshals the actionCapData and delegates to the appropriate action
|
|
6
|
+
* Umarshals the actionCapData and delegates to the appropriate action
|
|
7
|
+
* handler.
|
|
7
8
|
*
|
|
8
|
-
* @param {import('@endo/marshal').CapData<string>} actionCapData
|
|
9
|
+
* @param {import('@endo/marshal').CapData<string | null>} actionCapData
|
|
10
|
+
* of type BridgeAction
|
|
9
11
|
* @param {boolean} [canSpend]
|
|
10
12
|
* @returns {Promise<void>}
|
|
11
13
|
*/
|
|
12
|
-
handleBridgeAction(actionCapData: import(
|
|
13
|
-
getDepositFacet(): {
|
|
14
|
+
handleBridgeAction(actionCapData: import("@endo/marshal").CapData<string | null>, canSpend?: boolean): Promise<void>;
|
|
15
|
+
getDepositFacet(): import("@endo/exo").Guarded<{
|
|
14
16
|
/**
|
|
15
17
|
* Put the assets from the payment into the appropriate purse.
|
|
16
18
|
*
|
|
@@ -18,153 +20,215 @@ export function prepareSmartWallet(baggage: MapStore<string, unknown>, shared: S
|
|
|
18
20
|
*
|
|
19
21
|
* @param {Payment} payment
|
|
20
22
|
* @returns {Promise<Amount>}
|
|
21
|
-
* @throws if there's not yet a purse, though the payment is held to try
|
|
23
|
+
* @throws if there's not yet a purse, though the payment is held to try
|
|
24
|
+
* again when there is
|
|
22
25
|
*/
|
|
23
26
|
receive(payment: Payment): Promise<Amount>;
|
|
24
|
-
}
|
|
25
|
-
|
|
27
|
+
}>;
|
|
28
|
+
getInvokeFacet(): import("@endo/exo").Guarded<{
|
|
29
|
+
/**
|
|
30
|
+
* @param {InvokeEntryMessage} message
|
|
31
|
+
*/
|
|
32
|
+
invokeEntry(message: InvokeEntryMessage): Promise<void>;
|
|
33
|
+
}>;
|
|
34
|
+
getOffersFacet(): import("@endo/exo").Guarded<{
|
|
26
35
|
/**
|
|
27
|
-
* Take an offer description provided in capData, augment it with
|
|
36
|
+
* Take an offer description provided in capData, augment it with
|
|
37
|
+
* payments and call zoe.offer()
|
|
28
38
|
*
|
|
29
|
-
* @param {
|
|
30
|
-
* @returns {Promise<void>} after the offer has been both seated and
|
|
31
|
-
*
|
|
39
|
+
* @param {OfferSpec} offerSpec
|
|
40
|
+
* @returns {Promise<void>} after the offer has been both seated and
|
|
41
|
+
* exited by Zoe.
|
|
42
|
+
* @throws if any parts of the offer can be determined synchronously to
|
|
43
|
+
* be invalid
|
|
32
44
|
*/
|
|
33
|
-
executeOffer(offerSpec:
|
|
45
|
+
executeOffer(offerSpec: OfferSpec): Promise<void>;
|
|
34
46
|
/**
|
|
35
47
|
* Take an offer's id, look up its seat, try to exit.
|
|
36
48
|
*
|
|
37
|
-
* @param {
|
|
49
|
+
* @param {OfferId} offerId
|
|
38
50
|
* @returns {Promise<void>}
|
|
39
51
|
* @throws if the seat can't be found or E(seatRef).tryExit() fails.
|
|
40
52
|
*/
|
|
41
|
-
tryExitOffer(offerId:
|
|
42
|
-
}
|
|
53
|
+
tryExitOffer(offerId: OfferId): Promise<void>;
|
|
54
|
+
}>;
|
|
43
55
|
/** @deprecated use getPublicTopics */
|
|
44
|
-
getCurrentSubscriber(): Subscriber<CurrentWalletRecord>;
|
|
56
|
+
getCurrentSubscriber(): globalThis.Subscriber<CurrentWalletRecord>;
|
|
45
57
|
/** @deprecated use getPublicTopics */
|
|
46
|
-
getUpdatesSubscriber(): Subscriber<UpdateRecord>;
|
|
58
|
+
getUpdatesSubscriber(): globalThis.Subscriber<UpdateRecord>;
|
|
47
59
|
getPublicTopics(): {
|
|
48
60
|
current: {
|
|
49
61
|
description: string;
|
|
50
|
-
subscriber: Subscriber<CurrentWalletRecord>;
|
|
62
|
+
subscriber: globalThis.Subscriber<CurrentWalletRecord>;
|
|
51
63
|
storagePath: Promise<string>;
|
|
52
64
|
};
|
|
53
65
|
updates: {
|
|
54
66
|
description: string;
|
|
55
|
-
subscriber: Subscriber<UpdateRecord>;
|
|
67
|
+
subscriber: globalThis.Subscriber<UpdateRecord>;
|
|
56
68
|
storagePath: Promise<string>;
|
|
57
69
|
};
|
|
58
70
|
};
|
|
59
|
-
}
|
|
71
|
+
}>>;
|
|
72
|
+
export type ExecutorPowers = {
|
|
73
|
+
logger: {
|
|
74
|
+
info: (...args: any[]) => void;
|
|
75
|
+
error: (...args: any[]) => void;
|
|
76
|
+
};
|
|
77
|
+
makeOfferWatcher: import("./offerWatcher.js").MakeOfferWatcher;
|
|
78
|
+
invitationFromSpec: ERef<Invitation>;
|
|
79
|
+
};
|
|
60
80
|
export type ExecuteOfferAction = {
|
|
61
|
-
method:
|
|
62
|
-
offer:
|
|
81
|
+
method: "executeOffer";
|
|
82
|
+
offer: OfferSpec;
|
|
63
83
|
};
|
|
64
84
|
export type TryExitOfferAction = {
|
|
65
|
-
method:
|
|
66
|
-
offerId:
|
|
85
|
+
method: "tryExitOffer";
|
|
86
|
+
offerId: OfferId;
|
|
67
87
|
};
|
|
68
|
-
export type
|
|
88
|
+
export type InvokeStoreEntryAction = {
|
|
89
|
+
/**
|
|
90
|
+
* BridgeAction discriminator
|
|
91
|
+
*/
|
|
92
|
+
method: "invokeEntry";
|
|
93
|
+
/**
|
|
94
|
+
* object method call to make
|
|
95
|
+
*/
|
|
96
|
+
message: InvokeEntryMessage;
|
|
97
|
+
};
|
|
98
|
+
export type BridgeAction = ExecuteOfferAction | TryExitOfferAction | InvokeStoreEntryAction;
|
|
69
99
|
/**
|
|
70
|
-
* Purses is an array to support a future requirement of multiple purses per
|
|
100
|
+
* Purses is an array to support a future requirement of multiple purses per
|
|
101
|
+
* brand.
|
|
71
102
|
*
|
|
72
|
-
* Each map is encoded as an array of entries because a Map doesn't serialize
|
|
73
|
-
* We also considered having a vstorage key for each offer but for now
|
|
103
|
+
* Each map is encoded as an array of entries because a Map doesn't serialize
|
|
104
|
+
* directly. We also considered having a vstorage key for each offer but for now
|
|
105
|
+
* are sticking with this design.
|
|
74
106
|
*
|
|
75
107
|
* Cons
|
|
76
|
-
*
|
|
77
|
-
*
|
|
108
|
+
*
|
|
109
|
+
* - Reserializes previously written results when a new result is added
|
|
110
|
+
* - Optimizes reads though writes are on-chain (~100 machines) and reads are
|
|
111
|
+
* off-chain (to 1 machine)
|
|
78
112
|
*
|
|
79
113
|
* Pros
|
|
80
|
-
* - Reading all offer results happens much more (>100) often than storing a new offer result
|
|
81
|
-
* - Reserialization and writes are paid in execution gas, whereas reads are not
|
|
82
114
|
*
|
|
83
|
-
*
|
|
115
|
+
* - Reading all offer results happens much more (>100) often than storing a new
|
|
116
|
+
* offer result
|
|
117
|
+
* - Reserialization and writes are paid in execution gas, whereas reads are not
|
|
118
|
+
*
|
|
119
|
+
* This design should be revisited if ever batch querying across vstorage keys
|
|
120
|
+
* become cheaper or reads be paid.
|
|
84
121
|
*/
|
|
85
122
|
export type CurrentWalletRecord = {
|
|
86
|
-
purses:
|
|
123
|
+
purses: {
|
|
87
124
|
brand: Brand;
|
|
88
125
|
balance: Amount;
|
|
89
|
-
}
|
|
90
|
-
offerToUsedInvitation:
|
|
126
|
+
}[];
|
|
127
|
+
offerToUsedInvitation: [offerId: string, usedInvitation: Amount][];
|
|
91
128
|
offerToPublicSubscriberPaths: [offerId: string, publicTopics: {
|
|
92
129
|
[subscriberName: string]: string;
|
|
93
130
|
}][];
|
|
94
|
-
liveOffers:
|
|
131
|
+
liveOffers: [OfferId, OfferStatus][];
|
|
95
132
|
};
|
|
96
133
|
/**
|
|
97
134
|
* Record of an update to the state of this wallet.
|
|
98
135
|
*
|
|
99
|
-
* Client is responsible for coalescing updates into a current state. See
|
|
136
|
+
* Client is responsible for coalescing updates into a current state. See
|
|
137
|
+
* `coalesceUpdates` utility.
|
|
100
138
|
*
|
|
101
|
-
* The reason for this burden on the client is that publishing
|
|
102
|
-
*
|
|
139
|
+
* The reason for this burden on the client is that publishing the full history
|
|
140
|
+
* of offers with each change is untenable.
|
|
103
141
|
*
|
|
104
142
|
* `balance` update supports forward-compatibility for more than one purse per
|
|
105
|
-
* brand. An additional key will be needed to disambiguate. For now the brand
|
|
106
|
-
* the amount suffices.
|
|
143
|
+
* brand. An additional key will be needed to disambiguate. For now the brand
|
|
144
|
+
* in the amount suffices.
|
|
107
145
|
*/
|
|
108
146
|
export type UpdateRecord = {
|
|
109
|
-
updated:
|
|
110
|
-
status:
|
|
147
|
+
updated: "offerStatus";
|
|
148
|
+
status: OfferStatus;
|
|
111
149
|
} | {
|
|
112
|
-
updated:
|
|
150
|
+
updated: "balance";
|
|
113
151
|
currentAmount: Amount;
|
|
114
152
|
} | {
|
|
115
|
-
updated:
|
|
153
|
+
updated: "walletAction";
|
|
116
154
|
status: {
|
|
117
155
|
error: string;
|
|
118
156
|
};
|
|
157
|
+
} | {
|
|
158
|
+
updated: "invocation";
|
|
159
|
+
id: string | number;
|
|
160
|
+
error?: string;
|
|
161
|
+
result?: {
|
|
162
|
+
name?: string;
|
|
163
|
+
passStyle: string;
|
|
164
|
+
};
|
|
119
165
|
};
|
|
120
166
|
/**
|
|
121
|
-
* For use by clients to describe brands to users. Includes `displayInfo` to
|
|
167
|
+
* For use by clients to describe brands to users. Includes `displayInfo` to
|
|
168
|
+
* save a remote call.
|
|
122
169
|
*/
|
|
123
170
|
export type BrandDescriptor = {
|
|
124
171
|
brand: Brand;
|
|
125
172
|
displayInfo: DisplayInfo;
|
|
126
173
|
issuer: Issuer;
|
|
127
|
-
petname: import(
|
|
174
|
+
petname: import("./types.js").Petname;
|
|
128
175
|
};
|
|
129
|
-
export type RemotePurse = import('./types').RemotePurse;
|
|
130
176
|
export type UniqueParams = {
|
|
131
177
|
address: string;
|
|
132
|
-
bank: ERef<import(
|
|
178
|
+
bank: ERef<import("@agoric/vats/src/vat-bank.js").Bank>;
|
|
133
179
|
currentStorageNode: StorageNode;
|
|
134
|
-
invitationPurse: Purse<
|
|
180
|
+
invitationPurse: Purse<"set", InvitationDetails>;
|
|
135
181
|
walletStorageNode: StorageNode;
|
|
136
182
|
};
|
|
137
|
-
export type BrandDescriptorRegistry = Pick<MapStore<Brand, BrandDescriptor>,
|
|
183
|
+
export type BrandDescriptorRegistry = Pick<MapStore<Brand, BrandDescriptor>, "has" | "get" | "values">;
|
|
138
184
|
export type SharedParams = {
|
|
139
|
-
agoricNames: ERef<import(
|
|
185
|
+
agoricNames: ERef<import("@agoric/vats").NameHub>;
|
|
140
186
|
registry: BrandDescriptorRegistry;
|
|
141
|
-
invitationIssuer: Issuer<
|
|
142
|
-
invitationBrand: Brand<
|
|
187
|
+
invitationIssuer: Issuer<"set">;
|
|
188
|
+
invitationBrand: Brand<"set">;
|
|
143
189
|
invitationDisplayInfo: DisplayInfo;
|
|
144
190
|
publicMarshaller: Marshaller;
|
|
145
191
|
zoe: ERef<ZoeService>;
|
|
146
192
|
};
|
|
147
193
|
/**
|
|
148
|
-
* - `brandPurses` is precious
|
|
194
|
+
* - `brandPurses` is precious
|
|
195
|
+
* and closely held. defined as late as possible to reduce its scope.
|
|
196
|
+
*
|
|
149
197
|
* - `offerToInvitationMakers` is precious and closely held.
|
|
150
198
|
* - `offerToPublicSubscriberPaths` is precious and closely held.
|
|
151
|
-
* - `purseBalances` is a cache of what we've received from purses. Held so we can
|
|
199
|
+
* - `purseBalances` is a cache of what we've received from purses. Held so we can
|
|
200
|
+
* publish all balances on change.
|
|
152
201
|
*/
|
|
153
202
|
export type State = ImmutableState & MutableState;
|
|
154
203
|
export type ImmutableState = Readonly<UniqueParams & {
|
|
155
|
-
paymentQueues: MapStore<Brand,
|
|
156
|
-
offerToInvitationMakers: MapStore<string, import(
|
|
204
|
+
paymentQueues: MapStore<Brand, Payment[]>;
|
|
205
|
+
offerToInvitationMakers: MapStore<string, import("./types.js").InvitationMakers>;
|
|
157
206
|
offerToPublicSubscriberPaths: MapStore<string, Record<string, string>>;
|
|
158
|
-
offerToUsedInvitation: MapStore<string, Amount
|
|
159
|
-
purseBalances: MapStore<
|
|
160
|
-
updateRecorderKit: import(
|
|
161
|
-
currentRecorderKit: import(
|
|
162
|
-
liveOffers: MapStore<
|
|
163
|
-
liveOfferSeats:
|
|
207
|
+
offerToUsedInvitation: MapStore<string, Amount<"set">>;
|
|
208
|
+
purseBalances: MapStore<Purse, Amount>;
|
|
209
|
+
updateRecorderKit: import("@agoric/zoe/src/contractSupport/recorder.js").RecorderKit<UpdateRecord>;
|
|
210
|
+
currentRecorderKit: import("@agoric/zoe/src/contractSupport/recorder.js").RecorderKit<CurrentWalletRecord>;
|
|
211
|
+
liveOffers: MapStore<OfferId, OfferStatus>;
|
|
212
|
+
liveOfferSeats: MapStore<OfferId, UserSeat<unknown>>;
|
|
213
|
+
liveOfferPayments: MapStore<OfferId, MapStore<Brand, Payment>>;
|
|
214
|
+
myStore: MapStore;
|
|
164
215
|
}>;
|
|
165
216
|
export type PurseRecord = BrandDescriptor & {
|
|
166
217
|
purse: Purse;
|
|
167
218
|
};
|
|
168
219
|
export type MutableState = {};
|
|
169
|
-
export type SmartWallet =
|
|
220
|
+
export type SmartWallet = EReturn<EReturn<typeof prepareSmartWallet>>;
|
|
221
|
+
import type { Payment } from '@agoric/ertp';
|
|
222
|
+
import type { Amount } from '@agoric/ertp';
|
|
223
|
+
import type { InvokeEntryMessage } from './offers.js';
|
|
224
|
+
import type { OfferSpec } from './offers.js';
|
|
225
|
+
import type { OfferId } from './offers.js';
|
|
226
|
+
import type { Brand } from '@agoric/ertp';
|
|
227
|
+
import type { OfferStatus } from './offers.js';
|
|
228
|
+
import type { Issuer } from '@agoric/ertp';
|
|
229
|
+
import type { InvitationDetails } from '@agoric/zoe';
|
|
230
|
+
import type { Purse } from '@agoric/ertp';
|
|
231
|
+
import type { MapStore } from '@agoric/store';
|
|
232
|
+
import type { UserSeat } from '@agoric/zoe';
|
|
233
|
+
import type { EReturn } from '@endo/far';
|
|
170
234
|
//# sourceMappingURL=smartWallet.d.ts.map
|
package/src/smartWallet.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smartWallet.d.ts","sourceRoot":"","sources":["smartWallet.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"smartWallet.d.ts","sourceRoot":"","sources":["smartWallet.js"],"names":[],"mappings":"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"}
|