-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathsample-vat.js
More file actions
53 lines (51 loc) · 2.02 KB
/
sample-vat.js
File metadata and controls
53 lines (51 loc) · 2.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import { E } from '@endo/eventual-send';
import { makeDefaultExo } from '@metamask/kernel-exo';
/**
* Build function for generic test vat.
*
* @param {unknown} _vatPowers - Special powers granted to this vat (not used here).
* @param {unknown} parameters - Initialization parameters from the vat's config object.
* @param {unknown} baggage - Root of vat's persistent state.
* @returns {unknown} The root object for the new vat.
*/
export function buildRootObject(_vatPowers, parameters, baggage) {
const name = parameters?.name ?? 'anonymous';
console.log(`buildRootObject "${name}"`);
return makeDefaultExo('root', {
async bootstrap(vats, services) {
console.log(`vat ${name} is bootstrap`);
const issuer = services.ocapURLIssuerService;
const redeemer = services.ocapURLRedemptionService;
baggage.init('redeemer', redeemer);
console.log(`in bootstrap redeemer=${redeemer}`);
if (issuer) {
const url = await E(issuer).issue(vats.bob);
console.log(`url for bob: ${url}`);
} else {
console.log(`no ocapURLIssuerService found`);
}
const pb = E(vats.bob).hello(name);
const pc = E(vats.carol).hello(name);
console.log(`vat ${name} got "hello" answer from Bob: '${await pb}'`);
console.log(`vat ${name} got "hello" answer from Carol: '${await pc}'`);
},
hello(from) {
const message = `vat ${name} got "hello" from ${from}`;
console.log(message);
return message;
},
async doRunRun(url) {
const redeemer = baggage.get('redeemer');
console.log(`in doRunRun loaded redeemer=${redeemer}`);
if (redeemer) {
const remote = await E(redeemer).redeem(url);
console.log(`redeemed ${url} successfully (?)`);
const result = await E(remote).hello(`remote ${name}`);
console.log(`got result from remote: ${result}`);
return result;
}
console.log('no ocapURLRedemptionService found');
throw new Error('ocapURLRedemptionService not available');
},
});
}