@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.
- package/package.json +24 -24
- package/src/core/chain-behaviors.d.ts.map +1 -1
- package/src/core/chain-behaviors.js +1 -7
- package/src/core/client-behaviors.d.ts +1 -0
- package/src/core/client-behaviors.d.ts.map +1 -1
- package/src/core/client-behaviors.js +1 -0
- package/src/core/startWalletFactory.d.ts +4 -4
- package/src/core/types-ambient.d.ts +1 -0
- package/src/core/utils.d.ts +2 -2
- package/src/core/utils.d.ts.map +1 -1
- package/src/core/utils.js +13 -13
- package/src/ibc.d.ts +63 -25
- package/src/ibc.d.ts.map +1 -1
- package/src/ibc.js +671 -457
- package/src/localchain.d.ts +22 -0
- package/src/localchain.d.ts.map +1 -0
- package/src/localchain.js +106 -0
- package/src/proposals/localchain-proposal.d.ts +405 -0
- package/src/proposals/localchain-proposal.d.ts.map +1 -0
- package/src/proposals/localchain-proposal.js +114 -0
- package/src/proposals/localchain-test.d.ts +25 -0
- package/src/proposals/localchain-test.d.ts.map +1 -0
- package/src/proposals/localchain-test.js +81 -0
- package/src/proposals/network-proposal.d.ts +42 -1
- package/src/proposals/network-proposal.d.ts.map +1 -1
- package/src/proposals/network-proposal.js +58 -42
- package/src/proposals/probeZcfBundle.d.ts +26 -0
- package/src/proposals/probeZcfBundle.d.ts.map +1 -0
- package/src/proposals/probeZcfBundle.js +72 -0
- package/src/proposals/restart-vats-proposal.d.ts +2 -0
- package/src/proposals/restart-vats-proposal.d.ts.map +1 -1
- package/src/proposals/restart-vats-proposal.js +13 -1
- package/src/proposals/zcf-proposal.d.ts.map +1 -1
- package/src/proposals/zcf-proposal.js +1 -0
- package/src/vat-bridge.d.ts +16 -2
- package/src/vat-bridge.d.ts.map +1 -1
- package/src/vat-ibc.d.ts +43 -3
- package/src/vat-ibc.d.ts.map +1 -1
- package/src/vat-ibc.js +20 -9
- package/src/vat-localchain.d.ts +33 -0
- package/src/vat-localchain.d.ts.map +1 -0
- package/src/vat-localchain.js +24 -0
- package/src/vat-network.d.ts +67 -1
- package/src/vat-network.d.ts.map +1 -1
- package/src/vat-network.js +39 -3
- package/tools/boot-test-utils.d.ts +8 -2
- package/tools/boot-test-utils.d.ts.map +1 -1
- 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":"
|
|
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
|
-
|
|
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
|
-
|
|
5
|
-
|
|
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
|
-
|
|
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
|
|
29
|
-
|
|
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
|
-
.
|
|
40
|
-
.then(
|
|
32
|
+
.createHandlers(callbacks)
|
|
33
|
+
.then(({ protocolHandler, bridgeHandler }) =>
|
|
41
34
|
E(dibcBridgeManager)
|
|
42
|
-
.initHandler(
|
|
35
|
+
.initHandler(bridgeHandler)
|
|
43
36
|
.then(() =>
|
|
44
37
|
E(vats.network).registerProtocolHandler(
|
|
45
38
|
['/ibc-port', '/ibc-hop'],
|
|
46
|
-
|
|
39
|
+
protocolHandler,
|
|
47
40
|
),
|
|
48
41
|
),
|
|
49
42
|
),
|
|
50
43
|
);
|
|
51
44
|
} else {
|
|
52
|
-
const loHandler = makeLoopbackProtocolHandler(
|
|
53
|
-
|
|
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":"
|
|
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":"
|
|
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"}
|
package/src/vat-bridge.d.ts
CHANGED
|
@@ -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<
|
|
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<
|
|
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
|
package/src/vat-bridge.d.ts.map
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
package/src/vat-ibc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vat-ibc.d.ts","sourceRoot":"","sources":["vat-ibc.js"],"names":[],"mappings":"
|
|
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 {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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
|
-
|
|
22
|
+
createHandlers,
|
|
23
|
+
makeCallbacks,
|
|
13
24
|
});
|
|
14
25
|
}
|