@agoric/vats 0.15.2-dev-02c06c4.0 → 0.15.2-dev-fd68b6a.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/vats",
3
- "version": "0.15.2-dev-02c06c4.0+02c06c4",
3
+ "version": "0.15.2-dev-fd68b6a.0+fd68b6a",
4
4
  "description": "Agoric's Vat library",
5
5
  "type": "module",
6
6
  "main": "./index.js",
@@ -22,19 +22,19 @@
22
22
  "author": "Agoric",
23
23
  "license": "Apache-2.0",
24
24
  "dependencies": {
25
- "@agoric/cosmic-proto": "0.4.1-dev-02c06c4.0+02c06c4",
26
- "@agoric/ertp": "0.16.3-dev-02c06c4.0+02c06c4",
27
- "@agoric/governance": "0.10.4-dev-02c06c4.0+02c06c4",
28
- "@agoric/internal": "0.3.3-dev-02c06c4.0+02c06c4",
29
- "@agoric/network": "0.1.1-dev-02c06c4.0+02c06c4",
30
- "@agoric/notifier": "0.6.3-dev-02c06c4.0+02c06c4",
31
- "@agoric/store": "0.9.3-dev-02c06c4.0+02c06c4",
32
- "@agoric/swingset-vat": "0.32.3-dev-02c06c4.0+02c06c4",
33
- "@agoric/time": "0.3.3-dev-02c06c4.0+02c06c4",
34
- "@agoric/vat-data": "0.5.3-dev-02c06c4.0+02c06c4",
35
- "@agoric/vow": "0.1.1-dev-02c06c4.0+02c06c4",
36
- "@agoric/zoe": "0.26.3-dev-02c06c4.0+02c06c4",
37
- "@agoric/zone": "0.2.3-dev-02c06c4.0+02c06c4",
25
+ "@agoric/cosmic-proto": "0.4.1-dev-fd68b6a.0+fd68b6a",
26
+ "@agoric/ertp": "0.16.3-dev-fd68b6a.0+fd68b6a",
27
+ "@agoric/governance": "0.10.4-dev-fd68b6a.0+fd68b6a",
28
+ "@agoric/internal": "0.3.3-dev-fd68b6a.0+fd68b6a",
29
+ "@agoric/network": "0.1.1-dev-fd68b6a.0+fd68b6a",
30
+ "@agoric/notifier": "0.6.3-dev-fd68b6a.0+fd68b6a",
31
+ "@agoric/store": "0.9.3-dev-fd68b6a.0+fd68b6a",
32
+ "@agoric/swingset-vat": "0.32.3-dev-fd68b6a.0+fd68b6a",
33
+ "@agoric/time": "0.3.3-dev-fd68b6a.0+fd68b6a",
34
+ "@agoric/vat-data": "0.5.3-dev-fd68b6a.0+fd68b6a",
35
+ "@agoric/vow": "0.1.1-dev-fd68b6a.0+fd68b6a",
36
+ "@agoric/zoe": "0.26.3-dev-fd68b6a.0+fd68b6a",
37
+ "@agoric/zone": "0.2.3-dev-fd68b6a.0+fd68b6a",
38
38
  "@endo/errors": "^1.2.7",
39
39
  "@endo/far": "^1.1.8",
40
40
  "@endo/import-bundle": "^1.3.1",
@@ -47,7 +47,7 @@
47
47
  "jessie.js": "^0.3.4"
48
48
  },
49
49
  "devDependencies": {
50
- "@agoric/swingset-liveslots": "0.10.3-dev-02c06c4.0+02c06c4",
50
+ "@agoric/swingset-liveslots": "0.10.3-dev-fd68b6a.0+fd68b6a",
51
51
  "@endo/bundle-source": "^3.4.2",
52
52
  "@endo/init": "^1.1.6",
53
53
  "ava": "^5.3.0",
@@ -79,5 +79,5 @@
79
79
  "typeCoverage": {
80
80
  "atLeast": 91.52
81
81
  },
82
- "gitHead": "02c06c489677233c0daa112284d16c314aff97c6"
82
+ "gitHead": "fd68b6ac1620d3ac9b6e98eeee7a507c3ccb3d79"
83
83
  }
