diff --git a/packages/cosmic-swingset/lib/ag-solo/vats/bootstrap.js b/packages/cosmic-swingset/lib/ag-solo/vats/bootstrap.js index f3bc1b0abd5..203aad36371 100644 --- a/packages/cosmic-swingset/lib/ag-solo/vats/bootstrap.js +++ b/packages/cosmic-swingset/lib/ag-solo/vats/bootstrap.js @@ -13,6 +13,7 @@ import { makePluginManager } from '@agoric/swingset-vat/src/vats/plugin-manager' import { assert, details as X } from '@agoric/assert'; import { GCI } from './gci'; import { makeBridgeManager } from './bridge'; +import { makeNameHubKit } from './nameHub'; const NUM_IBC_PORTS = 3; const CENTRAL_ISSUER_NAME = 'Testnet.$USD'; @@ -208,8 +209,13 @@ export function buildRootObject(vatPowers, vatParameters) { }), ); + const { + nameHub: namesByAddress, + nameAdmin: namesByAddressAdmin, + } = makeNameHubKit(); + return Far('chainBundler', { - async createUserBundle(_nickname, powerFlags = []) { + async createUserBundle(_nickname, address, powerFlags = []) { // Bind to some fresh ports (unspecified name) on the IBC implementation // and provide them for the user to have. const ibcport = []; @@ -248,6 +254,14 @@ export function buildRootObject(vatPowers, vatParameters) { }, }); + // Create a name hub for this address. + const { + nameHub: myAddressNameHub, + nameAdmin: myAddressNameAdmin, + } = makeNameHubKit(); + // Register it with the namesByAddress hub. + namesByAddressAdmin.update(address, myAddressNameHub); + const bundle = harden({ ...additionalPowers, chainTimerService, @@ -255,6 +269,13 @@ export function buildRootObject(vatPowers, vatParameters) { contractHost, faucet, ibcport, + myAddressNameAdmin: { + ...myAddressNameAdmin, + getMyAddress() { + return address; + }, + }, + namesByAddress, priceAuthority, registrar: registry, registry, @@ -504,12 +525,12 @@ export function buildRootObject(vatPowers, vatParameters) { // NOTE: This is a special exception to the security model, // to give capabilities to all clients (since we are running // locally with the `--give-me-all-the-agoric-powers` flag). - return chainBundler.createUserBundle(nickname, [ + return chainBundler.createUserBundle(nickname, 'demo', [ 'agoric.priceAuthorityAdmin', 'agoric.vattp', ]); } - return chainBundler.createUserBundle(nickname); + return chainBundler.createUserBundle(nickname, 'demo'); }, }); await Promise.all( diff --git a/packages/cosmic-swingset/lib/ag-solo/vats/types.js b/packages/cosmic-swingset/lib/ag-solo/vats/types.js index a1c3895b8b3..04665b65924 100644 --- a/packages/cosmic-swingset/lib/ag-solo/vats/types.js +++ b/packages/cosmic-swingset/lib/ag-solo/vats/types.js @@ -11,7 +11,8 @@ /** * @typedef {Object} NameHub * @property {(...path: Array) => Promise} lookup Look up a - * path of keys starting from the current NameHub. + * path of keys starting from the current NameHub. Wait on any reserved + * promises. */ /** diff --git a/packages/cosmic-swingset/lib/ag-solo/vats/vat-provisioning.js b/packages/cosmic-swingset/lib/ag-solo/vats/vat-provisioning.js index e29de6ce383..8ad5652e2d0 100644 --- a/packages/cosmic-swingset/lib/ag-solo/vats/vat-provisioning.js +++ b/packages/cosmic-swingset/lib/ag-solo/vats/vat-provisioning.js @@ -15,7 +15,7 @@ export function buildRootObject(_vatPowers) { vattp = v; } - async function pleaseProvision(nickname, pubkey, powerFlags) { + async function pleaseProvision(nickname, address, powerFlags) { let chainBundle; const fetch = Far('fetch', { getDemoBundle() { @@ -24,15 +24,19 @@ export function buildRootObject(_vatPowers) { }); // Add a remote and egress for the pubkey. - const { transmitter, setReceiver } = await E(vattp).addRemote(pubkey); - await E(comms).addRemote(pubkey, transmitter, setReceiver); + const { transmitter, setReceiver } = await E(vattp).addRemote(address); + await E(comms).addRemote(address, transmitter, setReceiver); const INDEX = 1; - await E(comms).addEgress(pubkey, INDEX, fetch); + await E(comms).addEgress(address, INDEX, fetch); // Do this here so that any side-effects don't happen unless // the egress has been successfully added. - chainBundle = E(bundler).createUserBundle(nickname, powerFlags || []); + chainBundle = E(bundler).createUserBundle( + nickname, + address, + powerFlags || [], + ); return { ingressIndex: INDEX }; }