@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 +16 -16
- package/scripts/build-bundles.d.ts +3 -0
- package/scripts/build-bundles.d.ts.map +1 -0
- package/src/core/basic-behaviors.d.ts +1 -14
- package/src/core/basic-behaviors.d.ts.map +1 -1
- package/src/core/basic-behaviors.js +5 -24
- package/src/core/boot-chain.d.ts +1 -12
- package/src/core/boot-chain.d.ts.map +1 -1
- package/src/core/lib-boot.d.ts +1 -1
- package/src/core/lib-boot.d.ts.map +1 -1
- package/src/core/lib-boot.js +1 -1
- package/tools/bootstrap-chain-reflective.js +194 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agoric/vats",
|
|
3
|
-
"version": "0.15.2-dev-
|
|
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-
|
|
26
|
-
"@agoric/ertp": "0.16.3-dev-
|
|
27
|
-
"@agoric/governance": "0.10.4-dev-
|
|
28
|
-
"@agoric/internal": "0.3.3-dev-
|
|
29
|
-
"@agoric/network": "0.1.1-dev-
|
|
30
|
-
"@agoric/notifier": "0.6.3-dev-
|
|
31
|
-
"@agoric/store": "0.9.3-dev-
|
|
32
|
-
"@agoric/swingset-vat": "0.32.3-dev-
|
|
33
|
-
"@agoric/time": "0.3.3-dev-
|
|
34
|
-
"@agoric/vat-data": "0.5.3-dev-
|
|
35
|
-
"@agoric/vow": "0.1.1-dev-
|
|
36
|
-
"@agoric/zoe": "0.26.3-dev-
|
|
37
|
-
"@agoric/zone": "0.2.3-dev-
|
|
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-
|
|
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": "
|
|
82
|
+
"gitHead": "fd68b6ac1620d3ac9b6e98eeee7a507c3ccb3d79"
|
|
83
83
|
}
|
|
@@ -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?:
|
|
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":"
|
|
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: {
|
|
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 ({
|
package/src/core/boot-chain.d.ts
CHANGED
|
@@ -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;;;;;;;;;;;;;
|
|
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"}
|
package/src/core/lib-boot.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export function makeBootstrap(vatPowers: import("@agoric/swingset-vat").VatPowers & {
|
|
2
2
|
D: DProxy;
|
|
3
|
-
logger
|
|
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,
|
|
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"}
|
package/src/core/lib-boot.js
CHANGED
|
@@ -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
|
|
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);
|