From 116ccbdf3f04b41357458c2384d2d08e2798ba34 Mon Sep 17 00:00:00 2001 From: Dan Connolly Date: Fri, 21 Jan 2022 19:15:31 -0600 Subject: [PATCH] feat(vats): in sim-chain, delegate economy bootstrap to REPL user --- packages/vats/src/core/boot.js | 38 ++++++++++++++----------- packages/vats/src/core/sim-behaviors.js | 24 ++++++++++++++-- 2 files changed, 43 insertions(+), 19 deletions(-) diff --git a/packages/vats/src/core/boot.js b/packages/vats/src/core/boot.js index f98e0df9aa3..c4d42c432ea 100644 --- a/packages/vats/src/core/boot.js +++ b/packages/vats/src/core/boot.js @@ -116,23 +116,29 @@ const buildRootObject = (vatPowers, vatParameters) => { * @param {SwingsetDevices} devices */ bootstrap: (vats, devices) => { - const powers = { - vatPowers, - vatParameters, - vats, - devices, - produce, - consume, + /** @param { Record> } manifest */ + const runBehaviors = manifest => { + const powers = { + vatPowers, + vatParameters, + vats, + devices, + produce, + consume, + runBehaviors, + }; + return Promise.all( + entries(manifest).map(([name, permit]) => + Promise.resolve().then(() => { + const endowments = extract(permit, powers); + console.info(`bootstrap: ${name}(${q(permit)})`); + return behaviors[name](endowments); + }), + ), + ); }; - return Promise.all( - entries(actualManifest).map(([name, permit]) => - Promise.resolve().then(() => { - const endowments = extract(permit, powers); - console.info(`bootstrap: ${name}(${q(permit)})`); - return behaviors[name](endowments); - }), - ), - ); + + return runBehaviors(actualManifest); }, }); }; diff --git a/packages/vats/src/core/sim-behaviors.js b/packages/vats/src/core/sim-behaviors.js index b202eaf9fb9..7d9f170f5c1 100644 --- a/packages/vats/src/core/sim-behaviors.js +++ b/packages/vats/src/core/sim-behaviors.js @@ -6,7 +6,6 @@ import { governanceActions } from './bootEconomy.js'; export const makeSimBootstrapManifest = bootstrapManifest => harden({ ...bootstrapManifest, - ...governanceActions, installSimEgress: { vatParameters: { argv: { hardcodedClientAddresses: true } }, vats: { @@ -19,6 +18,10 @@ export const makeSimBootstrapManifest = bootstrapManifest => consume: { zoe: true, client: true }, produce: { bridgeManager: true }, }, + grantRunBehaviors: { + runBehaviors: true, + consume: { client: true }, + }, }); /** @@ -68,7 +71,22 @@ const connectFaucet = async ({ return E(client).assignBundle({ faucet: makeFaucet }); }; -harden({ installSimEgress, connectFaucet }); -export { installSimEgress, connectFaucet }; +/** + * @param {{ + * runBehaviors: (manifest:unknown) => Promise, + * consume: { client: ERef } + * }} powers + */ +const grantRunBehaviors = async ({ runBehaviors, consume: { client } }) => { + const makeBehaviors = _address => + Far('behaviors', { run: manifest => runBehaviors(manifest) }); + return E(client).assignBundle({ + behaviors: makeBehaviors, + governanceActions: _address => governanceActions, + }); +}; + +harden({ installSimEgress, connectFaucet, grantRunBehaviors }); +export { installSimEgress, connectFaucet, grantRunBehaviors }; export * from './behaviors.js'; export * from './bootEconomy.js';