@agoric/vats 0.15.2-dev-7ffae88.0 → 0.15.2-dev-c5284e4.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.
Files changed (48) hide show
  1. package/package.json +24 -24
  2. package/src/core/chain-behaviors.d.ts.map +1 -1
  3. package/src/core/chain-behaviors.js +1 -7
  4. package/src/core/client-behaviors.d.ts +1 -0
  5. package/src/core/client-behaviors.d.ts.map +1 -1
  6. package/src/core/client-behaviors.js +1 -0
  7. package/src/core/startWalletFactory.d.ts +4 -4
  8. package/src/core/types-ambient.d.ts +1 -0
  9. package/src/core/utils.d.ts +2 -2
  10. package/src/core/utils.d.ts.map +1 -1
  11. package/src/core/utils.js +13 -13
  12. package/src/ibc.d.ts +63 -25
  13. package/src/ibc.d.ts.map +1 -1
  14. package/src/ibc.js +671 -457
  15. package/src/localchain.d.ts +22 -0
  16. package/src/localchain.d.ts.map +1 -0
  17. package/src/localchain.js +106 -0
  18. package/src/proposals/localchain-proposal.d.ts +405 -0
  19. package/src/proposals/localchain-proposal.d.ts.map +1 -0
  20. package/src/proposals/localchain-proposal.js +114 -0
  21. package/src/proposals/localchain-test.d.ts +25 -0
  22. package/src/proposals/localchain-test.d.ts.map +1 -0
  23. package/src/proposals/localchain-test.js +81 -0
  24. package/src/proposals/network-proposal.d.ts +42 -1
  25. package/src/proposals/network-proposal.d.ts.map +1 -1
  26. package/src/proposals/network-proposal.js +58 -42
  27. package/src/proposals/probeZcfBundle.d.ts +26 -0
  28. package/src/proposals/probeZcfBundle.d.ts.map +1 -0
  29. package/src/proposals/probeZcfBundle.js +72 -0
  30. package/src/proposals/restart-vats-proposal.d.ts +2 -0
  31. package/src/proposals/restart-vats-proposal.d.ts.map +1 -1
  32. package/src/proposals/restart-vats-proposal.js +13 -1
  33. package/src/proposals/zcf-proposal.d.ts.map +1 -1
  34. package/src/proposals/zcf-proposal.js +1 -0
  35. package/src/vat-bridge.d.ts +16 -2
  36. package/src/vat-bridge.d.ts.map +1 -1
  37. package/src/vat-ibc.d.ts +43 -3
  38. package/src/vat-ibc.d.ts.map +1 -1
  39. package/src/vat-ibc.js +20 -9
  40. package/src/vat-localchain.d.ts +33 -0
  41. package/src/vat-localchain.d.ts.map +1 -0
  42. package/src/vat-localchain.js +24 -0
  43. package/src/vat-network.d.ts +67 -1
  44. package/src/vat-network.d.ts.map +1 -1
  45. package/src/vat-network.js +39 -3
  46. package/tools/boot-test-utils.d.ts +8 -2
  47. package/tools/boot-test-utils.d.ts.map +1 -1
  48. package/tools/boot-test-utils.js +2 -1
