Skip to content

Commit 9e53f4f

Browse files
dckcmichaelfig
authored andcommitted
feat(vats): connectFaucet bootstrap behavior
- choose boostrap manifest based on ROLE
1 parent 4535c8d commit 9e53f4f

File tree

3 files changed

+57
-4
lines changed

3 files changed

+57
-4
lines changed

packages/vats/src/bootstrap-behaviors-sim.js

+21-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// @ts-check
2+
import { E, Far } from '@agoric/far';
23
import {
34
bootstrapManifest,
45
installClientEgress,
@@ -13,6 +14,7 @@ export const simBootstrapManifest = harden({
1314
},
1415
workspace: true,
1516
},
17+
connectFaucet: { workspace: true },
1618
...bootstrapManifest,
1719
});
1820

@@ -35,6 +37,23 @@ const installSimEgress = async ({ vatParameters, vats, workspace }) => {
3537
);
3638
};
3739

38-
harden({ installSimEgress });
39-
export { installSimEgress };
40+
const connectFaucet = async ({ workspace }) => {
41+
const { zoe, client } = workspace;
42+
workspace.bridgeManager = undefined; // no bridge in the sim chain
43+
44+
const makeFaucet = async _address => {
45+
const userFeePurse = await E(zoe).makeFeePurse();
46+
47+
return Far('faucet', {
48+
tapFaucet: () => [],
49+
// TODO: obsolete getFeePurse, now that zoe fees are gone?
50+
getFeePurse: () => userFeePurse,
51+
});
52+
};
53+
54+
return E(client).assignBundle({ faucet: makeFaucet });
55+
};
56+
57+
harden({ installSimEgress, connectFaucet });
58+
export { installSimEgress, connectFaucet };
4059
export * from './bootstrap-behaviors.js';

packages/vats/src/bootstrap-behaviors.js

+26
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ export const bootstrapManifest = harden({
3434
workspace: { vatAdminSvc: true, client: true },
3535
},
3636
makeAddressNameHubs: { workspace: true },
37+
makeClientBanks: {
38+
// TODO: separate workspace read / write powers
39+
workspace: true,
40+
},
3741
});
3842

3943
/**
@@ -53,6 +57,7 @@ const connectVattpWithMailbox = ({
5357
};
5458

5559
/**
60+
* TODO: { dynamicVats: { bank: true }} thingy?
5661
*
5762
* @param {{
5863
* vats: { vatAdmin: VatAdminVat },
@@ -182,13 +187,33 @@ const installClientEgress = async (addr, { vats, workspace }) => {
182187
});
183188
};
184189

190+
/**
191+
* @param {{ workspace: {
192+
* vatAdminSvc: VatAdminSvc,
193+
* client: any, // TODO
194+
* bridgeManager: import('./bridge').BridgeManager
195+
* bankManager: unknown,
196+
* }}} powers
197+
*/
198+
const makeClientBanks = async ({ workspace }) => {
199+
const { vatAdminSvc, client, bridgeManager } = workspace;
200+
const { root: bankVat } = await E(vatAdminSvc).createVatByName('bank');
201+
const settledBridge = await bridgeManager;
202+
const bankManager = E(bankVat).makeBankManager(settledBridge);
203+
workspace.bankManager = bankManager;
204+
return E(client).assignBundle({
205+
bank: address => E(bankManager).getBankForAddress(address),
206+
});
207+
};
208+
185209
harden({
186210
connectVattpWithMailbox,
187211
makeVatAdminService,
188212
buildZoe,
189213
makeBoard,
190214
makeAddressNameHubs,
191215
installClientEgress,
216+
makeClientBanks,
192217
});
193218
export {
194219
connectVattpWithMailbox,
@@ -197,4 +222,5 @@ export {
197222
makeBoard,
198223
makeAddressNameHubs,
199224
installClientEgress,
225+
makeClientBanks,
200226
};

packages/vats/src/bootstrap-core.js

+10-2
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ const extract = (template, specimen) => {
7575
}
7676
};
7777

78+
const manifestByRole = {
79+
'sim-chain': simBootstrapManifest,
80+
};
7881
/**
7982
* Build root object of the bootstrap vat.
8083
*
@@ -88,6 +91,12 @@ const extract = (template, specimen) => {
8891
const buildRootObject = (vatPowers, vatParameters) => {
8992
const workspace = makePromiseSpace();
9093

94+
const { ROLE } = vatParameters.argv;
95+
console.debug(`${ROLE} bootstrap starting`);
96+
97+
const manifest = manifestByRole[ROLE];
98+
assert(manifest, X`no manifest for ${ROLE}`);
99+
91100
return Far('bootstrap', {
92101
/**
93102
* Bootstrap vats and devices.
@@ -97,8 +106,7 @@ const buildRootObject = (vatPowers, vatParameters) => {
97106
*/
98107
bootstrap: (vats, devices) =>
99108
Promise.all(
100-
// TODO: choose simBootstrapManifest based on runtime config
101-
entries(simBootstrapManifest).map(([name, permit]) =>
109+
entries(manifest).map(([name, permit]) =>
102110
Promise.resolve().then(() => {
103111
const endowments = extract(permit, {
104112
vatPowers,

0 commit comments

Comments
 (0)