@@ -0,0 +1,3 @@
1
+ #! /usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=build-bundles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-bundles.d.ts","sourceRoot":"","sources":["build-bundles.js"],"names":[],"mappings":""}
@@ -26,7 +26,7 @@ export function installBootContracts({ consume: { vatAdminSvc, zoe }, installati
26
26
  export function mintInitialSupply({ vatParameters: { argv: { bootMsg }, }, consume: { feeMintAccess: feeMintAccessP, zoe }, produce: { initialSupply }, installation: { consume: { centralSupply }, }, }: BootstrapPowers & {
27
27
  vatParameters: {
28
28
  argv: {
29
- bootMsg?: typeof bootMsgEx;
29
+ bootMsg?: import("@agoric/internal/src/chain-utils.js").InitMsg;
30
30
  };
31
31
  };
32
32
  }): Promise<void>;
@@ -34,18 +34,5 @@ export function addBankAssets({ consume: { agoricNamesAdmin, initialSupply, brid
34
34
  /** @type {import('./lib-boot.js').BootstrapManifest} */
35
35
  export const BASIC_BOOTSTRAP_PERMITS: import("./lib-boot.js").BootstrapManifest;
36
36
  export type VatStore = MapStore<string, CreateVatResults>;
37
- declare namespace bootMsgEx {
38
- let type: string;
39
- let chainID: string;
40
- let storagePort: number;
41
- let supplyCoins: {
42
- denom: string;
43
- amount: string;
44
- }[];
45
- let swingsetPort: number;
46
- let vbankPort: number;
47
- let vibcPort: number;
48
- }
49
37
  import type { CreateVatResults } from '@agoric/swingset-vat';
50
- export {};
51
38
  //# sourceMappingURL=basic-behaviors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"basic-behaviors.d.ts","sourceRoot":"","sources":["basic-behaviors.js"],"names":[],"mappings":"AA+DO,mIATI,eAAe,GAAG;IACxB,OAAO,EAAE;QACP,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC7B,eAAe,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;KACtC,CAAC;CACH,iBA4DH;AAIM,gDADK,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,iBAW/C;AAGM,0FADK,cAAc,GAAG;IAAE,IAAI,EAAE,OAAO,cAAc,EAAE,IAAI,CAAA;CAAE,iBAiCjE;AAqGM,uMAPI,cAAc,GAAG;IACvB,IAAI,EAAE,OAAO,cAAc,EAAE,IAAI,CAAC;IAClC,OAAO,EAAE;QACP,6BAA6B,EAAE,OAAO,wDAAwD,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC,+BAA+B,CAAC,CAAC;KACpK,CAAC;CACH,iBA6DH;AAMM,gOAFI,eAAe,iBAyBzB;AAMM,gGAFI,eAAe,iBAgBzB;AAQM,mHAFI,eAAe,GAAG,cAAc,iBAe1C;AAIM,gIADK,eAAe,GAAG,cAAc,iBAW3C;AAOM,qHAFI,eAAe,iBAWzB;AAcM,+JAFI,eAAe,iBAwBzB;AAQM,kGAFI,cAAc,iBA6BxB;AAIM,uHADK,cAAc,iBAkCzB;AAIM,oIADK,cAAc,iBAiBzB;AASM,0MAJI,eAAe,GAAG;IACxB,aAAa,EAAE;QAAE,IAAI,EAAE;YAAE,OAAO,CAAC,EAAE,OAAO,SAAS,CAAA;SAAE,CAAA;KAAE,CAAC;CACzD,iBAmCH;AAQM,kTAFI,cAAc,iBAsFxB;AAGD,wDAAwD;AACxD,sCADW,OAAO,eAAe,EAAE,iBAAiB,CA0IlD;uBA5wBY,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;;;;;;;;;;;;;sCASb,sBAAsB"}
1
+ {"version":3,"file":"basic-behaviors.d.ts","sourceRoot":"","sources":["basic-behaviors.js"],"names":[],"mappings":"AAwCO,mIATI,eAAe,GAAG;IACxB,OAAO,EAAE;QACP,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC7B,eAAe,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;KACtC,CAAC;CACH,iBA4DH;AAIM,gDADK,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,iBAW/C;AAGM,0FADK,cAAc,GAAG;IAAE,IAAI,EAAE,OAAO,cAAc,EAAE,IAAI,CAAA;CAAE,iBAiCjE;AAqGM,uMAPI,cAAc,GAAG;IACvB,IAAI,EAAE,OAAO,cAAc,EAAE,IAAI,CAAC;IAClC,OAAO,EAAE;QACP,6BAA6B,EAAE,OAAO,wDAAwD,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC,+BAA+B,CAAC,CAAC;KACpK,CAAC;CACH,iBA6DH;AAMM,gOAFI,eAAe,iBAyBzB;AAMM,gGAFI,eAAe,iBAgBzB;AAQM,mHAFI,eAAe,GAAG,cAAc,iBAe1C;AAIM,gIADK,eAAe,GAAG,cAAc,iBAW3C;AAOM,qHAFI,eAAe,iBAWzB;AAcM,+JAFI,eAAe,iBAwBzB;AAQM,kGAFI,cAAc,iBA6BxB;AAIM,uHADK,cAAc,iBAkCzB;AAIM,oIADK,cAAc,iBAiBzB;AAaM,0MARI,eAAe,GAAG;IACxB,aAAa,EAAE;QACb,IAAI,EAAE;YACJ,OAAO,CAAC,EAAE,OAAO,qCAAqC,EAAE,OAAO,CAAC;SACjE,CAAC;KACH,CAAC;CACH,iBAmCH;AAQM,kTAFI,cAAc,iBAsFxB;AAGD,wDAAwD;AACxD,sCADW,OAAO,eAAe,EAAE,iBAAiB,CA0IlD;uBAhxBY,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;sCASb,sBAAsB"}
@@ -21,29 +21,6 @@ import { makeScopedBridge } from '../bridge.js';
21
21
 
22
22
  /** @import {GovernableStartFn, GovernanceFacetKit} from '@agoric/governance/src/types.js'; */
23
23
 
24
- /**
25
- * In golang/cosmos/app/app.go, we define cosmosInitAction with type
26
- * AG_COSMOS_INIT, with the following shape.
27
- *
28
- * The uist supplyCoins value is taken from genesis, thereby authorizing the
29
- * minting an initial supply of RUN.
30
- */
31
- // eslint-disable-next-line no-unused-vars
32
- const bootMsgEx = {
33
- type: 'AG_COSMOS_INIT',
34
- chainID: 'agoric',
35
- storagePort: 1,
36
- supplyCoins: [
37
- { denom: 'provisionpass', amount: '100' },
38
- { denom: 'sendpacketpass', amount: '100' },
39
- { denom: 'ubld', amount: '1000000000000000' },
40
- { denom: 'uist', amount: '50000000000' },
41
- ],
42
- swingsetPort: 4,
43
- vbankPort: 3,
44
- vibcPort: 2,
45
- };
46
-
47
24
  /**
48
25
  * TODO: review behaviors carefully for powers that go out of scope, since we
49
26
  * may want/need them later.
@@ -560,7 +537,11 @@ export const installBootContracts = async ({
560
537
  * Mint IST genesis supply.
561
538
  *
562
539
  * @param {BootstrapPowers & {
563
- * vatParameters: { argv: { bootMsg?: typeof bootMsgEx } };
540
+ * vatParameters: {
541
+ * argv: {
542
+ * bootMsg?: import('@agoric/internal/src/chain-utils.js').InitMsg;
543
+ * };
544
+ * };
564
545
  * }} powers
565
546
  */
566
547
  export const mintInitialSupply = async ({
@@ -48,18 +48,7 @@ export namespace modules {
48
48
  mintInitialSupply: ({ vatParameters: { argv: { bootMsg }, }, consume: { feeMintAccess: feeMintAccessP, zoe }, produce: { initialSupply }, installation: { consume: { centralSupply }, }, }: BootstrapPowers & {
49
49
  vatParameters: {
50
50
  argv: {
51
- bootMsg?: {
52
- type: string;
53
- chainID: string;
54
- storagePort: number;
55
- supplyCoins: {
56
- denom: string;
57
- amount: string;
58
- }[];
59
- swingsetPort: number;
60
- vbankPort: number;
61
- vibcPort: number;
62
- };
51
+ bootMsg?: import("@agoric/internal/src/chain-utils.js").InitMsg;
63
52
  };
64
53
  };
65
54
  }) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"boot-chain.d.ts","sourceRoot":"","sources":["boot-chain.js"],"names":[],"mappings":";;;;;;;oBAkDwvK,CAAC;;;;;;;;mBAA07N,CAAC;kCAA6B,CAAC;4BAAqB,CAAC;;;;;;;;;;;;;yBAA3pS,mBAAc;;;yBAA0/G,mBAAc;;+CAA6D,OAAQ,wDAAwD,mCAAmC;;;;;;;;;;;;;;;2BAAguQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;qCAA17Z,GAAG;;;;;;;;;4DAAilG,aAAa;;;;uDAAkpB,aAAa;;;;;;;;gCAA2xC,aAAa;qCAAyC,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iGAA7kH,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA/BtkH,iDAAiD;AAEjD,iEAAiD;AAc1C,2CATI,SAAS,GAAG;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,CAAC,GAAG,KAAA,KAAK,IAAI,CAAC;CACvB,iBACO;IACN,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC,WACO,OAAO,kBAAkB,EAAE,OAAO;;;;;;;;;;;;;;GAc5C;+BA5Ba,OAAO,OAAO"}
1
+ {"version":3,"file":"boot-chain.d.ts","sourceRoot":"","sources":["boot-chain.js"],"names":[],"mappings":";;;;;;;oBAkDwvK,CAAC;;;;;;;;mBAA07N,CAAC;kCAA6B,CAAC;4BAAqB,CAAC;;;;;;;;;;;;;yBAAtxT,mBAAc;;;yBAA0/G,mBAAc;;+CAA6D,OAAQ,wDAAwD,mCAAmC;;;;;;;;;;;;;;;2BAAgvQ,CAAC,SAAS,qCAAqC;;;;;;;;;;;;;;;qCAA73Y,GAAG;;;;;;;;;4DAAilG,aAAa;;;;uDAAkpB,aAAa;;;;;;;;gCAA2xC,aAAa;qCAAyC,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iGAA7kH,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA/BtkH,iDAAiD;AAEjD,iEAAiD;AAc1C,2CATI,SAAS,GAAG;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,CAAC,GAAG,KAAA,KAAK,IAAI,CAAC;CACvB,iBACO;IACN,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC,WACO,OAAO,kBAAkB,EAAE,OAAO;;;;;;;;;;;;;;GAc5C;+BA5Ba,OAAO,OAAO"}
@@ -1,6 +1,6 @@
1
1
  export function makeBootstrap(vatPowers: import("@agoric/swingset-vat").VatPowers & {
2
2
  D: DProxy;
3
- logger: (msg: any) => void;
3
+ logger?: typeof console.log;
4
4
  }, vatParameters: Record<string, unknown>, bootManifest: BootstrapManifest, behaviors: Record<string, BootBehavior>, modules: BootModules, zone?: import("@agoric/base-zone").Zone | undefined): {
5
5
  /**
6
6
  * Bootstrap vats and devices.
@@ -1 +1 @@
1
- {"version":3,"file":"lib-boot.d.ts","sourceRoot":"","sources":["lib-boot.js"],"names":[],"mappings":"AAyDO,yCAVI,OAAO,sBAAsB,EAAE,SAAS,GAAG;IACjD,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,CAAC,GAAG,KAAA,KAAK,IAAI,CAAC;CACvB,iBACO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,gBACvB,iBAAiB,aACjB,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,WAC5B,WAAW;IAoHlB;;;;;OAKG;sBAFQ,YAAY,WACZ,WAAW,GAAG,YAAY;IAerC,6BAA6B;wBAAjB,MAAM;;IASlB,6BAA6B;sBAAjB,MAAM;;IAclB;;;OAGG;oBAFU,CAAC,EAAE,CAAC,SACN,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;;IA5CzB;;;;;OAKG;sBAFQ,YAAY,WACZ,WAAW,GAAG,YAAY;IAerC,6BAA6B;wBAAjB,MAAM;;IASlB,6BAA6B;sBAAjB,MAAM;;IAclB;;;OAGG;oBAFU,CAAC,EAAE,CAAC,SACN,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;GAK5B;sCAhNY,IAAI,GACV,MAAM,GACN;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,uBAAuB,GAAG,SAAS,CAAA;CAAE;;;;;;;;;;;;;;gCAgBhD,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC;2BAIvC,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC;8BAE5C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;0BAEvB;IAAE,KAAK,EAAE,cAAc,YAAY,CAAC,CAAA;CAAE,GAAG,MAAM,CAC3D,MAAU,EACN,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACpB;kCAoLU,OAAO,CAAC,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC"}
1
+ {"version":3,"file":"lib-boot.d.ts","sourceRoot":"","sources":["lib-boot.js"],"names":[],"mappings":"AAyDO,yCAVI,OAAO,sBAAsB,EAAE,SAAS,GAAG;IACjD,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,CAAC,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC;CAC7B,iBACO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,gBACvB,iBAAiB,aACjB,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,WAC5B,WAAW;IAoHlB;;;;;OAKG;sBAFQ,YAAY,WACZ,WAAW,GAAG,YAAY;IAerC,6BAA6B;wBAAjB,MAAM;;IASlB,6BAA6B;sBAAjB,MAAM;;IAclB;;;OAGG;oBAFU,CAAC,EAAE,CAAC,SACN,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;;IA5CzB;;;;;OAKG;sBAFQ,YAAY,WACZ,WAAW,GAAG,YAAY;IAerC,6BAA6B;wBAAjB,MAAM;;IASlB,6BAA6B;sBAAjB,MAAM;;IAclB;;;OAGG;oBAFU,CAAC,EAAE,CAAC,SACN,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;GAK5B;sCAhNY,IAAI,GACV,MAAM,GACN;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,uBAAuB,GAAG,SAAS,CAAA;CAAE;;;;;;;;;;;;;;gCAgBhD,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC;2BAIvC,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC;8BAE5C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;0BAEvB;IAAE,KAAK,EAAE,cAAc,YAAY,CAAC,CAAA;CAAE,GAAG,MAAM,CAC3D,MAAU,EACN,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CACpB;kCAoLU,OAAO,CAAC,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC"}
@@ -47,7 +47,7 @@ const setDiff = (a, b) => a.filter(x => !b.includes(x));
47
47
  /**
48
48
  * @param {import('@agoric/swingset-vat').VatPowers & {
49
49
  * D: DProxy;
50
- * logger: (msg) => void;
50
+ * logger?: typeof console.log;
51
51
  * }} vatPowers
52
52
  * @param {Record<string, unknown>} vatParameters
53
53
  * @param {BootstrapManifest} bootManifest
@@ -0,0 +1,194 @@
1
+ /**
2
+ * @file Source code for a bootstrap vat that runs blockchain behaviors (such as
3
+ * bridge vat integration) and exposes reflective methods for use in testing.
4
+ *
5
+ * TODO: Share code with packages/SwingSet/tools/bootstrap-relay.js
6
+ */
7
+
8
+ import { Fail, q } from '@endo/errors';
9
+ import { Far, E } from '@endo/far';
10
+ import { makePromiseKit } from '@endo/promise-kit';
11
+ import { buildManualTimer } from '@agoric/swingset-vat/tools/manual-timer.js';
12
+ import { makeReflectionMethods } from '@agoric/swingset-vat/tools/vat-puppet.js';
13
+ import { makeDurableZone } from '@agoric/zone/durable.js';
14
+ import { makeBootstrap } from '../src/core/lib-boot.js';
15
+ import * as basicBehaviorsNamespace from '../src/core/basic-behaviors.js';
16
+ import * as chainBehaviorsNamespace from '../src/core/chain-behaviors.js';
17
+ import * as utils from '../src/core/utils.js';
18
+
19
+ // Gather up all defined bootstrap behaviors.
20
+ const { BASIC_BOOTSTRAP_PERMITS: BASIC_BOOTSTRAP, ...basicBehaviors } =
21
+ basicBehaviorsNamespace;
22
+ const {
23
+ CHAIN_BOOTSTRAP_MANIFEST: CHAIN_BOOTSTRAP,
24
+ SHARED_CHAIN_BOOTSTRAP_MANIFEST: SHARED_CHAIN_BOOTSTRAP,
25
+ ...chainBehaviors
26
+ } = chainBehaviorsNamespace;
27
+ const manifests = { BASIC_BOOTSTRAP, CHAIN_BOOTSTRAP, SHARED_CHAIN_BOOTSTRAP };
28
+ const allBehaviors = { ...basicBehaviors, ...chainBehaviors };
29
+ export const modules = {
30
+ behaviors: { ...allBehaviors },
31
+ utils: { ...utils },
32
+ };
33
+
34
+ // Support constructing a new manifest as a subset from the union of all
35
+ // standard manifests.
36
+ const allPermits = Object.fromEntries(
37
+ Object.values(manifests)
38
+ .map(manifest => Object.entries(manifest))
39
+ .flat(),
40
+ );
41
+ const makeManifestForBehaviors = behaviors => {
42
+ const manifest = {};
43
+ for (const behavior of behaviors) {
44
+ const { name } = behavior;
45
+ Object.hasOwn(allPermits, name) || Fail`missing permit for ${name}`;
46
+ manifest[name] = allPermits[name];
47
+ }
48
+ return manifest;
49
+ };
50
+
51
+ // Define a minimal manifest of entries plucked from the above union.
52
+ manifests.MINIMAL = makeManifestForBehaviors([
53
+ allBehaviors.bridgeCoreEval,
54
+ allBehaviors.makeBridgeManager,
55
+ allBehaviors.makeVatsFromBundles,
56
+ allBehaviors.startTimerService,
57
+ allBehaviors.setupClientManager,
58
+ ]);
59
+
60
+ /**
61
+ * @param {VatPowers & { D: DProxy; testLog: typeof console.log }} vatPowers
62
+ * @param {{
63
+ * baseManifest?: string;
64
+ * addBehaviors?: string[];
65
+ * coreProposalCodeSteps?: string[];
66
+ * }} bootstrapParameters
67
+ * @param {import('@agoric/vat-data').Baggage} baggage
68
+ */
69
+ export const buildRootObject = (vatPowers, bootstrapParameters, baggage) => {
70
+ const manualTimer = buildManualTimer();
71
+ let vatAdmin;
72
+ const { promise: vatAdminP, resolve: captureVatAdmin } = makePromiseKit();
73
+ void vatAdminP.then(value => (vatAdmin = value)); // for better debugging
74
+ /** @typedef {{ root: object; incarnationNumber?: number }} VatRecord */
75
+ /**
76
+ * @typedef {VatRecord &
77
+ * import('@agoric/swingset-vat').CreateVatResults & {
78
+ * bundleCap: unknown;
79
+ * }} DynamicVatRecord
80
+ */
81
+ /** @type {Map<string, VatRecord | DynamicVatRecord>} */
82
+ const vatRecords = new Map();
83
+ const devicesByName = new Map();
84
+
85
+ const { baseManifest: manifestName = 'MINIMAL', addBehaviors = [] } =
86
+ bootstrapParameters;
87
+ Object.hasOwn(manifests, manifestName) ||
88
+ Fail`missing manifest ${manifestName}`;
89
+ const manifest = {
90
+ ...manifests[manifestName],
91
+ ...makeManifestForBehaviors(addBehaviors),
92
+ };
93
+
94
+ /**
95
+ * bootstrapBase provides CORE_EVAL support, and also exposes:
96
+ *
97
+ * - promise-space functions consumeItem(name), produceItem(name, resolution),
98
+ * resetItem(name)
99
+ * - awaitVatObject(presence: object, path?: PropertyKey[])
100
+ * - snapshotStore<K, V>(store: { entries: () => Iterable<[K, V]> }): Array<[K,
101
+ * V]>
102
+ */
103
+ const bootstrapBase = makeBootstrap(
104
+ { ...vatPowers, logger: vatPowers.testLog },
105
+ bootstrapParameters,
106
+ manifest,
107
+ allBehaviors,
108
+ modules,
109
+ makeDurableZone(baggage),
110
+ );
111
+
112
+ const reflectionMethods = makeReflectionMethods(vatPowers, baggage);
113
+
114
+ return Far('root', {
115
+ ...reflectionMethods,
116
+
117
+ ...bootstrapBase,
118
+ bootstrap: async (vats, devices) => {
119
+ await bootstrapBase.bootstrap(vats, devices);
120
+
121
+ // createVatAdminService is idempotent (despite the name).
122
+ captureVatAdmin(E(vats.vatAdmin).createVatAdminService(devices.vatAdmin));
123
+
124
+ // Capture references to static vats and devices.
125
+ for (const [name, root] of Object.entries(vats)) {
126
+ if (name !== 'vatAdmin') {
127
+ vatRecords.set(name, { root });
128
+ }
129
+ }
130
+ for (const [name, device] of Object.entries(devices)) {
131
+ devicesByName.set(name, device);
132
+ }
133
+ },
134
+
135
+ getDevice: deviceName => devicesByName.get(deviceName),
136
+
137
+ getManualTimer: () => manualTimer,
138
+
139
+ getVatAdmin: () => vatAdmin || vatAdminP,
140
+
141
+ getVatAdminNode: vatName => {
142
+ const vat =
143
+ vatRecords.get(vatName) || Fail`unknown vat name: ${q(vatName)}`;
144
+ const { adminNode } = /** @type {DynamicVatRecord} */ (vat);
145
+ return adminNode;
146
+ },
147
+
148
+ getVatRoot: vatName => {
149
+ const vat =
150
+ vatRecords.get(vatName) || Fail`unknown vat name: ${q(vatName)}`;
151
+ const { root } = vat;
152
+ return root;
153
+ },
154
+
155
+ /**
156
+ * @param {string} vatName
157
+ * @param {string} [bundleCapName]
158
+ * @param {{ vatParameters?: object } & Record<string, unknown>} [vatOptions]
159
+ * @returns {Promise<DynamicVatRecord['root']>} root object of the new vat
160
+ */
161
+ createVat: async (vatName, bundleCapName = vatName, vatOptions = {}) => {
162
+ const bundleCap = await E(vatAdminP).getNamedBundleCap(bundleCapName);
163
+ const { root, adminNode } = await E(vatAdminP).createVat(bundleCap, {
164
+ vatParameters: {},
165
+ ...vatOptions,
166
+ });
167
+ vatRecords.set(vatName, { root, adminNode, bundleCap });
168
+ return root;
169
+ },
170
+
171
+ /**
172
+ * @param {string} vatName
173
+ * @param {string} [bundleCapName]
174
+ * @param {{ vatParameters?: object } & Record<string, unknown>} [vatOptions]
175
+ * @returns {Promise<number>} the resulting incarnation number
176
+ */
177
+ upgradeVat: async (vatName, bundleCapName, vatOptions = {}) => {
178
+ const vatRecord = /** @type {DynamicVatRecord} */ (
179
+ vatRecords.get(vatName) || Fail`unknown vat name: ${q(vatName)}`
180
+ );
181
+ const bundleCap = await (bundleCapName
182
+ ? E(vatAdminP).getNamedBundleCap(bundleCapName)
183
+ : vatRecord.bundleCap);
184
+ const upgradeOptions = { vatParameters: {}, ...vatOptions };
185
+ const { incarnationNumber } = await E(vatRecord.adminNode).upgrade(
186
+ bundleCap,
187
+ upgradeOptions,
188
+ );
189
+ vatRecord.incarnationNumber = incarnationNumber;
190
+ return incarnationNumber;
191
+ },
192
+ });
193
+ };
194
+ harden(buildRootObject);