@@ -0,0 +1,25 @@
1
+ export function testLocalChain({ consume: { chainStorage, localchain } }: BootstrapPowers & {
2
+ consume: {
3
+ localchain: import('../localchain.js').LocalChain;
4
+ };
5
+ }, { options: { testResultPath } }: {
6
+ options: {
7
+ testResultPath: string;
8
+ };
9
+ }): Promise<void>;
10
+ export function getManifestForLocalChainTest(_powers: any, { testResultPath }: {
11
+ testResultPath: any;
12
+ }): {
13
+ manifest: {
14
+ [x: string]: {
15
+ consume: {
16
+ chainStorage: string;
17
+ localchain: string;
18
+ };
19
+ };
20
+ };
21
+ options: {
22
+ testResultPath: any;
23
+ };
24
+ };
25
+ //# sourceMappingURL=localchain-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localchain-test.d.ts","sourceRoot":"","sources":["localchain-test.js"],"names":[],"mappings":"AAYO,0EARI,eAAe,GAAG;IAC5B,OAAW,EAAE;QACb,UAAgB,EAAE,OAAO,kBAAkB,EAAE,UAAU,CAAC;KACnD,CAAC;CACH;IAE2C,OAAO,EAA3C;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE;kBAwDpC;AAEM;;;;;;;;;;;;;;EAYL"}
@@ -0,0 +1,81 @@
1
+ // @ts-check
2
+ import { E } from '@endo/far';
3
+
4
+ /**
5
+ * @param {BootstrapPowers & {
6
+ * consume: {
7
+ * localchain: import('../localchain.js').LocalChain;
8
+ * };
9
+ * }} powers
10
+ * @param {object} options
11
+ * @param {{ testResultPath: string }} options.options
12
+ */
13
+ export const testLocalChain = async (
14
+ { consume: { chainStorage, localchain } },
15
+ { options: { testResultPath } },
16
+ ) => {
17
+ console.warn('=== localchain test started (result in', testResultPath, ')!');
18
+ /** @type {null | ERef<StorageNode>} */
19
+ let node = await chainStorage;
20
+ if (!node) {
21
+ throw new Error('no chainStorage');
22
+ }
23
+
24
+ for (const nodeName of testResultPath.split('.')) {
25
+ node = E(node).makeChildNode(nodeName);
26
+ }
27
+
28
+ let result;
29
+ try {
30
+ const lca = await E(localchain).createAccount();
31
+ console.info('created account', lca);
32
+ const address = await E(lca).getAddress();
33
+ console.info('address', address);
34
+ const balances = await E(lca).allBalances();
35
+ console.info('balances', balances);
36
+ await E(lca)
37
+ .executeTx([
38
+ {
39
+ '@type': '/cosmos.bank.v1beta1.MsgSend',
40
+ from_address: address,
41
+ to_address: address,
42
+ amount: [{ denom: 'ucosm', amount: '1' }],
43
+ },
44
+ ])
45
+ .then(
46
+ res => console.info('unexpected executeTx result', res),
47
+ e => {
48
+ if (String(e).match(/insufficient funds/)) {
49
+ console.info('insufficient funds as expected');
50
+ return;
51
+ }
52
+ console.info('unexpected error', e);
53
+ },
54
+ );
55
+
56
+ const emptyQuery = await E(localchain).query([]);
57
+ console.info('emptyQuery', emptyQuery);
58
+
59
+ result = { success: true };
60
+ } catch (e) {
61
+ console.error('test failed with', e);
62
+ result = { success: false, error: String(e) };
63
+ }
64
+
65
+ console.warn('=== localchain test done, setting', { result });
66
+ await E(node).setValue(JSON.stringify(result));
67
+ };
68
+
69
+ export const getManifestForLocalChainTest = (_powers, { testResultPath }) => ({
70
+ manifest: {
71
+ [testLocalChain.name]: {
72
+ consume: {
73
+ chainStorage: 'bridge',
74
+ localchain: 'localchain',
75
+ },
76
+ },
77
+ },
78
+ options: {
79
+ testResultPath,
80
+ },
81
+ });
@@ -1,5 +1,5 @@
1
1
  export function registerNetworkProtocols(vats: SoloVats | NetVats, dibcBridgeManager?: ERef<import("../types.js").ScopedBridgeManager> | undefined): Promise<void>;
