@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agoric/smart-wallet",
3
- "version": "0.5.4-dev-70fb93a.0.70fb93a",
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-70fb93a.0.70fb93a",
22
- "@agoric/cosmic-proto": "0.4.1-dev-70fb93a.0.70fb93a",
23
- "@agoric/swingset-vat": "0.32.3-dev-70fb93a.0.70fb93a",
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-70fb93a.0.70fb93a",
32
- "@agoric/internal": "0.3.3-dev-70fb93a.0.70fb93a",
33
- "@agoric/notifier": "0.6.3-dev-70fb93a.0.70fb93a",
34
- "@agoric/store": "0.9.3-dev-70fb93a.0.70fb93a",
35
- "@agoric/vat-data": "0.5.3-dev-70fb93a.0.70fb93a",
36
- "@agoric/vats": "0.15.2-dev-70fb93a.0.70fb93a",
37
- "@agoric/vow": "0.1.1-dev-70fb93a.0.70fb93a",
38
- "@agoric/zoe": "0.26.3-dev-70fb93a.0.70fb93a",
39
- "@agoric/zone": "0.2.3-dev-70fb93a.0.70fb93a",
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": "70fb93afcb746d40510dcbe3a20370786fb627db"
80
+ "gitHead": "3edcc4d1483769738ef20da7a712ed93b46a32eb"
81
81
  }
@@ -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: MapStore;
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';
@@ -1 +1 @@
1
- {"version":3,"file":"smartWallet.d.ts","sourceRoot":"","sources":["smartWallet.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"smartWallet.d.ts","sourceRoot":"","sources":["smartWallet.js"],"names":[],"mappings":"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"}
@@ -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: MapStore;
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 do not support
444
- // saving results or invoking the saved items.
445
- myStore: zone.detached().mapStore('my items'),
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.callWhen(shape.InvokeEntryMessage).returns(),
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 { myStore } = this.state;
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 { myStore } = this.state;
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
- async invokeEntry(message) {
1154
+ invokeEntry(message) {
1116
1155
  trace('invokeEntry', message);
1117
- const { myStore } = this.state;
1118
- const { resultStepWatcher } = this.facets;
1156
+ const { resultStepWatcher, helper } = this.facets;
1119
1157
 
1120
1158
  const { targetName: name, method, args, saveResult, id } = message;
1121
- myStore.has(name) || Fail`cannot invoke ${q(name)}: no such item`;
1122
- const value = myStore.get(name);
1123
- trace('entry', name, value);
1124
- trace('invoke', value, '.', method, '(', args, ')');
1125
- if (id) {
1126
- const { updateRecorderKit } = this.state;
1127
- void updateRecorderKit.recorder.write({
1128
- updated: 'invocation',
1129
- id,
1130
- });
1131
- }
1132
- const callP = E(value)[method](...args);
1133
- if (id || saveResult) {
1134
- vowTools.watch(callP, resultStepWatcher, { id, saveResult });
1135
- } else {
1136
- void callP;
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, state } = this;
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":";;;;;AA4CA,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;;QAkHZ;;;;;;;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;;GAqDhE;uCAzMY;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;oBA6LU,OAAO,OAAO;iCA3TE,kBAAkB;+BACpB,cAAc;6BAChB,YAAY;iCALR,0CAA0C;6BAD9C,kBAAkB;yCASN,cAAc;6BAC1B,kBAAkB;0BAErB,8BAA8B;6BAT3B,cAAc;2BAIhB,cAAc;qCACJ,8BAA8B"}
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"}
@@ -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(baggage, shared);
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
  };