@agoric/zoe 0.26.3-upgrade-14-dev-0a0580c.0 → 0.26.3-upgrade-14-dev-c2ea6db.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agoric/zoe",
3
- "version": "0.26.3-upgrade-14-dev-0a0580c.0+0a0580c",
3
+ "version": "0.26.3-upgrade-14-dev-c2ea6db.0+c2ea6db",
4
4
  "description": "Zoe: the Smart Contract Framework for Offer Enforcement",
5
5
  "type": "module",
6
6
  "main": "./src/zoeService/zoe.js",
@@ -43,14 +43,14 @@
43
43
  },
44
44
  "homepage": "https://github.com/Agoric/agoric-sdk#readme",
45
45
  "dependencies": {
46
- "@agoric/assert": "0.6.1-upgrade-14-dev-0a0580c.0+0a0580c",
47
- "@agoric/ertp": "0.16.3-upgrade-14-dev-0a0580c.0+0a0580c",
48
- "@agoric/internal": "0.4.0-upgrade-14-dev-0a0580c.0+0a0580c",
49
- "@agoric/notifier": "0.6.3-upgrade-14-dev-0a0580c.0+0a0580c",
50
- "@agoric/store": "0.9.3-upgrade-14-dev-0a0580c.0+0a0580c",
51
- "@agoric/swingset-vat": "0.32.3-upgrade-14-dev-0a0580c.0+0a0580c",
52
- "@agoric/time": "0.3.3-upgrade-14-dev-0a0580c.0+0a0580c",
53
- "@agoric/vat-data": "0.5.3-upgrade-14-dev-0a0580c.0+0a0580c",
46
+ "@agoric/assert": "0.6.1-upgrade-14-dev-c2ea6db.0+c2ea6db",
47
+ "@agoric/ertp": "0.16.3-upgrade-14-dev-c2ea6db.0+c2ea6db",
48
+ "@agoric/internal": "0.4.0-upgrade-14-dev-c2ea6db.0+c2ea6db",
49
+ "@agoric/notifier": "0.6.3-upgrade-14-dev-c2ea6db.0+c2ea6db",
50
+ "@agoric/store": "0.9.3-upgrade-14-dev-c2ea6db.0+c2ea6db",
51
+ "@agoric/swingset-vat": "0.32.3-upgrade-14-dev-c2ea6db.0+c2ea6db",
52
+ "@agoric/time": "0.3.3-upgrade-14-dev-c2ea6db.0+c2ea6db",
53
+ "@agoric/vat-data": "0.5.3-upgrade-14-dev-c2ea6db.0+c2ea6db",
54
54
  "@endo/bundle-source": "2.5.2-upstream-rollup",
55
55
  "@endo/captp": "3.1.1",
56
56
  "@endo/eventual-send": "0.17.2",
@@ -126,5 +126,5 @@
126
126
  "publishConfig": {
127
127
  "access": "public"
128
128
  },
129
- "gitHead": "0a0580cba9f4b41a1dc748cdd267dbcf0feed362"
129
+ "gitHead": "c2ea6db4813f678974bacc032db3142802af6516"
130
130
  }