2
- export function setupNetworkProtocols({ consume: { client, loadCriticalVat, bridgeManager: bridgeManagerP, provisioning, }, produce: { networkVat }, }: BootstrapPowers & {
2
+ export function setupNetworkProtocols({ consume: { client, loadCriticalVat, bridgeManager: bridgeManagerP, provisioning, vatUpgradeInfo: vatUpgradeInfoP, }, produce: { networkVat, vatUpgradeInfo: produceVatUpgradeInfo }, }: BootstrapPowers & {
3
3
  consume: {
4
4
  loadCriticalVat: VatLoader<any>;
5
5
  };
@@ -24,10 +24,13 @@ export function getManifestForNetwork(_powers: any, { networkRef, ibcRef }: {
24
24
  bridgeManager: string;
25
25
  zoe: string;
26
26
  provisioning: string;
27
+ vatUpgradeInfo: boolean;
27
28
  };
28
29
  produce: {
29
30
  networkVat: string;
31
+ vatUpgradeInfo: boolean;
30
32
  };
33
+ zone: boolean;
31
34
  };
32
35
  };
33
36
  options: {
@@ -35,7 +38,45 @@ export function getManifestForNetwork(_powers: any, { networkRef, ibcRef }: {
35
38
  ibcRef: any;
36
39
  };
37
40
  };
41
+ /**
42
+ * Create the network and IBC vats; produce `networkVat` in the core / bootstrap
43
+ * space.
44
+ *
45
+ * The `networkVat` is CLOSELY HELD in the core space, where later, we claim
46
+ * ports using `E(networkVat).bind(_path_)`. As discussed in `ProtocolHandler`
47
+ * docs, _path_ is:
48
+ *
49
+ * - /ibc-port/NAME for an IBC port with a known name or,
50
+ * - /ibc-port/ for an IBC port with a fresh name.
51
+ *
52
+ * Contracts are expected to use the services of the network and IBC vats by way
53
+ * of such ports.
54
+ *
55
+ * Testing facilities include:
56
+ *
57
+ * - loopback ports: `E(networkVat).bind('/local/')`
58
+ * - an echo port: `E(vats.network).bind('/ibc-port/echo')`
59
+ */
38
60
  export type VatLoader2 = ((name: 'network') => NetworkVat) & ((name: 'ibc') => IBCVat);
61
+ /**
62
+ * Create the network and IBC vats; produce `networkVat` in the core / bootstrap
63
+ * space.
64
+ *
65
+ * The `networkVat` is CLOSELY HELD in the core space, where later, we claim
66
+ * ports using `E(networkVat).bind(_path_)`. As discussed in `ProtocolHandler`
67
+ * docs, _path_ is:
68
+ *
69
+ * - /ibc-port/NAME for an IBC port with a known name or,
70
+ * - /ibc-port/ for an IBC port with a fresh name.
71
+ *
72
+ * Contracts are expected to use the services of the network and IBC vats by way
73
+ * of such ports.
74
+ *
75
+ * Testing facilities include:
76
+ *
77
+ * - loopback ports: `E(networkVat).bind('/local/')`
78
+ * - an echo port: `E(vats.network).bind('/ibc-port/echo')`
79
+ */
39
80
  export type NetVats = {
40
81
  network: ERef<NetworkVat>;
41
82
  ibc: ERef<IBCVat>;
@@ -1 +1 @@
1
- {"version":3,"file":"network-proposal.d.ts","sourceRoot":"","sources":["network-proposal.js"],"names":[],"mappings":"AAeO,+CAHI,QAAQ,GAAG,OAAO,kGA2D5B;AAmBM,wJAhBI,eAAe,GAAG;IAC5B,OAAW,EAAE;QAAE,eAAe,EAAE,UAAU,GAAG,CAAC,CAAA;KAAE,CAAC;IACjD,OAAW,EAAE;QAAE,UAAU,EAAE,SAAS,GAAG,CAAC,CAAA;KAAE,CAAC;CACxC;;oBAEqB,YAAY;gBAAU,YAAY;;kBA+D1D;AAEM;;;;;;;;;;;;;;;;;;;;;;EAmBL;iCAjFmB,SAAS,KAAK,UAAU,YAAY,KAAK,KAAK,MAAM;sBAE5D;IACZ,OAAW,EAAE,KAAK,UAAU,CAAC,CAAC;IAC9B,GAAO,EAAE,KAAK,MAAM,CAAC,CAAC;IACtB,YAAgB,EAAE,KAAK,eAAe,GAAG,SAAS,CAAC,CAAC;CACjD"}
1
+ {"version":3,"file":"network-proposal.d.ts","sourceRoot":"","sources":["network-proposal.js"],"names":[],"mappings":"AAiBO,+CAHI,QAAQ,GAAG,OAAO,kGAoC5B;AAqCM,gOAhBI,eAAe,GAAG;IAC5B,OAAW,EAAE;QAAE,eAAe,EAAE,UAAU,GAAG,CAAC,CAAA;KAAE,CAAC;IACjD,OAAW,EAAE;QAAE,UAAU,EAAE,SAAS,GAAG,CAAC,CAAA;KAAE,CAAC;CACxC;;oBAEqB,YAAY;gBAAU,YAAY;;kBA+E1D;AAEM;;;;;;;;;;;;;;;;;;;;;;;;;EAsBL;;;;;;;;;;;;;;;;;;;;iCApGmB,SAAS,KAAK,UAAU,YAAY,KAAK,KAAK,MAAM;;;;;;;;;;;;;;;;;;;;sBAE5D;IACZ,OAAW,EAAE,KAAK,UAAU,CAAC,CAAC;IAC9B,GAAO,EAAE,KAAK,MAAM,CAAC,CAAC;IACtB,YAAgB,EAAE,KAAK,eAAe,GAAG,SAAS,CAAC,CAAC;CACjD"}
@@ -1,10 +1,12 @@
1
- import { E, Far } from '@endo/far';
1
+ /**
2
+ * @file CoreEval module to set up network, IBC vats.
3
+ * @see {setupNetworkProtocols}
4
+ */
5
+ import { E } from '@endo/far';
2
6
  import { BridgeId as BRIDGE_ID } from '@agoric/internal';
3
- import {
4
- makeLoopbackProtocolHandler,
5
- makeEchoConnectionHandler,
6
- makeNonceMaker,
7
- } from '@agoric/network';
7
+ import { prepareVowTools } from '@agoric/vat-data/vow.js';
8
+ import { makeScalarMapStore } from '@agoric/store';
9
+ import { makeHeapZone } from '@agoric/zone';
8
10
 
9
11
  const NUM_IBC_PORTS_PER_CLIENT = 3;
10
12
  const INTERCHAIN_ACCOUNT_CONTROLLER_PORT_PREFIX = 'icacontroller-';
@@ -15,63 +17,58 @@ const INTERCHAIN_ACCOUNT_CONTROLLER_PORT_PREFIX = 'icacontroller-';
15
17
  */
16
18
  export const registerNetworkProtocols = async (vats, dibcBridgeManager) => {
17
19
  const ps = [];
20
+
21
+ const loopbackHandler = await E(vats.network).makeLoopbackProtocolHandler();
18
22
  // Every vat has a loopback device.
19
- ps.push(
20
- E(vats.network).registerProtocolHandler(
21
- ['/local'],
22
- makeLoopbackProtocolHandler(),
23
- ),
24
- );
23
+ ps.push(E(vats.network).registerProtocolHandler(['/local'], loopbackHandler));
24
+
25
25
  if (dibcBridgeManager) {
26
26
  assert('ibc' in vats);
27
27
  // We have access to the bridge, and therefore IBC.
28
- const callbacks = Far('callbacks', {
29
- downcall(method, obj) {
30
- return E(dibcBridgeManager).toBridge({
31
- ...obj,
32
- type: 'IBC_METHOD',
33
- method,
34
- });
35
- },
36
- });
28
+ const settledBridgeManager = await dibcBridgeManager;
29
+ const callbacks = await E(vats.ibc).makeCallbacks(settledBridgeManager);
37
30
  ps.push(
38
31
  E(vats.ibc)
39
- .createInstance(callbacks)
40
- .then(ibcHandler =>
32
+ .createHandlers(callbacks)
33
+ .then(({ protocolHandler, bridgeHandler }) =>
41
34
  E(dibcBridgeManager)
42
- .initHandler(ibcHandler)
35
+ .initHandler(bridgeHandler)
43
36
  .then(() =>
44
37
  E(vats.network).registerProtocolHandler(
45
38
  ['/ibc-port', '/ibc-hop'],
46
- ibcHandler,
39
+ protocolHandler,
47
40
  ),
48
41
  ),
49
42
  ),
50
43
  );
51
44
  } else {
52
- const loHandler = makeLoopbackProtocolHandler(
53
- makeNonceMaker('ibc-channel/channel-'),
45
+ const loHandler = await E(vats.network).makeLoopbackProtocolHandler(
46
+ 'ibc-channel/channel-',
54
47
  );
55
48
  ps.push(E(vats.network).registerProtocolHandler(['/ibc-port'], loHandler));
56
49
  }
57
50
  await Promise.all(ps);
58
-
59
- // Add an echo listener on our ibc-port network (whether real or virtual).
60
- const echoPort = await E(vats.network).bind('/ibc-port/echo');
61
-
62
- return E(echoPort).addListener(
63
- Far('listener', {
64
- async onAccept(_port, _localAddr, _remoteAddr, _listenHandler) {
65
- return harden(makeEchoConnectionHandler());
66
- },
67
- async onListen(port, _listenHandler) {
68
- console.debug(`listening on echo port: ${port}`);
69
- },
70
- }),
71
- );
72
51
  };
73
52
 
74
53
  /**
54
+ * Create the network and IBC vats; produce `networkVat` in the core / bootstrap
55
+ * space.
56
+ *
57
+ * The `networkVat` is CLOSELY HELD in the core space, where later, we claim
58
+ * ports using `E(networkVat).bind(_path_)`. As discussed in `ProtocolHandler`
59
+ * docs, _path_ is:
60
+ *
61
+ * - /ibc-port/NAME for an IBC port with a known name or,
62
+ * - /ibc-port/ for an IBC port with a fresh name.
63
+ *
64
+ * Contracts are expected to use the services of the network and IBC vats by way
65
+ * of such ports.
66
+ *
67
+ * Testing facilities include:
68
+ *
69
+ * - loopback ports: `E(networkVat).bind('/local/')`
70
+ * - an echo port: `E(vats.network).bind('/ibc-port/echo')`
71
+ *
75
72
  * @param {BootstrapPowers & {
76
73
  * consume: { loadCriticalVat: VatLoader<any> };
77
74
  * produce: { networkVat: Producer<any> };
@@ -95,8 +92,9 @@ export const setupNetworkProtocols = async (
95
92
  loadCriticalVat,
96
93
  bridgeManager: bridgeManagerP,
97
94
  provisioning,
95
+ vatUpgradeInfo: vatUpgradeInfoP,
98
96
  },
99
- produce: { networkVat },
97
+ produce: { networkVat, vatUpgradeInfo: produceVatUpgradeInfo },
100
98
  },
101
99
  options,
102
100
  ) => {
@@ -110,6 +108,11 @@ export const setupNetworkProtocols = async (
110
108
  // don't proceed if loadCriticalVat fails
111
109
  await Promise.all(Object.values(vats));
112
110
 
111
+ produceVatUpgradeInfo.resolve(makeScalarMapStore('vatUpgradeInfo'));
112
+ const info = await vatUpgradeInfoP;
113
+ info.init('ibc', ibcRef);
114
+ info.init('network', networkRef);
115
+
113
116
  networkVat.reset();
114
117
  networkVat.resolve(vats.network);
115
118
  const bridgeManager = await bridgeManagerP;
@@ -139,6 +142,16 @@ export const setupNetworkProtocols = async (
139
142
  // we need to finish registering handlers for
140
143
  // ibc-port etc.
141
144
  await registerNetworkProtocols(vats, dibcBridgeManager);
145
+
146
+ // Heap-based vow resolution is used for this module because the
147
+ // bootstrap vat can't yet be upgraded.
148
+ const powers = prepareVowTools(makeHeapZone());
149
+
150
+ const { when } = powers;
151
+ // Add an echo listener on our ibc-port network (whether real or virtual).
152
+ const echoPort = await when(E(vats.network).bind('/ibc-port/echo'));
153
+ const { listener } = await E(vats.network).makeEchoConnectionKit();
154
+ await E(echoPort).addListener(listener);
142
155
  return E(client).assignBundle([_a => ({ ibcport: makePorts() })]);
143
156
  };
144
157
 
@@ -151,10 +164,13 @@ export const getManifestForNetwork = (_powers, { networkRef, ibcRef }) => ({
151
164
  bridgeManager: 'bridge',
152
165
  zoe: 'zoe',
153
166
  provisioning: 'provisioning',
167
+ vatUpgradeInfo: true,
154
168
  },
155
169
  produce: {
156
170
  networkVat: 'network',
171
+ vatUpgradeInfo: true,
157
172
  },
173
+ zone: true,
158
174
  },
159
175
  },
160
176
  options: {
@@ -0,0 +1,26 @@
1
+ export function probeZcfBundleCap({ consume: { vatAdminSvc, walletFactoryStartResult, provisionPoolStartResult, chainStorage, walletBridgeManager: walletBridgeManagerP, vatStore, }, }: {
2
+ consume: {
3
+ vatAdminSvc: any;
4
+ walletFactoryStartResult: any;
5
+ provisionPoolStartResult: any;
6
+ chainStorage: any;
7
+ walletBridgeManager: any;
8
+ vatStore: any;
9
+ };
10
+ }, options: any): Promise<void>;
11
+ export function getManifestForProbeZcfBundleCap(_powers: any, options: any): {
12
+ manifest: {
13
+ [x: string]: {
14
+ consume: {
15
+ vatAdminSvc: boolean;
16
+ vatStore: boolean;
17
+ walletBridgeManager: boolean;
18
+ walletFactoryStartResult: boolean;
19
+ provisionPoolStartResult: boolean;
20
+ chainStorage: boolean;
21
+ };
22
+ };
23
+ };
24
+ options: any;
25
+ };
26
+ //# sourceMappingURL=probeZcfBundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probeZcfBundle.d.ts","sourceRoot":"","sources":["probeZcfBundle.js"],"names":[],"mappings":"AAIO;;;;;;;;;gCAiDN;AAGM;;;;;;;;;;;;;;EAcL"}
@@ -0,0 +1,72 @@
1
+ import { E } from '@endo/far';
2
+ import { makeStorageNodeChild } from '@agoric/internal/src/lib-chainStorage.js';
3
+
4
+ // verify that Zoe remembers the zcfBundleCap across upgrades
5
+ export const probeZcfBundleCap = async (
6
+ {
7
+ consume: {
8
+ vatAdminSvc,
9
+ walletFactoryStartResult,
10
+ provisionPoolStartResult,
11
+ chainStorage,
12
+ walletBridgeManager: walletBridgeManagerP,
13
+ vatStore,
14
+ },
15
+ },
16
+ options,
17
+ ) => {
18
+ const { zoeRef, zcfRef, walletRef } = options.options;
19
+
20
+ const { adminNode, root: zoeRoot } = await E(vatStore).get('zoe');
21
+ const zoeConfigFacet = await E(zoeRoot).getZoeConfigFacet();
22
+
23
+ // STEP 1: restart WF; it'll use the newest ZCF known to Zoe ////////////////
24
+
25
+ const WALLET_STORAGE_PATH_SEGMENT = 'wallet';
26
+ const [walletBridgeManager, walletStorageNode, ppFacets] = await Promise.all([
27
+ walletBridgeManagerP,
28
+ makeStorageNodeChild(chainStorage, WALLET_STORAGE_PATH_SEGMENT),
29
+ provisionPoolStartResult,
30
+ ]);
31
+ const walletReviver = await E(ppFacets.creatorFacet).getWalletReviver();
32
+ const privateArgs = {
33
+ storageNode: walletStorageNode,
34
+ walletBridgeManager,
35
+ walletReviver,
36
+ };
37
+
38
+ const { adminFacet: walletAdminFacet } = await walletFactoryStartResult;
39
+ await E(walletAdminFacet).upgradeContract(walletRef.bundleID, privateArgs);
40
+
41
+ // STEP 2: Set the ZCF bundle ////////////////////////
42
+ await E(zoeConfigFacet).updateZcfBundleId(zcfRef.bundleID);
43
+
44
+ // STEP 3: Upgrade Zoe again ////////////////////////
45
+ // ////// See if Zoe forgets ZcfBundleCap //////////
46
+
47
+ const zoeBundleCap = await E(vatAdminSvc).getBundleCap(zoeRef.bundleID);
48
+ await E(adminNode).upgrade(zoeBundleCap, {});
49
+
50
+ // STEP 4: restart WF ////////////////////////
51
+ await E(walletAdminFacet).restartContract(privateArgs);
52
+
53
+ // ////// See which zcf bundle was used //////////
54
+ };
55
+ harden(probeZcfBundleCap);
56
+
57
+ export const getManifestForProbeZcfBundleCap = (_powers, options) => ({
58
+ manifest: {
59
+ [probeZcfBundleCap.name]: {
60
+ consume: {
61
+ vatAdminSvc: true,
62
+ vatStore: true,
63
+ walletBridgeManager: true,
64
+ walletFactoryStartResult: true,
65
+ provisionPoolStartResult: true,
66
+ chainStorage: true,
67
+ },
68
+ },
69
+ },
70
+ options,
71
+ });
72
+ harden(getManifestForProbeZcfBundleCap);
@@ -13,6 +13,8 @@ export function getManifestForRestart(_powers: any, options: any): {
13
13
  loadCriticalVat: boolean;
14
14
  psmKit: boolean;
15
15
  vatStore: boolean;
16
+ vatAdminSvc: boolean;
17
+ vatUpgradeInfo: boolean;
16
18
  zoe: string;
17
19
  provisioning: string;
18
20
  vaultFactoryKit: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"restart-vats-proposal.d.ts","sourceRoot":"","sources":["restart-vats-proposal.js"],"names":[],"mappings":"AA6BO,yCALI,eAAe,GACzB,OAAW,wDAAwD,EAAE,qBAAqB;IAErD,OAAO,EAAlC;QAAE,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE;kBA0G5B;AAGM;;;;;;;;;;;;;;;;;;EAkBL"}
1
+ {"version":3,"file":"restart-vats-proposal.d.ts","sourceRoot":"","sources":["restart-vats-proposal.js"],"names":[],"mappings":"AA+BO,yCALI,eAAe,GACzB,OAAW,wDAAwD,EAAE,qBAAqB;IAErD,OAAO,EAAlC;QAAE,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE;kBAkH5B;AAGM;;;;;;;;;;;;;;;;;;;;EAoBL"}
@@ -16,6 +16,8 @@ const vatUpgradeStatus = {
16
16
  bank: 'covered by test-upgrade-vats: upgrade vat-bank',
17
17
  board: 'covered by test-upgrade-vats: upgrade vat-board',
18
18
  bridge: 'covered by test-upgrade-vats: upgrade vat-bridge',
19
+ ibc: 'upgradeable',
20
+ network: 'upgradeable',
19
21
  priceAuthority: 'covered by test-upgrade-vats: upgrade vat-priceAuthority',
20
22
  provisioning: 'UNTESTED',
21
23
  zoe: 'tested in @agoric/zoe',
@@ -117,11 +119,19 @@ export const restartVats = async ({ consume }, { options }) => {
117
119
  }
118
120
 
119
121
  trace('iterating over vatStore');
120
- for (const [name] of vatStore.entries()) {
122
+ for (const [name, { adminNode }] of vatStore.entries()) {
121
123
  const status = vatUpgradeStatus[name];
122
124
  if (!status) {
123
125
  Fail`unaudited vat ${name}`;
124
126
  }
127
+ if (status === 'upgradeable') {
128
+ console.log('upgrading vat', name);
129
+ const { vatAdminSvc } = consume;
130
+ const info = await consume.vatUpgradeInfo;
131
+ const { bundleID } = info.get(name);
132
+ const bcap = await E(vatAdminSvc).getBundleCap(bundleID);
133
+ await E(adminNode).upgrade(bcap);
134
+ }
125
135
  console.log('VAT', name, status);
126
136
  }
127
137
 
@@ -144,6 +154,8 @@ export const getManifestForRestart = (_powers, options) => ({
144
154
  loadCriticalVat: true,
145
155
  psmKit: true,
146
156
  vatStore: true,
157
+ vatAdminSvc: true,
158
+ vatUpgradeInfo: true,
147
159
  zoe: 'zoe',
148
160
  provisioning: 'provisioning',
149
161
  vaultFactoryKit: true,
@@ -1 +1 @@
1
- {"version":3,"file":"zcf-proposal.d.ts","sourceRoot":"","sources":["zcf-proposal.js"],"names":[],"mappings":"AAeO,mEAZI,eAAe,GAAG;IAC5B,OAAW,EAAE;QACb,WAAiB,EAAE,WAAW,CAAC;QAC/B,QAAc,EAAE,SAChB,MAAc,EACd,OAAe,sBAAsB,EAAE,gBAAgB,CAChD,CAAC;KACH,CAAC;CACH;;gBAEiB,YAAY;gBAAU,YAAY;;kBAmBtD;AAEM;;;;;;;;;;;;;;;;;EAcL"}
1
+ {"version":3,"file":"zcf-proposal.d.ts","sourceRoot":"","sources":["zcf-proposal.js"],"names":[],"mappings":"AAgBO,mEAZI,eAAe,GAAG;IAC5B,OAAW,EAAE;QACb,WAAiB,EAAE,WAAW,CAAC;QAC/B,QAAc,EAAE,SAChB,MAAc,EACd,OAAe,sBAAsB,EAAE,gBAAgB,CAChD,CAAC;KACH,CAAC;CACH;;gBAEiB,YAAY;gBAAU,YAAY;;kBAmBtD;AAEM;;;;;;;;;;;;;;;;;EAcL"}
@@ -1,3 +1,4 @@
1
+ // @ts-check
1
2
  import { E } from '@endo/far';
2
3
 
3
4
  /**
@@ -1,8 +1,22 @@
1
1
  export function buildRootObject(vatPowers: any, _args: any, baggage: any): {
2
- makeBridgedChainStorageRoot: (storageBridgeManagerP: ERef<import('./types.js').ScopedBridgeManager>, rootPath: string, options?: object) => Promise<any>;
2
+ makeBridgedChainStorageRoot: (storageBridgeManagerP: ERef<import('./types.js').ScopedBridgeManager>, rootPath: string, options?: object) => Promise<import("@endo/exo/src/exo-makers.js").Guarded<{
3
+ getPath(): string;
4
+ getStoreKey(): Promise<import("@agoric/internal/src/lib-chainStorage.js").VStorageKey>;
5
+ makeChildNode(name: string, childNodeOptions?: {
6
+ sequence?: boolean | undefined;
7
+ } | undefined): import("@agoric/internal/src/lib-chainStorage.js").StorageNode;
8
+ setValue(value: string): Promise<void>;
9
+ }>>;
3
10
  provideManagerForBridge: (bridgeDevice: BridgeDevice) => import("./types.js").BridgeManager;
4
11
  } & import("@endo/eventual-send").RemotableBrand<{}, {
5
- makeBridgedChainStorageRoot: (storageBridgeManagerP: ERef<import('./types.js').ScopedBridgeManager>, rootPath: string, options?: object) => Promise<any>;
12
+ makeBridgedChainStorageRoot: (storageBridgeManagerP: ERef<import('./types.js').ScopedBridgeManager>, rootPath: string, options?: object) => Promise<import("@endo/exo/src/exo-makers.js").Guarded<{
13
+ getPath(): string;
14
+ getStoreKey(): Promise<import("@agoric/internal/src/lib-chainStorage.js").VStorageKey>;
15
+ makeChildNode(name: string, childNodeOptions?: {
16
+ sequence?: boolean | undefined;
17
+ } | undefined): import("@agoric/internal/src/lib-chainStorage.js").StorageNode;
18
+ setValue(value: string): Promise<void>;
19
+ }>>;
6
20
  provideManagerForBridge: (bridgeDevice: BridgeDevice) => import("./types.js").BridgeManager;
7
21
  }>;
8
22
  //# sourceMappingURL=vat-bridge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vat-bridge.d.ts","sourceRoot":"","sources":["vat-bridge.js"],"names":[],"mappings":"AAOA;yDAea,KAAK,OAAO,YAAY,EAAE,mBAAmB,CAAC,YAC9C,MAAM,YACN,MAAM;;;yDAFN,KAAK,OAAO,YAAY,EAAE,mBAAmB,CAAC,YAC9C,MAAM,YACN,MAAM;;GAyBlB"}
1
+ {"version":3,"file":"vat-bridge.d.ts","sourceRoot":"","sources":["vat-bridge.js"],"names":[],"mappings":"AAOA;yDAea,KAAK,OAAO,YAAY,EAAE,mBAAmB,CAAC,YAC9C,MAAM,YACN,MAAM;;;;;;;;;;yDAFN,KAAK,OAAO,YAAY,EAAE,mBAAmB,CAAC,YAC9C,MAAM,YACN,MAAM;;;;;;;;;GAyBlB"}
package/src/vat-ibc.d.ts CHANGED
@@ -1,6 +1,46 @@
1
- export function buildRootObject(): {
2
- createInstance: (callbacks: any) => ProtocolHandler & import("./types.js").BridgeHandler;
1
+ export function buildRootObject(_vatPowers: any, _args: any, baggage: any): {
2
+ createHandlers: (callbacks: any) => {
3
+ protocolHandler: ProtocolHandler;
4
+ bridgeHandler: import("./types.js").BridgeHandler;
5
+ } | {
6
+ protocolHandler: import("@endo/exo/src/exo-makers.js").Guarded<{
7
+ onCreate(impl: any, _protocolHandler: any): Promise<void>;
8
+ onInstantiate(): Promise<string>;
9
+ generatePortID(_localAddr: any, _protocolHandler: any): Promise<string>;
10
+ onBind(port: any, localAddr: any, _protocolHandler: any): Promise<any>;
11
+ onConnect(port: any, localAddr: any, remoteAddr: any, _chandler: any, _protocolHandler: any): Promise<import("@agoric/vow").Vow<any>>;
12
+ onListen(_port: any, localAddr: any, _listenHandler: any): Promise<void>;
13
+ onListenRemove(_port: any, localAddr: any, _listenHandler: any): Promise<void>;
14
+ onRevoke(_port: any, localAddr: any, _protocolHandler: any): Promise<void>;
15
+ }>;
16
+ bridgeHandler: import("@endo/exo/src/exo-makers.js").Guarded<{
17
+ fromBridge(obj: any): Promise<void>;
18
+ }>;
19
+ };
20
+ makeCallbacks: (dibcBridgeManager: import("./types.js").ScopedBridgeManager) => import("@endo/exo/src/exo-makers.js").Guarded<{
21
+ downcall(method: any, obj: any): Promise<any>;
22
+ }>;
3
23
  } & import("@endo/eventual-send").RemotableBrand<{}, {
4
- createInstance: (callbacks: any) => ProtocolHandler & import("./types.js").BridgeHandler;
24
+ createHandlers: (callbacks: any) => {
25
+ protocolHandler: ProtocolHandler;
26
+ bridgeHandler: import("./types.js").BridgeHandler;
27
+ } | {
28
+ protocolHandler: import("@endo/exo/src/exo-makers.js").Guarded<{
29
+ onCreate(impl: any, _protocolHandler: any): Promise<void>;
30
+ onInstantiate(): Promise<string>;
31
+ generatePortID(_localAddr: any, _protocolHandler: any): Promise<string>;
32
+ onBind(port: any, localAddr: any, _protocolHandler: any): Promise<any>;
33
+ onConnect(port: any, localAddr: any, remoteAddr: any, _chandler: any, _protocolHandler: any): Promise<import("@agoric/vow").Vow<any>>;
34
+ onListen(_port: any, localAddr: any, _listenHandler: any): Promise<void>;
35
+ onListenRemove(_port: any, localAddr: any, _listenHandler: any): Promise<void>;
36
+ onRevoke(_port: any, localAddr: any, _protocolHandler: any): Promise<void>;
37
+ }>;
38
+ bridgeHandler: import("@endo/exo/src/exo-makers.js").Guarded<{
39
+ fromBridge(obj: any): Promise<void>;
40
+ }>;
41
+ };
42
+ makeCallbacks: (dibcBridgeManager: import("./types.js").ScopedBridgeManager) => import("@endo/exo/src/exo-makers.js").Guarded<{
43
+ downcall(method: any, obj: any): Promise<any>;
44
+ }>;
5
45
  }>;
6
46
  //# sourceMappingURL=vat-ibc.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vat-ibc.d.ts","sourceRoot":"","sources":["vat-ibc.js"],"names":[],"mappings":"AAGA;;;;GAUC"}
1
+ {"version":3,"file":"vat-ibc.d.ts","sourceRoot":"","sources":["vat-ibc.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmBC"}
package/src/vat-ibc.js CHANGED
@@ -1,14 +1,25 @@
1
- import { E, Far } from '@endo/far';
2
- import { makeIBCProtocolHandler } from './ibc.js';
3
-
4
- export function buildRootObject() {
5
- function createInstance(callbacks) {
6
- const ibcHandler = makeIBCProtocolHandler(E, (method, params) =>
7
- E(callbacks).downcall(method, params),
8
- );
1
+ import { Far } from '@endo/far';
2
+ import { makeDurableZone } from '@agoric/zone/durable.js';
3
+ import { prepareVowTools } from '@agoric/vat-data/vow.js';
4
+ import { prepareCallbacks, prepareIBCProtocol } from './ibc.js';
5
+
6
+ export function buildRootObject(_vatPowers, _args, baggage) {
7
+ const zone = makeDurableZone(baggage);
8
+ const powers = prepareVowTools(zone.subZone('vow'));
9
+ const makeIBCProtocolHandler = prepareIBCProtocol(
10
+ zone.subZone('IBC'),
11
+ powers,
12
+ );
13
+
14
+ const makeCallbacks = prepareCallbacks(zone);
15
+
16
+ function createHandlers(callbacks) {
17
+ const ibcHandler = makeIBCProtocolHandler(callbacks);
9
18
  return harden(ibcHandler);
10
19
  }
20
+
11
21
  return Far('root', {
12
- createInstance,
22
+ createHandlers,
23
+ makeCallbacks,
13
24
  });
14
25
  }