@agoric/smart-wallet 0.5.4-dev-70fb93a.0.70fb93a → 0.5.4-dev-3edcc4d.0.3edcc4d
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 +14 -14
- package/src/smartWallet.d.ts +7 -2
- package/src/smartWallet.d.ts.map +1 -1
- package/src/smartWallet.js +89 -36
- package/src/walletFactory.d.ts.map +1 -1
- package/src/walletFactory.js +15 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agoric/smart-wallet",
|
|
3
|
-
"version": "0.5.4-dev-
|
|
3
|
+
"version": "0.5.4-dev-3edcc4d.0.3edcc4d",
|
|
4
4
|
"description": "Wallet contract",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.js",
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
"lint:eslint": "yarn run -T eslint ."
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
|
-
"@agoric/casting": "0.4.3-dev-
|
|
22
|
-
"@agoric/cosmic-proto": "0.4.1-dev-
|
|
23
|
-
"@agoric/swingset-vat": "0.32.3-dev-
|
|
21
|
+
"@agoric/casting": "0.4.3-dev-3edcc4d.0.3edcc4d",
|
|
22
|
+
"@agoric/cosmic-proto": "0.4.1-dev-3edcc4d.0.3edcc4d",
|
|
23
|
+
"@agoric/swingset-vat": "0.32.3-dev-3edcc4d.0.3edcc4d",
|
|
24
24
|
"@endo/bundle-source": "^4.1.2",
|
|
25
25
|
"@endo/captp": "^4.4.8",
|
|
26
26
|
"@endo/init": "^1.1.12",
|
|
@@ -28,15 +28,15 @@
|
|
|
28
28
|
"import-meta-resolve": "^4.1.0"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@agoric/ertp": "0.16.3-dev-
|
|
32
|
-
"@agoric/internal": "0.3.3-dev-
|
|
33
|
-
"@agoric/notifier": "0.6.3-dev-
|
|
34
|
-
"@agoric/store": "0.9.3-dev-
|
|
35
|
-
"@agoric/vat-data": "0.5.3-dev-
|
|
36
|
-
"@agoric/vats": "0.15.2-dev-
|
|
37
|
-
"@agoric/vow": "0.1.1-dev-
|
|
38
|
-
"@agoric/zoe": "0.26.3-dev-
|
|
39
|
-
"@agoric/zone": "0.2.3-dev-
|
|
31
|
+
"@agoric/ertp": "0.16.3-dev-3edcc4d.0.3edcc4d",
|
|
32
|
+
"@agoric/internal": "0.3.3-dev-3edcc4d.0.3edcc4d",
|
|
33
|
+
"@agoric/notifier": "0.6.3-dev-3edcc4d.0.3edcc4d",
|
|
34
|
+
"@agoric/store": "0.9.3-dev-3edcc4d.0.3edcc4d",
|
|
35
|
+
"@agoric/vat-data": "0.5.3-dev-3edcc4d.0.3edcc4d",
|
|
36
|
+
"@agoric/vats": "0.15.2-dev-3edcc4d.0.3edcc4d",
|
|
37
|
+
"@agoric/vow": "0.1.1-dev-3edcc4d.0.3edcc4d",
|
|
38
|
+
"@agoric/zoe": "0.26.3-dev-3edcc4d.0.3edcc4d",
|
|
39
|
+
"@agoric/zone": "0.2.3-dev-3edcc4d.0.3edcc4d",
|
|
40
40
|
"@endo/errors": "^1.2.13",
|
|
41
41
|
"@endo/eventual-send": "^1.3.4",
|
|
42
42
|
"@endo/far": "^1.1.14",
|
|
@@ -77,5 +77,5 @@
|
|
|
77
77
|
"engines": {
|
|
78
78
|
"node": "^20.9 || ^22.11"
|
|
79
79
|
},
|
|
80
|
-
"gitHead": "
|
|
80
|
+
"gitHead": "3edcc4d1483769738ef20da7a712ed93b46a32eb"
|
|
81
81
|
}
|
package/src/smartWallet.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
export const EXISTING_WALLET_MY_STORES_KEY: "existingWalletMyStores";
|
|
1
2
|
export const BRAND_TO_PURSES_KEY: "brandToPurses";
|
|
2
|
-
export function prepareSmartWallet(baggage: Baggage, shared: SharedParams): (uniqueWithoutChildNodes: Omit<UniqueParams, "currentStorageNode" | "walletStorageNode"> & {
|
|
3
|
+
export function prepareSmartWallet(baggage: Baggage, shared: SharedParams, setTestJig?: SetTestJig): (uniqueWithoutChildNodes: Omit<UniqueParams, "currentStorageNode" | "walletStorageNode"> & {
|
|
3
4
|
walletStorageNode: ERemote<StorageNode>;
|
|
4
5
|
}) => Promise<import("@endo/exo").Guarded<{
|
|
5
6
|
/**
|
|
@@ -210,14 +211,18 @@ export type ImmutableState = Readonly<UniqueParams & {
|
|
|
210
211
|
liveOffers: MapStore<OfferId, OfferStatus>;
|
|
211
212
|
liveOfferSeats: MapStore<OfferId, UserSeat<unknown>>;
|
|
212
213
|
liveOfferPayments: MapStore<OfferId, MapStore<Brand, Payment>>;
|
|
213
|
-
myStore
|
|
214
|
+
myStore?: MapStore<string, unknown> | undefined;
|
|
214
215
|
}>;
|
|
215
216
|
export type PurseRecord = BrandDescriptor & {
|
|
216
217
|
purse: Purse;
|
|
217
218
|
};
|
|
218
219
|
export type MutableState = {};
|
|
220
|
+
export type SmartWalletTestJig = {
|
|
221
|
+
setWithMyStore: (enabled: boolean) => void;
|
|
222
|
+
};
|
|
219
223
|
export type SmartWallet = EReturn<EReturn<typeof prepareSmartWallet>>;
|
|
220
224
|
import type { Baggage } from '@agoric/vat-data';
|
|
225
|
+
import type { SetTestJig } from '@agoric/zoe';
|
|
221
226
|
import type { ERemote } from '@agoric/internal';
|
|
222
227
|
import type { CapData } from '@endo/marshal';
|
|
223
228
|
import type { Payment } from '@agoric/ertp';
|
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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"}
|
package/src/smartWallet.js
CHANGED
|
@@ -51,7 +51,7 @@ import { prepareOfferWatcher, makeWatchOfferOutcomes } from './offerWatcher.js';
|
|
|
51
51
|
* @import {EMarshaller} from '@agoric/internal/src/marshal/wrap-marshaller.js';
|
|
52
52
|
* @import {Amount, Brand, Issuer, Payment, Purse} from '@agoric/ertp';
|
|
53
53
|
* @import {WeakMapStore, MapStore} from '@agoric/store'
|
|
54
|
-
* @import {InvitationAmount, InvitationDetails, PaymentPKeywordRecord, Proposal, UserSeat} from '@agoric/zoe';
|
|
54
|
+
* @import {InvitationAmount, InvitationDetails, PaymentPKeywordRecord, Proposal, UserSeat, SetTestJig} from '@agoric/zoe';
|
|
55
55
|
* @import {CopyRecord} from '@endo/pass-style';
|
|
56
56
|
* @import {EReturn} from '@endo/far';
|
|
57
57
|
* @import {OfferId, OfferStatus, OfferSpec, InvokeEntryMessage, ResultPlan} from './offers.js';
|
|
@@ -222,7 +222,7 @@ const trace = makeTracer('SmrtWlt');
|
|
|
222
222
|
* liveOffers: MapStore<OfferId, OfferStatus>;
|
|
223
223
|
* liveOfferSeats: MapStore<OfferId, UserSeat<unknown>>;
|
|
224
224
|
* liveOfferPayments: MapStore<OfferId, MapStore<Brand, Payment>>;
|
|
225
|
-
* myStore
|
|
225
|
+
* myStore?: MapStore<string, unknown> | undefined;
|
|
226
226
|
* }
|
|
227
227
|
* >} ImmutableState
|
|
228
228
|
*
|
|
@@ -232,6 +232,11 @@ const trace = makeTracer('SmrtWlt');
|
|
|
232
232
|
* @typedef {{}} MutableState
|
|
233
233
|
*/
|
|
234
234
|
|
|
235
|
+
/**
|
|
236
|
+
* @typedef {object} SmartWalletTestJig
|
|
237
|
+
* @property {(enabled: boolean) => void} setWithMyStore
|
|
238
|
+
*/
|
|
239
|
+
|
|
235
240
|
/**
|
|
236
241
|
* NameHub reverse-lookup, finding 0 or more names for a target value
|
|
237
242
|
*
|
|
@@ -268,6 +273,8 @@ const checkMutual = (issuer, brand) =>
|
|
|
268
273
|
E(brand).isMyIssuer(issuer),
|
|
269
274
|
]).then(checks => checks.every(Boolean));
|
|
270
275
|
|
|
276
|
+
export const EXISTING_WALLET_MY_STORES_KEY = 'existingWalletMyStores';
|
|
277
|
+
|
|
271
278
|
export const BRAND_TO_PURSES_KEY = 'brandToPurses';
|
|
272
279
|
|
|
273
280
|
const getBrandToPurses = (walletPurses, key) => {
|
|
@@ -284,8 +291,9 @@ const getBrandToPurses = (walletPurses, key) => {
|
|
|
284
291
|
/**
|
|
285
292
|
* @param {Baggage} baggage
|
|
286
293
|
* @param {SharedParams} shared
|
|
294
|
+
* @param {SetTestJig} [setTestJig]
|
|
287
295
|
*/
|
|
288
|
-
export const prepareSmartWallet = (baggage, shared) => {
|
|
296
|
+
export const prepareSmartWallet = (baggage, shared, setTestJig) => {
|
|
289
297
|
const { registry: _r, ...passableShared } = shared;
|
|
290
298
|
mustMatch(
|
|
291
299
|
harden(passableShared),
|
|
@@ -310,6 +318,19 @@ export const prepareSmartWallet = (baggage, shared) => {
|
|
|
310
318
|
return store;
|
|
311
319
|
});
|
|
312
320
|
|
|
321
|
+
const existingWalletMyStores = zone.weakMapStore('myStore by wallet');
|
|
322
|
+
|
|
323
|
+
let withMyStore = true;
|
|
324
|
+
|
|
325
|
+
setTestJig?.(
|
|
326
|
+
() =>
|
|
327
|
+
/** @type {SmartWalletTestJig} */ ({
|
|
328
|
+
setWithMyStore: value => {
|
|
329
|
+
withMyStore = value;
|
|
330
|
+
},
|
|
331
|
+
}),
|
|
332
|
+
);
|
|
333
|
+
|
|
313
334
|
const vowTools = prepareVowTools(zone.subZone('vow'));
|
|
314
335
|
|
|
315
336
|
const makeOfferWatcher = prepareOfferWatcher(baggage, vowTools);
|
|
@@ -440,9 +461,10 @@ export const prepareSmartWallet = (baggage, shared) => {
|
|
|
440
461
|
durable: true,
|
|
441
462
|
},
|
|
442
463
|
),
|
|
443
|
-
// NB: Wallets before this state property was added
|
|
444
|
-
//
|
|
445
|
-
|
|
464
|
+
// NB: Wallets before this state property was added also support saving
|
|
465
|
+
// results or invoking the saved items, but through the alternate
|
|
466
|
+
// EXISTING_WALLET_MY_STORES_KEY baggage map.
|
|
467
|
+
myStore: withMyStore ? zone.detached().mapStore('my items') : undefined,
|
|
446
468
|
};
|
|
447
469
|
|
|
448
470
|
/** @type {RecorderKit<UpdateRecord>} */
|
|
@@ -501,6 +523,7 @@ export const prepareSmartWallet = (baggage, shared) => {
|
|
|
501
523
|
logWalletInfo: M.call().rest(M.arrayOf(M.any())).returns(),
|
|
502
524
|
logWalletError: M.call().rest(M.arrayOf(M.any())).returns(),
|
|
503
525
|
getLiveOfferPayments: M.call().returns(M.remotable('mapStore')),
|
|
526
|
+
getMyStore: M.call().returns(M.remotable('my items store')),
|
|
504
527
|
saveEntry: M.call(shape.ResultPlan, M.any()).returns(M.string()),
|
|
505
528
|
findUnusedName: M.call(M.string()).returns(M.string()),
|
|
506
529
|
}),
|
|
@@ -522,7 +545,7 @@ export const prepareSmartWallet = (baggage, shared) => {
|
|
|
522
545
|
tryExitOffer: M.call(M.scalar()).returns(M.promise()),
|
|
523
546
|
}),
|
|
524
547
|
invoke: M.interface('invoke', {
|
|
525
|
-
invokeEntry: M.
|
|
548
|
+
invokeEntry: M.call(shape.InvokeEntryMessage).returns(M.promise()),
|
|
526
549
|
}),
|
|
527
550
|
resultStepWatcher: M.interface('resultStepWatcher', {
|
|
528
551
|
onFulfilled: M.call(M.any(), invocationResultShape).returns(),
|
|
@@ -804,9 +827,25 @@ export const prepareSmartWallet = (baggage, shared) => {
|
|
|
804
827
|
}
|
|
805
828
|
return baggage.get(state.address);
|
|
806
829
|
},
|
|
830
|
+
/**
|
|
831
|
+
* @returns {NonNullable<ImmutableState['myStore']>}
|
|
832
|
+
*/
|
|
833
|
+
getMyStore() {
|
|
834
|
+
const {
|
|
835
|
+
state,
|
|
836
|
+
facets: { self },
|
|
837
|
+
} = this;
|
|
838
|
+
if ('myStore' in state && state.myStore != null) {
|
|
839
|
+
return state.myStore;
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
return provideLazy(existingWalletMyStores, self, _k =>
|
|
843
|
+
zone.detached().mapStore('my items'),
|
|
844
|
+
);
|
|
845
|
+
},
|
|
807
846
|
/** @param {string} suggestion */
|
|
808
847
|
findUnusedName(suggestion) {
|
|
809
|
-
const
|
|
848
|
+
const myStore = this.facets.helper.getMyStore();
|
|
810
849
|
let nonce = 0;
|
|
811
850
|
let name = suggestion;
|
|
812
851
|
while (myStore.has(name)) {
|
|
@@ -820,7 +859,7 @@ export const prepareSmartWallet = (baggage, shared) => {
|
|
|
820
859
|
* @param {unknown} value
|
|
821
860
|
*/
|
|
822
861
|
saveEntry(plan, value) {
|
|
823
|
-
const
|
|
862
|
+
const myStore = this.facets.helper.getMyStore();
|
|
824
863
|
const name = plan.overwrite
|
|
825
864
|
? plan.name
|
|
826
865
|
: this.facets.helper.findUnusedName(plan.name);
|
|
@@ -1112,28 +1151,49 @@ export const prepareSmartWallet = (baggage, shared) => {
|
|
|
1112
1151
|
/**
|
|
1113
1152
|
* @param {InvokeEntryMessage} message
|
|
1114
1153
|
*/
|
|
1115
|
-
|
|
1154
|
+
invokeEntry(message) {
|
|
1116
1155
|
trace('invokeEntry', message);
|
|
1117
|
-
const {
|
|
1118
|
-
const { resultStepWatcher } = this.facets;
|
|
1156
|
+
const { resultStepWatcher, helper } = this.facets;
|
|
1119
1157
|
|
|
1120
1158
|
const { targetName: name, method, args, saveResult, id } = message;
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1159
|
+
// From here on we can report status records related to the id
|
|
1160
|
+
try {
|
|
1161
|
+
const myStore = helper.getMyStore();
|
|
1162
|
+
myStore.has(name) || Fail`cannot invoke ${q(name)}: no such item`;
|
|
1163
|
+
const value = myStore.get(name);
|
|
1164
|
+
trace('entry', name, value);
|
|
1165
|
+
trace('invoke', value, '.', method, '(', args, ')');
|
|
1166
|
+
if (id) {
|
|
1167
|
+
const { updateRecorderKit } = this.state;
|
|
1168
|
+
void updateRecorderKit.recorder.write({
|
|
1169
|
+
updated: 'invocation',
|
|
1170
|
+
id,
|
|
1171
|
+
});
|
|
1172
|
+
}
|
|
1173
|
+
const callP = E(value)[method](...args);
|
|
1174
|
+
if (id || saveResult) {
|
|
1175
|
+
vowTools.watch(callP, resultStepWatcher, { id, saveResult });
|
|
1176
|
+
} else {
|
|
1177
|
+
void callP;
|
|
1178
|
+
}
|
|
1179
|
+
return Promise.resolve();
|
|
1180
|
+
} catch (reason) {
|
|
1181
|
+
if (id) {
|
|
1182
|
+
const { updateRecorderKit } = this.state;
|
|
1183
|
+
void updateRecorderKit.recorder.write({
|
|
1184
|
+
updated: 'invocation',
|
|
1185
|
+
id,
|
|
1186
|
+
error: String(reason),
|
|
1187
|
+
});
|
|
1188
|
+
// handleBridgeAction records sync error so return a rejected
|
|
1189
|
+
// Promise to avoid overriding our update, but still report an
|
|
1190
|
+
// error to any test caller of `handleBridgeAction`
|
|
1191
|
+
return Promise.reject(reason);
|
|
1192
|
+
} else {
|
|
1193
|
+
// We could'd report the failure, so let `handleBridgeAction` do
|
|
1194
|
+
// some best effort reporting
|
|
1195
|
+
throw reason;
|
|
1196
|
+
}
|
|
1137
1197
|
}
|
|
1138
1198
|
},
|
|
1139
1199
|
},
|
|
@@ -1189,7 +1249,7 @@ export const prepareSmartWallet = (baggage, shared) => {
|
|
|
1189
1249
|
* @returns {Promise<void>}
|
|
1190
1250
|
*/
|
|
1191
1251
|
handleBridgeAction(actionCapData, canSpend = false) {
|
|
1192
|
-
const { facets
|
|
1252
|
+
const { facets } = this;
|
|
1193
1253
|
const { offers, invoke } = facets;
|
|
1194
1254
|
const { publicMarshaller } = shared;
|
|
1195
1255
|
|
|
@@ -1203,8 +1263,6 @@ export const prepareSmartWallet = (baggage, shared) => {
|
|
|
1203
1263
|
});
|
|
1204
1264
|
};
|
|
1205
1265
|
|
|
1206
|
-
const walletHasNameHub = 'myStore' in state && state.myStore != null;
|
|
1207
|
-
|
|
1208
1266
|
// use E.when to retain distributed stack trace
|
|
1209
1267
|
return E.when(
|
|
1210
1268
|
E(publicMarshaller).fromCapData(actionCapData),
|
|
@@ -1214,9 +1272,6 @@ export const prepareSmartWallet = (baggage, shared) => {
|
|
|
1214
1272
|
switch (action.method) {
|
|
1215
1273
|
case 'executeOffer': {
|
|
1216
1274
|
canSpend || Fail`executeOffer requires spend authority`;
|
|
1217
|
-
if (action.offer.saveResult != null && !walletHasNameHub) {
|
|
1218
|
-
Fail`executeOffer saveResult requires a new smart wallet with myStore`;
|
|
1219
|
-
}
|
|
1220
1275
|
|
|
1221
1276
|
return offers.executeOffer(action.offer);
|
|
1222
1277
|
}
|
|
@@ -1225,8 +1280,6 @@ export const prepareSmartWallet = (baggage, shared) => {
|
|
|
1225
1280
|
return offers.tryExitOffer(action.offerId);
|
|
1226
1281
|
}
|
|
1227
1282
|
case 'invokeEntry': {
|
|
1228
|
-
walletHasNameHub ||
|
|
1229
|
-
Fail`invokeEntry requires a new smart wallet with myStore`;
|
|
1230
1283
|
return invoke.invokeEntry(action.message);
|
|
1231
1284
|
}
|
|
1232
1285
|
default: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"walletFactory.d.ts","sourceRoot":"","sources":["walletFactory.js"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"walletFactory.d.ts","sourceRoot":"","sources":["walletFactory.js"],"names":[],"mappings":";;;;;AA8CA,gEAKE;AAYK,6CAJI,MAAM,UACN,WAAW,uBACX,IAAI,CAAC,SAAS,CAAC,oBAezB;AAWM,kDAFI,cAAc;IAyCrB,2BAA2B;iBAAf,KAAK;IAEjB,2BAA2B;iBAAf,KAAK;eArCP,KAAK;qBACC,WAAW;gBAChB,MAAM;iBACL,OAAO;;;eAHT,KAAK;qBACC,WAAW;gBAChB,MAAM;iBACL,OAAO;;EAuCtB;AAmCM,6BARI,GAAG,CAAC,wBAAwB,CAAC,eAC7B;IACN,WAAW,EAAE,QAAQ,WAAW,CAAC,CAAC;IAClC,mBAAmB,CAAC,EAAE,IAAI,CAAC,oBAAoB,QAAQ,CAAC,CAAC,CAAC;IAC1D,aAAa,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;CACrC,WACO,OAAO;;QAyHZ;;;;;;;WAOG;oCANQ,MAAM,QACN,IAAI,CAAC,IAAI,CAAC,uBACV,IAAI,CAAC,SAAS,CAAC,GACb,OAAO,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;;GAyDhE;uCApNY;IACR,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;CAChC;6BAGS;IACR,oBAAoB,EAAE,MAAM,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC,CAAC;CACtE;uBAGS,OAAO;4BAEP;IACR,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IACxD,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,QAAQ,CAAC;CAC1C;oBAwMU,OAAO,OAAO;iCAvUsB,kBAAkB;+BACxC,cAAc;6BAChB,YAAY;iCALR,0CAA0C;6BAD9C,kBAAkB;yCASN,cAAc;6BAC1B,kBAAkB;0BAErB,8BAA8B;6BAT3B,cAAc;2BAIhB,cAAc;qCACJ,8BAA8B"}
|
package/src/walletFactory.js
CHANGED
|
@@ -14,6 +14,7 @@ import { M, makeExo, makeScalarMapStore, mustMatch } from '@agoric/store';
|
|
|
14
14
|
import { makeAtomicProvider } from '@agoric/store/src/stores/store-utils.js';
|
|
15
15
|
import { prepareExo, provideDurableMapStore } from '@agoric/vat-data';
|
|
16
16
|
import { provideAll } from '@agoric/zoe/src/contractSupport/durability.js';
|
|
17
|
+
import { makeJigKit } from '@agoric/zoe/src/contractSupport/testJigHelpers.js';
|
|
17
18
|
import { E } from '@endo/far';
|
|
18
19
|
import { prepareSmartWallet } from './smartWallet.js';
|
|
19
20
|
import { shape } from './typeGuards.js';
|
|
@@ -23,7 +24,7 @@ import { shape } from './typeGuards.js';
|
|
|
23
24
|
* @import {StorageNode} from '@agoric/internal/src/lib-chainStorage.js';
|
|
24
25
|
* @import {MapStore} from '@agoric/swingset-liveslots';
|
|
25
26
|
* @import {NameHub} from '@agoric/vats';
|
|
26
|
-
* @import {SmartWallet} from './smartWallet.js';
|
|
27
|
+
* @import {SmartWallet, SmartWalletTestJig} from './smartWallet.js';
|
|
27
28
|
* @import {NameAdmin} from '@agoric/vats';
|
|
28
29
|
* @import {Petname} from './types.js';
|
|
29
30
|
* @import {Board} from '@agoric/vats';
|
|
@@ -32,6 +33,7 @@ import { shape } from './typeGuards.js';
|
|
|
32
33
|
* @import {Baggage} from '@agoric/vat-data';
|
|
33
34
|
* @import {WalletBridgeMsg} from './types.js';
|
|
34
35
|
* @import {Bank} from '@agoric/vats/src/vat-bank.js';
|
|
36
|
+
* @import {TestJigKit} from '@agoric/zoe/src/contractSupport/testJigHelpers.js';
|
|
35
37
|
*/
|
|
36
38
|
|
|
37
39
|
const trace = makeTracer('WltFct');
|
|
@@ -257,13 +259,20 @@ export const prepare = async (zcf, privateArgs, baggage) => {
|
|
|
257
259
|
zoe,
|
|
258
260
|
});
|
|
259
261
|
|
|
262
|
+
/** @type {TestJigKit<SmartWalletTestJig>} */
|
|
263
|
+
const smartWalletJigKit = makeJigKit();
|
|
264
|
+
|
|
260
265
|
/**
|
|
261
266
|
* Holders of this object:
|
|
262
267
|
*
|
|
263
268
|
* - vat (transitively from holding the wallet factory)
|
|
264
269
|
* - wallet-ui (which has key material; dapps use wallet-ui to propose actions)
|
|
265
270
|
*/
|
|
266
|
-
const makeSmartWallet = prepareSmartWallet(
|
|
271
|
+
const makeSmartWallet = prepareSmartWallet(
|
|
272
|
+
baggage,
|
|
273
|
+
shared,
|
|
274
|
+
smartWalletJigKit.setTestJig,
|
|
275
|
+
);
|
|
267
276
|
|
|
268
277
|
const creatorFacet = prepareExo(
|
|
269
278
|
baggage,
|
|
@@ -330,6 +339,10 @@ export const prepare = async (zcf, privateArgs, baggage) => {
|
|
|
330
339
|
}
|
|
331
340
|
}
|
|
332
341
|
|
|
342
|
+
zcf.setTestJig(() => {
|
|
343
|
+
return { ...smartWalletJigKit.getTestJig() };
|
|
344
|
+
});
|
|
345
|
+
|
|
333
346
|
return {
|
|
334
347
|
creatorFacet,
|
|
335
348
|
};
|