@@ -1 +1 @@
1
- {"version":3,"file":"zcfZygote.d.ts","sourceRoot":"","sources":["zcfZygote.js"],"names":[],"mappings":"AAiDO,sCARI,SAAS,cACT,KAAK,UAAU,CAAC,oBAChB,OAAO,KAAK,CAAC,iBACb,aAAa,qBACb,SAAS,2CAEP,QAAQ,SAAS,CAAC,CAyZ9B;kCAxaa,OAAO,cAAc,EAAE,mBAAmB"}
1
+ {"version":3,"file":"zcfZygote.d.ts","sourceRoot":"","sources":["zcfZygote.js"],"names":[],"mappings":"AAiDO,sCARI,SAAS,cACT,KAAK,UAAU,CAAC,oBAChB,OAAO,KAAK,CAAC,iBACb,aAAa,qBACb,SAAS,2CAEP,QAAQ,SAAS,CAAC,CA6Z9B;kCA5aa,OAAO,cAAc,EAAE,mBAAmB"}
@@ -371,6 +371,7 @@ export const makeZCFZygote = async (
371
371
  instanceRecHolder = makeInstanceRecord(instanceRecordFromZoe);
372
372
  instantiateIssuerStorage(issuerStorageFromZoe);
373
373
  zcfBaggage.init('instanceRecHolder', instanceRecHolder);
374
+ zcfBaggage.init('repairedContractCompletionWatcher', true);
374
375
 
375
376
  const startFn = start || prepare;
376
377
  if (privateArgsShape) {
@@ -423,8 +424,11 @@ export const makeZCFZygote = async (
423
424
  instanceRecHolder = zcfBaggage.get('instanceRecHolder');
424
425
  initSeatMgrAndMintKind();
425
426
 
426
- if (privateArgsShape) {
427
- mustMatch(privateArgs, privateArgsShape, 'privateArgs');
427
+ await null;
428
+ if (!zcfBaggage.has('repairedContractCompletionWatcher')) {
429
+ await E(zoeInstanceAdmin).repairContractCompletionWatcher();
430
+ console.log(`Repaired contract completion watcher`);
431
+ zcfBaggage.init('repairedContractCompletionWatcher', true);
428
432
  }
429
433
 
430
434
  // restart an upgradeable contract
@@ -85,6 +85,7 @@ type ZoeInstanceAdmin = {
85
85
  setOfferFilter: (strings: Array<string>) => void;
86
86
  getOfferFilter: () => Array<string>;
87
87
  getExitSubscriber: (seatHandle: SeatHandle) => Subscriber<AmountKeywordRecord>;
88
+ repairContractCompletionWatcher: () => void;
88
89
  };
89
90
  type RegisterFeeMint = (keyword: Keyword, allegedFeeMintAccess: FeeMintAccess) => ZoeMint<'nat'>;
90
91
  type WrapIssuerKitWithZoeMint = (keyword: Keyword, localIssuerKit: IssuerKit) => any;
@@ -1 +1 @@
1
- {"version":3,"file":"internal-types.d.ts","sourceRoot":"","sources":["internal-types.js"],"names":[],"mappings":";cAIc,cAAc;uBACd,UAAU;gBACV,UAAU;gBACV,MAAM;;;;;qCAOT,UAAU,KACR,qBAAqB;;mCAKR,UAAU,KAAK,qBAAqB;;;qCAKjC,YAAY,KAAK,IAAI;8BACrB,YAAY,KAAK,OAAO;;;cAKvC,QAAQ;kBACR,YAAY;;;;;+CAMf,UAAU,uBACV,mBAAmB,YACnB,cAAc,iBACd,aAAa,WACb,KAAK,OAAO,CAAC,gBACb,KAAK,OAAO,CAAC,yCAEX,eAAe;sCAKjB,UAAU,KACR,IAAI;;oCAKU,UAAU,KAAK,IAAI;UAChC,gBAAgB;;;;;UAChB,mBAAmB;uBAEnB,MAAM,WAAW,mBAAmB,CAAC;;;wBASrC,QAAQ,OAAO,CAAC;aAChB,OAAO;;;;;;;;2BASP,MAAM,IAAI;qCACS,gBAAgB,qBACvB,UAAU,YACnB,cAAc,cACZ,MAAM,KACjB,QAAQ;sBACF,gBAAgB;iBAChB,MAAM,QAAQ;oBACd,MAAM,MAAM;gBACZ,MAAM,mBAAmB;eACzB,MAAM,kBAAkB;cACxB,MAAM,MAAM;oBACZ,MAAM,MAAM,EAAE;qBACd,MAAM,YAAY;+BACL,UAAU,KAAK,IAAI;kBAChC,mBAAmB;yBACnB,MAAM,IAAI;wBACD,MAAM,KAAK,OAAO;uCACV,cAAc,eAAe,OAAO,KAAK,IAAI;8BACpD,MAAM,EAAE,KAAK,IAAI;;;;;;;;oCASR,gBAAgB,YACxB,QAAQ,KACd,iBAAiB;;yDAKzB,gBAAgB,eAChB,MAAM,mEAEN,OAAO,KACL,UAAU;;oBAKT,8BAA8B;0BACpB,KAAK,MAAM,CAAC,WACZ,OAAO,KACZ,QAAQ,YAAY,CAAC;iBAC1B,WAAW;qBACX,eAAe;sBACf,gBAAgB;wBAChB,kBAAkB;+BACL,UAAU,KAAK,IAAI;kBAChC,mBAAmB;2BACN,UAAU,cAAc,UAAU,KAAK,IAAI;2BAC3C,UAAU,UAAU,KAAK,KAAK,IAAI;yBAC/C,MAAM,IAAI;8BACA,MAAM,MAAM,CAAC,KAAK,IAAI;oBAChC,MAAM,MAAM,MAAM,CAAC;oCACN,UAAU,KAAK,WAAW,mBAAmB,CAAC;;iCAK9D,OAAO,wBACP,aAAa,KAEX,QAAQ,KAAK,CAAC;0CAKhB,OAAO,kBACP,SAAS;6BAMT,OAAO;;mBAIL,OAAO;4CAKT,UAAU,YACV,cAAc,WACd,OAAO,cACP,UAAU,KACR,QAAQ;kDAKV,oBAAoB,EAAE;;gBAKnB,UAAU;gBACV,UAAU;;;qBAMV,MAAM,aAAa,CAAC,CAAC;iCACP,OAAO,CAAC,CAAC,KAAK,IAAI;;;;;;;mCAClB,OAAO,CAAC,CAAC,KAAK,IAAI;;;cAShC,QAAQ;qBACR,eAAe;;;kBAKf,MAAM;uBACN,QAAQ,UAAU,CAAC;iBACnB,MAAM;oBACN,cAAc;;mCAKjB,KAAK,gBAAgB,CAAC,yBACtB,cAAc,qDAEd,MAAM,KACJ,QAAQ,qBAAqB,CAAC;sCAKhC,MAAM,KACJ,yCAAyC;8BAK3C,cAAc,gBACd,OAAO,KACL,OAAO;;UAKN,MAAM,IAAI;;kBAIX,OAAO,MAAM,CAAC;;;;;;mCAShB,KAAK,KACH,SAAS;qBAIT,MAAM,YAAY,CAAC;8BAKrB,QAAQ,KACN,OAAO;;;;;+BAQP,IAAI;;iBAKH,WAAW;gBACX,UAAU;uBACV,iBAAiB;;;0BAKP,OAAO,iBAAiB,UAAU,KAAK,IAAI;;;;;;4CASxD,KAAK,gBAAgB,CAAC,uBACtB,mBAAmB,uBACnB,mBAAmB,4CAEjB;IAAE,WAAW,EAAE,cAAc,CAAC;IAAC,kBAAkB,EAAE,kBAAkB,CAAA;CAAE;;;;;wCASzE,OAAO,gBACP,YAAY,KACV,IAAI;mCAKJ,QAAQ;0CAKR,YAAY;sCAKZ,mBAAmB;qCAKnB,kBAAkB;;eAKjB,sBAAsB;uBACtB,iBAAiB;cACjB,qBAAqB;qBACrB,4BAA4B;gBAC5B,wBAAwB;eACxB,uBAAuB;mCACb,OAAO,KAAK,IAAI;;+BAK3B,cAAc;+CAKhB,MAAM,EAAE"}
1
+ {"version":3,"file":"internal-types.d.ts","sourceRoot":"","sources":["internal-types.js"],"names":[],"mappings":";cAIc,cAAc;uBACd,UAAU;gBACV,UAAU;gBACV,MAAM;;;;;qCAOT,UAAU,KACR,qBAAqB;;mCAKR,UAAU,KAAK,qBAAqB;;;qCAKjC,YAAY,KAAK,IAAI;8BACrB,YAAY,KAAK,OAAO;;;cAKvC,QAAQ;kBACR,YAAY;;;;;+CAMf,UAAU,uBACV,mBAAmB,YACnB,cAAc,iBACd,aAAa,WACb,KAAK,OAAO,CAAC,gBACb,KAAK,OAAO,CAAC,yCAEX,eAAe;sCAKjB,UAAU,KACR,IAAI;;oCAKU,UAAU,KAAK,IAAI;UAChC,gBAAgB;;;;;UAChB,mBAAmB;uBAEnB,MAAM,WAAW,mBAAmB,CAAC;;;wBASrC,QAAQ,OAAO,CAAC;aAChB,OAAO;;;;;;;;2BASP,MAAM,IAAI;qCACS,gBAAgB,qBACvB,UAAU,YACnB,cAAc,cACZ,MAAM,KACjB,QAAQ;sBACF,gBAAgB;iBAChB,MAAM,QAAQ;oBACd,MAAM,MAAM;gBACZ,MAAM,mBAAmB;eACzB,MAAM,kBAAkB;cACxB,MAAM,MAAM;oBACZ,MAAM,MAAM,EAAE;qBACd,MAAM,YAAY;+BACL,UAAU,KAAK,IAAI;kBAChC,mBAAmB;yBACnB,MAAM,IAAI;wBACD,MAAM,KAAK,OAAO;uCACV,cAAc,eAAe,OAAO,KAAK,IAAI;8BACpD,MAAM,EAAE,KAAK,IAAI;;;;;;;;oCASR,gBAAgB,YACxB,QAAQ,KACd,iBAAiB;;yDAKzB,gBAAgB,eAChB,MAAM,mEAEN,OAAO,KACL,UAAU;;oBAKT,8BAA8B;0BACpB,KAAK,MAAM,CAAC,WACZ,OAAO,KACZ,QAAQ,YAAY,CAAC;iBAC1B,WAAW;qBACX,eAAe;sBACf,gBAAgB;wBAChB,kBAAkB;+BACL,UAAU,KAAK,IAAI;kBAChC,mBAAmB;2BACN,UAAU,cAAc,UAAU,KAAK,IAAI;2BAC3C,UAAU,UAAU,KAAK,KAAK,IAAI;yBAC/C,MAAM,IAAI;8BACA,MAAM,MAAM,CAAC,KAAK,IAAI;oBAChC,MAAM,MAAM,MAAM,CAAC;oCACN,UAAU,KAAK,WAAW,mBAAmB,CAAC;qCAC3D,MAAM,IAAI;;iCAKb,OAAO,wBACP,aAAa,KAEX,QAAQ,KAAK,CAAC;0CAKhB,OAAO,kBACP,SAAS;6BAMT,OAAO;;mBAIL,OAAO;4CAKT,UAAU,YACV,cAAc,WACd,OAAO,cACP,UAAU,KACR,QAAQ;kDAKV,oBAAoB,EAAE;;gBAKnB,UAAU;gBACV,UAAU;;;qBAMV,MAAM,aAAa,CAAC,CAAC;iCACP,OAAO,CAAC,CAAC,KAAK,IAAI;;;;;;;mCAClB,OAAO,CAAC,CAAC,KAAK,IAAI;;;cAShC,QAAQ;qBACR,eAAe;;;kBAKf,MAAM;uBACN,QAAQ,UAAU,CAAC;iBACnB,MAAM;oBACN,cAAc;;mCAKjB,KAAK,gBAAgB,CAAC,yBACtB,cAAc,qDAEd,MAAM,KACJ,QAAQ,qBAAqB,CAAC;sCAKhC,MAAM,KACJ,yCAAyC;8BAK3C,cAAc,gBACd,OAAO,KACL,OAAO;;UAKN,MAAM,IAAI;;kBAIX,OAAO,MAAM,CAAC;;;;;;mCAShB,KAAK,KACH,SAAS;qBAIT,MAAM,YAAY,CAAC;8BAKrB,QAAQ,KACN,OAAO;;;;;+BAQP,IAAI;;iBAKH,WAAW;gBACX,UAAU;uBACV,iBAAiB;;;0BAKP,OAAO,iBAAiB,UAAU,KAAK,IAAI;;;;;;4CASxD,KAAK,gBAAgB,CAAC,uBACtB,mBAAmB,uBACnB,mBAAmB,4CAEjB;IAAE,WAAW,EAAE,cAAc,CAAC;IAAC,kBAAkB,EAAE,kBAAkB,CAAA;CAAE;;;;;wCASzE,OAAO,gBACP,YAAY,KACV,IAAI;mCAKJ,QAAQ;0CAKR,YAAY;sCAKZ,mBAAmB;qCAKnB,kBAAkB;;eAKjB,sBAAsB;uBACtB,iBAAiB;cACjB,qBAAqB;qBACrB,4BAA4B;gBAC5B,wBAAwB;eACxB,uBAAuB;mCACb,OAAO,KAAK,IAAI;;+BAK3B,cAAc;+CAKhB,MAAM,EAAE"}
@@ -137,6 +137,7 @@
137
137
  * @property {(strings: Array<string>) => void} setOfferFilter
138
138
  * @property {() => Array<string>} getOfferFilter
139
139
  * @property {(seatHandle: SeatHandle) => Subscriber<AmountKeywordRecord>} getExitSubscriber
140
+ * @property {() => void} repairContractCompletionWatcher
140
141
  */
141
142
 
142
143
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"typeGuards.d.ts","sourceRoot":"","sources":["typeGuards.js"],"names":[],"mappings":"AAgBA,4DAAuC;AAEvC,qEAAqE;AACrE,+DAAyD;AACzD,mEAAiE;AACjE,iEAA6D;AAC7D,yDAA6C;AAE7C,wEAA8E;AAC9E,+EAGE;AACF,0EAGE;AACF,wEAA8E;AAC9E,yEAGE;AACF,uEAA4E;AAE5E,iEAOE;;;;;;;;;;AAaF,8DAAiD;AAE1C,6EAA4D;AACnE,0DAAmD;;;;;;AA0BnD,2BAA2B;AAC3B,6DAAsE;AAE/D,uDAGN;AAMM,uCAHI,QAAQ,0BAMlB;AAMM,8CAHI,QAAQ,iCAMlB;AAED,sEAKG;AAEH,oEAEG;AAEH,0EAKE;AAEF,4DAAmD;AACnD,+DAIG;AAEH,+DASG;AAEH,kEAA+D;AAE/D,kEAEG;AAEH,+DAAsD;AACtD,kEAA+D;AAC/D,qEAiCG;;;;;;AAiDH,8DAAuD;AACvD,2DAGE;AAEF,0EAUE;;;;;;;AA2DF,kEA6CG;AAEH,kEAIG;AAEH,6DASE;AAEF,mEAKG"}
1
+ {"version":3,"file":"typeGuards.d.ts","sourceRoot":"","sources":["typeGuards.js"],"names":[],"mappings":"AAgBA,4DAAuC;AAEvC,qEAAqE;AACrE,+DAAyD;AACzD,mEAAiE;AACjE,iEAA6D;AAC7D,yDAA6C;AAE7C,wEAA8E;AAC9E,+EAGE;AACF,0EAGE;AACF,wEAA8E;AAC9E,yEAGE;AACF,uEAA4E;AAE5E,iEAOE;;;;;;;;;;AAaF,8DAAiD;AAE1C,6EAA4D;AACnE,0DAAmD;;;;;;AA0BnD,2BAA2B;AAC3B,6DAAsE;AAE/D,uDAGN;AAMM,uCAHI,QAAQ,0BAMlB;AAMM,8CAHI,QAAQ,iCAMlB;AAED,sEAKG;AAEH,oEAEG;AAEH,0EAKE;AAEF,4DAAmD;AACnD,+DAIG;AAEH,+DASG;AAEH,kEAA+D;AAE/D,kEAEG;AAEH,+DAAsD;AACtD,kEAA+D;AAC/D,qEAkCG;;;;;;AAiDH,8DAAuD;AACvD,2DAGE;AAEF,0EAUE;;;;;;;AA2DF,kEA6CG;AAEH,kEAIG;AAEH,6DASE;AAEF,mEAKG"}
package/src/typeGuards.js CHANGED
@@ -190,6 +190,7 @@ export const InstanceAdminI = M.interface('InstanceAdmin', {
190
190
  getOfferFilter: M.call().returns(M.arrayOf(M.string())),
191
191
  getExitSubscriber: M.call(SeatShape).returns(SubscriberShape),
192
192
  isBlocked: M.call(M.string()).returns(M.boolean()),
193
+ repairContractCompletionWatcher: M.call().returns(),
193
194
  });
194
195
 
195
196
  export const InstanceStorageManagerIKit = harden({
@@ -1 +1 @@
1
- {"version":3,"file":"startInstance.d.ts","sourceRoot":"","sources":["startInstance.js"],"names":[],"mappings":"AA0BO,uDANI,KAAK,iBAAiB,EAAE,+BAA+B,GAAG,oBAAoB,CAAC,oBAC/E,MAAM,KAAK,SAAS,CAAC,4BAChB,MAAM,KAAK,SAAS,0CAEvB,OAAO,SAAS,EAAE,aAAa,CAmU3C;sBA7Ua,OAAO,kBAAkB,EAAE,OAAO;wBACjC,OAAO,sBAAsB,EAAE,SAAS"}
1
+ {"version":3,"file":"startInstance.d.ts","sourceRoot":"","sources":["startInstance.js"],"names":[],"mappings":"AAiCO,uDANI,KAAK,iBAAiB,EAAE,+BAA+B,GAAG,oBAAoB,CAAC,oBAC/E,MAAM,KAAK,SAAS,CAAC,4BAChB,MAAM,KAAK,SAAS,0CAEvB,OAAO,SAAS,EAAE,aAAa,CAqW3C;sBA/Wa,OAAO,kBAAkB,EAAE,OAAO;wBACjC,OAAO,sBAAsB,EAAE,SAAS"}
@@ -5,12 +5,19 @@ import {
5
5
  makeScalarBigMapStore,
6
6
  provideDurableWeakMapStore,
7
7
  prepareExoClass,
8
+ prepareExo,
9
+ watchPromise,
8
10
  } from '@agoric/vat-data';
9
11
  import { initEmpty } from '@agoric/store';
12
+ import { isUpgradeDisconnection } from '@agoric/internal/src/upgrade-api.js';
10
13
 
11
14
  import { defineDurableHandle } from '../makeHandle.js';
12
15
  import { makeInstanceAdminMaker } from './instanceAdminStorage.js';
13
- import { AdminFacetI, InstanceAdminI } from '../typeGuards.js';
16
+ import {
17
+ AdminFacetI,
18
+ InstanceAdminI,
19
+ InstanceAdminShape,
20
+ } from '../typeGuards.js';
14
21
 
15
22
  /** @typedef {import('@agoric/vat-data').Baggage} Baggage */
16
23
  /** @typedef { import('@agoric/swingset-vat').BundleCap} BundleCap */
@@ -46,10 +53,46 @@ export const makeStartInstance = (
46
53
  const InstanceAdminStateShape = harden({
47
54
  instanceStorage: M.remotable('ZoeInstanceStorageManager'),
48
55
  instanceAdmin: M.remotable('InstanceAdmin'),
49
- seatHandleToSeatAdmin: M.remotable(),
56
+ seatHandleToSeatAdmin: M.remotable(), // seatHandleToSeatAdmin, but putting that string here is backwards-incompatible
50
57
  adminNode: M.remotable('adminNode'),
51
58
  });
52
59
 
60
+ /** @type {{ onFulfilled: (completion: any, instanceAdmin: InstanceAdmin) => void, onRejected: (reason: any, instanceAdmin: InstanceAdmin, adminNode: any) => void }} */
61
+ const watcher = prepareExo(
62
+ zoeBaggage,
63
+ 'InstanceCompletionWatcher',
64
+ M.interface('InstanceCompletionWatcher', {
65
+ onFulfilled: M.call(
66
+ M.any(),
67
+ InstanceAdminShape,
68
+ M.remotable('adminNode'),
69
+ ).returns(),
70
+ onRejected: M.call(
71
+ M.any(),
72
+ InstanceAdminShape,
73
+ M.remotable('adminNode'),
74
+ ).returns(),
75
+ }),
76
+ {
77
+ onFulfilled: (completion, instanceAdmin) =>
78
+ instanceAdmin.exitAllSeats(completion),
79
+ onRejected: (/** @type {Error} */ reason, instanceAdmin, adminNode) => {
80
+ if (isUpgradeDisconnection(reason)) {
81
+ console.log(`resetting promise watcher after upgrade`, reason);
82
+ // eslint-disable-next-line no-use-before-define
83
+ watchForAdminNodeDone(adminNode, instanceAdmin);
84
+ } else {
85
+ instanceAdmin.failAllSeats(reason);
86
+ }
87
+ },
88
+ },
89
+ );
90
+
91
+ const watchForAdminNodeDone = (adminNode, instAdmin) => {
92
+ // @ts-expect-error XXX unknown type?
93
+ watchPromise(E(adminNode).done(), watcher, instAdmin, adminNode);
94
+ };
95
+
53
96
  const makeZoeInstanceAdmin = prepareExoClass(
54
97
  zoeBaggage,
55
98
  'zoeInstanceAdmin',
@@ -124,10 +167,10 @@ export const makeStartInstance = (
124
167
  replaceAllocations(seatHandleAllocations) {
125
168
  const { state } = this;
126
169
  try {
127
- seatHandleAllocations.forEach(({ seatHandle, allocation }) => {
170
+ for (const { seatHandle, allocation } of seatHandleAllocations) {
128
171
  const zoeSeatAdmin = state.seatHandleToSeatAdmin.get(seatHandle);
129
172
  zoeSeatAdmin.replaceAllocation(allocation);
130
- });
173
+ }
131
174
  } catch (err) {
132
175
  // nothing for Zoe to do if the termination fails
133
176
  void E(state.adminNode).terminateWithFailure(err);
@@ -154,6 +197,10 @@ export const makeStartInstance = (
154
197
  const { state } = this;
155
198
  return state.instanceAdmin.isBlocked(string);
156
199
  },
200
+ repairContractCompletionWatcher() {
201
+ const { state, self } = this;
202
+ void watchForAdminNodeDone(state.adminNode, self);
203
+ },
157
204
  },
158
205
  {
159
206
  stateShape: InstanceAdminStateShape,
@@ -274,13 +321,7 @@ export const makeStartInstance = (
274
321
  );
275
322
  zoeInstanceStorageManager.initInstanceAdmin(instanceHandle, instanceAdmin);
276
323
 
277
- E.when(
278
- E(adminNode).done(),
279
- completion => {
280
- instanceAdmin.exitAllSeats(completion);
281
- },
282
- reason => instanceAdmin.failAllSeats(reason),
283
- );
324
+ void watchForAdminNodeDone(adminNode, instanceAdmin);
284
325
 
285
326
  /** @type {ZoeInstanceAdmin} */
286
327
  const zoeInstanceAdminForZcf = makeZoeInstanceAdmin(