@agoric/vats 0.15.1 → 0.15.2-calypso-dev-84eb287.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 (208) hide show
  1. package/README.md +3 -0
  2. package/index.d.ts +6 -0
  3. package/index.d.ts.map +1 -0
  4. package/index.js +9 -0
  5. package/package.json +43 -48
  6. package/scripts/build-bundles.js +19 -0
  7. package/src/bridge-target.d.ts +193 -0
  8. package/src/bridge-target.d.ts.map +1 -0
  9. package/src/bridge-target.js +316 -0
  10. package/src/bridge.d.ts +14 -4
  11. package/src/bridge.d.ts.map +1 -1
  12. package/src/bridge.js +45 -16
  13. package/src/centralSupply.d.ts +3 -3
  14. package/src/centralSupply.d.ts.map +1 -1
  15. package/src/centralSupply.js +3 -5
  16. package/src/core/README.md +1 -1
  17. package/src/core/basic-behaviors.d.ts +24 -39
  18. package/src/core/basic-behaviors.d.ts.map +1 -1
  19. package/src/core/basic-behaviors.js +63 -63
  20. package/src/core/boot-chain.d.ts +178 -44
  21. package/src/core/boot-chain.d.ts.map +1 -1
  22. package/src/core/boot-chain.js +5 -5
  23. package/src/core/boot-sim.d.ts +5 -43
  24. package/src/core/boot-sim.d.ts.map +1 -1
  25. package/src/core/boot-sim.js +3 -4
  26. package/src/core/boot-solo.d.ts +5 -43
  27. package/src/core/boot-solo.d.ts.map +1 -1
  28. package/src/core/boot-solo.js +4 -5
  29. package/src/core/chain-behaviors.d.ts +10 -26
  30. package/src/core/chain-behaviors.d.ts.map +1 -1
  31. package/src/core/chain-behaviors.js +38 -42
  32. package/src/core/client-behaviors.d.ts +2 -1
  33. package/src/core/client-behaviors.d.ts.map +1 -1
  34. package/src/core/client-behaviors.js +6 -5
  35. package/src/core/core-eval-env.d.ts +40 -0
  36. package/src/core/demoIssuers.d.ts +24 -26
  37. package/src/core/demoIssuers.d.ts.map +1 -1
  38. package/src/core/demoIssuers.js +37 -37
  39. package/src/core/lib-boot.d.ts +17 -53
  40. package/src/core/lib-boot.d.ts.map +1 -1
  41. package/src/core/lib-boot.js +52 -60
  42. package/src/core/promise-space.d.ts +4 -7
  43. package/src/core/promise-space.d.ts.map +1 -1
  44. package/src/core/promise-space.js +15 -16
  45. package/src/core/sim-behaviors.d.ts +3 -3
  46. package/src/core/sim-behaviors.d.ts.map +1 -1
  47. package/src/core/sim-behaviors.js +1 -1
  48. package/src/core/startWalletFactory.d.ts +23 -27
  49. package/src/core/startWalletFactory.d.ts.map +1 -1
  50. package/src/core/startWalletFactory.js +32 -18
  51. package/src/core/types-ambient.d.ts +538 -0
  52. package/src/core/types-ambient.js +1 -0
  53. package/src/core/utils.d.ts +47 -92
  54. package/src/core/utils.d.ts.map +1 -1
  55. package/src/core/utils.js +58 -50
  56. package/src/crc.d.ts +2 -6
  57. package/src/crc.d.ts.map +1 -1
  58. package/src/crc.js +5 -16
  59. package/src/ibc.d.ts +30 -35
  60. package/src/ibc.d.ts.map +1 -1
  61. package/src/ibc.js +740 -491
  62. package/src/lib-board.d.ts +49 -121
  63. package/src/lib-board.d.ts.map +1 -1
  64. package/src/lib-board.js +49 -50
  65. package/src/localchain.d.ts +195 -0
  66. package/src/localchain.d.ts.map +1 -0
  67. package/src/localchain.js +324 -0
  68. package/src/mintHolder.d.ts +6 -4
  69. package/src/mintHolder.d.ts.map +1 -1
  70. package/src/mintHolder.js +19 -21
  71. package/src/nameHub.d.ts +27 -5
  72. package/src/nameHub.d.ts.map +1 -1
  73. package/src/nameHub.js +33 -26
  74. package/src/priceAuthorityRegistry.d.ts +21 -0
  75. package/src/priceAuthorityRegistry.d.ts.map +1 -0
  76. package/src/priceAuthorityRegistry.js +220 -0
  77. package/src/proposals/kread-proposal.d.ts +15 -0
  78. package/src/proposals/kread-proposal.d.ts.map +1 -0
  79. package/src/proposals/kread-proposal.js +24 -0
  80. package/src/proposals/localchain-proposal.d.ts +62 -0
  81. package/src/proposals/localchain-proposal.d.ts.map +1 -0
  82. package/src/proposals/localchain-proposal.js +128 -0
  83. package/src/proposals/localchain-test.d.ts +25 -0
  84. package/src/proposals/localchain-test.d.ts.map +1 -0
  85. package/src/proposals/localchain-test.js +89 -0
  86. package/src/proposals/namesByAddress-fix-proposal.d.ts +22 -0
  87. package/src/proposals/namesByAddress-fix-proposal.d.ts.map +1 -0
  88. package/src/proposals/namesByAddress-fix-proposal.js +55 -0
  89. package/src/proposals/network-proposal.d.ts +23 -8
  90. package/src/proposals/network-proposal.d.ts.map +1 -1
  91. package/src/proposals/network-proposal.js +90 -65
  92. package/src/proposals/probeZcfBundle.d.ts +26 -0
  93. package/src/proposals/probeZcfBundle.d.ts.map +1 -0
  94. package/src/proposals/probeZcfBundle.js +72 -0
  95. package/src/proposals/restart-vats-proposal.d.ts +4 -2
  96. package/src/proposals/restart-vats-proposal.d.ts.map +1 -1
  97. package/src/proposals/restart-vats-proposal.js +20 -8
  98. package/src/proposals/transfer-proposal.d.ts +37 -0
  99. package/src/proposals/transfer-proposal.d.ts.map +1 -0
  100. package/src/proposals/transfer-proposal.js +115 -0
  101. package/src/proposals/upgrade-bank-proposal.d.ts +27 -0
  102. package/src/proposals/upgrade-bank-proposal.d.ts.map +1 -0
  103. package/src/proposals/upgrade-bank-proposal.js +42 -0
  104. package/src/proposals/upgrade-provisionPool-proposal.d.ts +27 -0
  105. package/src/proposals/upgrade-provisionPool-proposal.d.ts.map +1 -0
  106. package/src/proposals/upgrade-provisionPool-proposal.js +67 -0
  107. package/src/proposals/upgrade-zoe-proposal.d.ts +27 -0
  108. package/src/proposals/upgrade-zoe-proposal.d.ts.map +1 -0
  109. package/src/proposals/upgrade-zoe-proposal.js +42 -0
  110. package/src/proposals/vtransfer-echoer.d.ts +24 -0
  111. package/src/proposals/vtransfer-echoer.d.ts.map +1 -0
  112. package/src/proposals/vtransfer-echoer.js +42 -0
  113. package/src/proposals/zcf-only-proposal.d.ts +33 -0
  114. package/src/proposals/zcf-only-proposal.d.ts.map +1 -0
  115. package/src/proposals/zcf-only-proposal.js +36 -0
  116. package/src/proposals/zcf-proposal.d.ts +30 -0
  117. package/src/proposals/zcf-proposal.d.ts.map +1 -0
  118. package/src/proposals/zcf-proposal.js +50 -0
  119. package/src/repl.d.ts +3 -3
  120. package/src/repl.d.ts.map +1 -1
  121. package/src/repl.js +11 -5
  122. package/src/transfer.d.ts +111 -0
  123. package/src/transfer.d.ts.map +1 -0
  124. package/src/transfer.js +260 -0
  125. package/src/types.d.ts +237 -105
  126. package/src/types.js +1 -97
  127. package/src/vat-agoricNames.d.ts +4 -4
  128. package/src/vat-agoricNames.d.ts.map +1 -1
  129. package/src/vat-agoricNames.js +2 -4
  130. package/src/vat-bank.d.ts +217 -149
  131. package/src/vat-bank.d.ts.map +1 -1
  132. package/src/vat-bank.js +96 -68
  133. package/src/vat-board.d.ts +24 -24
  134. package/src/vat-board.d.ts.map +1 -1
  135. package/src/vat-board.js +0 -1
  136. package/src/vat-bridge.d.ts +9 -23
  137. package/src/vat-bridge.d.ts.map +1 -1
  138. package/src/vat-bridge.js +1 -2
  139. package/src/vat-ibc.d.ts +16 -4
  140. package/src/vat-ibc.d.ts.map +1 -1
  141. package/src/vat-ibc.js +20 -9
  142. package/src/vat-localchain.d.ts +37 -0
  143. package/src/vat-localchain.d.ts.map +1 -0
  144. package/src/vat-localchain.js +29 -0
  145. package/src/vat-mints.d.ts +31 -31
  146. package/src/vat-mints.d.ts.map +1 -1
  147. package/src/vat-mints.js +6 -7
  148. package/src/vat-network.d.ts +69 -1
  149. package/src/vat-network.d.ts.map +1 -1
  150. package/src/vat-network.js +45 -3
  151. package/src/vat-priceAuthority.d.ts +4 -4
  152. package/src/vat-priceAuthority.d.ts.map +1 -1
  153. package/src/vat-priceAuthority.js +1 -1
  154. package/src/vat-provisioning.d.ts +6 -6
  155. package/src/vat-provisioning.d.ts.map +1 -1
  156. package/src/vat-provisioning.js +15 -12
  157. package/src/vat-transfer.d.ts +81 -0
  158. package/src/vat-transfer.d.ts.map +1 -0
  159. package/src/vat-transfer.js +63 -0
  160. package/src/vat-zoe.d.ts +4 -1
  161. package/src/vat-zoe.d.ts.map +1 -1
  162. package/src/vat-zoe.js +10 -2
  163. package/src/virtual-purse.d.ts +46 -21
  164. package/src/virtual-purse.d.ts.map +1 -1
  165. package/src/virtual-purse.js +57 -46
  166. package/src/walletFlags.d.ts +2 -2
  167. package/src/walletFlags.js +1 -2
  168. package/tools/bank-utils.d.ts +20 -0
  169. package/tools/bank-utils.d.ts.map +1 -0
  170. package/tools/bank-utils.js +92 -0
  171. package/tools/board-utils.d.ts +39 -0
  172. package/tools/board-utils.d.ts.map +1 -0
  173. package/tools/board-utils.js +92 -0
  174. package/tools/boot-test-utils.d.ts +88 -0
  175. package/tools/boot-test-utils.d.ts.map +1 -0
  176. package/tools/boot-test-utils.js +157 -0
  177. package/tools/fake-bridge.d.ts +18 -0
  178. package/tools/fake-bridge.d.ts.map +1 -0
  179. package/tools/fake-bridge.js +289 -0
  180. package/tools/ibc-utils.d.ts +29 -0
  181. package/tools/ibc-utils.d.ts.map +1 -0
  182. package/tools/ibc-utils.js +115 -0
  183. package/decentral-core-config.json +0 -66
  184. package/decentral-demo-config.json +0 -155
  185. package/decentral-devnet-config.json +0 -216
  186. package/decentral-itest-vaults-config.json +0 -210
  187. package/decentral-main-vaults-config.json +0 -229
  188. package/decentral-test-vaults-config.json +0 -195
  189. package/demo-proposals.json +0 -5
  190. package/exported.js +0 -1
  191. package/jsconfig.build.json +0 -12
  192. package/jsconfig.json +0 -13
  193. package/src/core/types.d.ts +0 -764
  194. package/src/core/types.d.ts.map +0 -1
  195. package/src/core/types.js +0 -347
  196. package/src/provisionPool.d.ts +0 -164
  197. package/src/provisionPool.d.ts.map +0 -1
  198. package/src/provisionPool.js +0 -113
  199. package/src/provisionPoolKit.d.ts +0 -392
  200. package/src/provisionPoolKit.d.ts.map +0 -1
  201. package/src/provisionPoolKit.js +0 -464
  202. package/src/tokens.d.ts +0 -36
  203. package/src/tokens.d.ts.map +0 -1
  204. package/src/tokens.js +0 -37
  205. package/src/types.d.ts.map +0 -1
  206. package/src/vat-sharing.d.ts +0 -54
  207. package/src/vat-sharing.d.ts.map +0 -1
  208. package/src/vat-sharing.js +0 -14
@@ -0,0 +1,316 @@
1
+ import { E } from '@endo/far';
2
+ import { M } from '@endo/patterns';
3
+
4
+ import { BridgeHandlerI } from './bridge.js';
5
+
6
+ /**
7
+ * @typedef {any} MostlyPureData ideally should be PureData, but that type is
8
+ * too restrictive to work out-of-the-box.
9
+ */
10
+
11
+ const { details: X, Fail } = assert;
12
+
13
+ /**
14
+ * @typedef {object} TargetApp an object representing the app that receives
15
+ * upcalls from the low-level TargetHost on the other side of a bridge
16
+ * @property {(obj: MostlyPureData) => Promise<MostlyPureData>} receiveUpcall
17
+ * receive data from the TargetHost, and return a data result
18
+ */
19
+ // TODO unwrap type https://github.com/Agoric/agoric-sdk/issues/9163
20
+ export const TargetAppI = M.interface('TargetApp', {
21
+ receiveUpcall: M.callWhen(M.any()).returns(M.any()),
22
+ });
23
+
24
+ /**
25
+ * @typedef {object} TargetHost an object representing the host that receives
26
+ * downcalls from the high-level TargetApp over a bridge
27
+ * @property {(obj: MostlyPureData) => Promise<MostlyPureData>} sendDowncall
28
+ * send data to the TargetHost, which returns a data result
29
+ */
30
+ // TODO unwrap type https://github.com/Agoric/agoric-sdk/issues/9163
31
+ export const TargetHostI = M.interface('TargetHost', {
32
+ sendDowncall: M.callWhen(M.any()).returns(M.any()),
33
+ });
34
+
35
+ /**
36
+ * @typedef {object} AppTransformer an object for replacing a TargetApp,
37
+ * generally with a wrapper that intercepts its inputs and/or results to
38
+ * ensure conformance with a protocol and/or interface (e.g., an active tap
39
+ * can encode results of the wrapped TargetApp into an acknowledgement
40
+ * message)
41
+ * @property {(
42
+ * app: ERef<TargetApp>,
43
+ * targetHost: ERef<TargetHost>,
44
+ * ...args: unknown[]
45
+ * ) => ERef<TargetApp>} wrapApp
46
+ */
47
+ // TODO unwrap type https://github.com/Agoric/agoric-sdk/issues/9163
48
+ export const AppTransformerI = M.interface('AppTransformer', {
49
+ wrapApp: M.callWhen(
50
+ M.await(M.remotable('TargetAppI')),
51
+ M.await(M.remotable('TargetHostI')),
52
+ )
53
+ .rest(M.any())
54
+ .returns(M.remotable('TargetAppI')),
55
+ });
56
+
57
+ /**
58
+ * @typedef {object} TargetRegistration is an ExoClass of its own, and each
59
+ * instance is an attenuation of a BridgeTargetKit `targetRegistry` facet that
60
+ * has access to internal state thereof but has been scoped down to a single
61
+ * target.
62
+ * @property {() => Promise<void>} revoke performs unregistration (and sends the
63
+ * corresponding "BRIDGE_TARGET_UNREGISTER" message to the targetHost).
64
+ * @property {(targetApp: ERef<TargetApp>) => Promise<void>} updateTargetApp
65
+ * replaces the app associated with the target (but with no corresponding
66
+ * message).
67
+ */
68
+ // TODO unwrap type https://github.com/Agoric/agoric-sdk/issues/9163
69
+ export const TargetRegistrationI = M.interface('TargetRegistration', {
70
+ updateTargetApp: M.callWhen(M.await(M.remotable('TargetAppI'))).returns(),
71
+ revoke: M.callWhen().returns(),
72
+ });
73
+
74
+ /**
75
+ * @typedef {object} TargetRegistry
76
+ * @property {(
77
+ * target: string,
78
+ * targetApp: ERef<TargetApp>,
79
+ * args?: unknown[],
80
+ * ) => Promise<TargetRegistration>} register
81
+ * @property {(
82
+ * target: string,
83
+ * targetApp: ERef<TargetApp>,
84
+ * args?: unknown[],
85
+ * ) => Promise<void>} reregister
86
+ * @property {(target: string) => Promise<void>} unregister
87
+ */
88
+ // TODO unwrap type https://github.com/Agoric/agoric-sdk/issues/9163
89
+ const TargetRegistryI = M.interface('TargetRegistry', {
90
+ register: M.callWhen(M.string(), M.await(M.remotable('TargetAppI')))
91
+ .optional(M.array())
92
+ .returns(M.remotable('TargetRegistration')),
93
+ reregister: M.callWhen(M.string(), M.await(M.remotable('TargetAppI')))
94
+ .optional(M.array())
95
+ .returns(),
96
+ unregister: M.callWhen(M.string()).returns(),
97
+ });
98
+
99
+ /** @param {import('@agoric/base-zone').Zone} zone */
100
+ export const prepareTargetRegistration = zone =>
101
+ zone.exoClass(
102
+ 'TargetRegistration',
103
+ TargetRegistrationI,
104
+ /**
105
+ * @param {string} target
106
+ * @param {TargetRegistry} registry
107
+ * @param {unknown[] | null} args
108
+ */
109
+ (target, registry, args) => ({
110
+ target,
111
+ /** @type {TargetRegistry | null} */
112
+ registry,
113
+ args,
114
+ }),
115
+ {
116
+ /**
117
+ * Atomically point the registration at a different app.
118
+ *
119
+ * @param {TargetApp} app new app to handle messages for the target
120
+ */
121
+ async updateTargetApp(app) {
122
+ const { target, registry, args } = this.state;
123
+ if (!registry) {
124
+ throw Fail`Registration for ${target} is already revoked`;
125
+ }
126
+ return E(registry).reregister(
127
+ target,
128
+ app,
129
+ /** @type {unknown[]} */ (args),
130
+ );
131
+ },
132
+ /** Atomically delete the registration. */
133
+ async revoke() {
134
+ const { target, registry } = this.state;
135
+ if (!registry) {
136
+ throw Fail`Registration for ${target} is already revoked`;
137
+ }
138
+ this.state.registry = null;
139
+ this.state.args = null;
140
+ return E(registry).unregister(target);
141
+ },
142
+ },
143
+ );
144
+
145
+ /**
146
+ * A BridgeTargetKit is associated with a ScopedBridgeManager (essentially a
147
+ * specific named channel on a bridge, cf. {@link ./bridge.js}) and a particular
148
+ * inbound event type and an optional app transformer. It consists of three
149
+ * facets:
150
+ *
151
+ * - `targetHost` has a `downcall` method for sending outbound messages via the
152
+ * bridge to the VM host.
153
+ * - `targetRegistry` has `register`, `reregister` and `unregister` methods to
154
+ * register/reregister/unregister an "app" (or rather its transformation) with
155
+ * a "target" corresponding to an address on the targetHost. Each target may
156
+ * be associated with at most one app at any given time, and registration and
157
+ * unregistration each send a message to the targetHost of the state change
158
+ * (of type "BRIDGE_TARGET_REGISTER" and "BRIDGE_TARGET_UNREGISTER",
159
+ * respectively). `reregister` is a method that atomically redirects the
160
+ * target to a new (transformed) app.
161
+ * - `bridgeHandler` has a `fromBridge` method for receiving from the
162
+ * ScopedBridgeManager inbound messages of the associated event type and
163
+ * dispatching them to the app registered for their target.
164
+ *
165
+ * @param {import('@agoric/base-zone').Zone} zone
166
+ * @param {ReturnType<typeof prepareTargetRegistration>} makeTargetRegistration
167
+ */
168
+ export const prepareBridgeTargetKit = (zone, makeTargetRegistration) =>
169
+ zone.exoClassKit(
170
+ 'BridgeTargetKit',
171
+ {
172
+ bridgeHandler: BridgeHandlerI,
173
+ targetHost: TargetHostI,
174
+ targetRegistry: TargetRegistryI,
175
+ },
176
+ /**
177
+ * @template {import('@agoric/internal').BridgeIdValue} T
178
+ * @param {import('./types').ScopedBridgeManager<T>} manager
179
+ * @param {string} inboundEventType
180
+ * @param {AppTransformer} [appTransformer]
181
+ */
182
+ (manager, inboundEventType, appTransformer = undefined) => ({
183
+ manager,
184
+ inboundEventType,
185
+ appTransformer,
186
+ /** @type {MapStore<string, ERef<TargetApp>>} */
187
+ targetToApp: zone.detached().mapStore('targetToApp'),
188
+ }),
189
+ {
190
+ bridgeHandler: {
191
+ fromBridge(obj) {
192
+ const { inboundEventType, targetToApp } = this.state;
193
+ const { type, target } = obj;
194
+
195
+ type === inboundEventType ||
196
+ Fail`Invalid inbound event type ${type}; expected ${inboundEventType}`;
197
+
198
+ target || Fail`Missing target property in ${obj}`;
199
+
200
+ const app = targetToApp.get(target);
201
+ return E(app).receiveUpcall(obj);
202
+ },
203
+ },
204
+ targetHost: {
205
+ async sendDowncall(obj) {
206
+ const { manager } = this.state;
207
+ return E(manager).toBridge(obj);
208
+ },
209
+ },
210
+ targetRegistry: {
211
+ /**
212
+ * Register an app to handle messages for a target.
213
+ *
214
+ * @param {string} target
215
+ * @param {TargetApp} app
216
+ * @param {unknown[]} [args]
217
+ * @returns {Promise<TargetRegistration>} power to set or delete the
218
+ * registration
219
+ */
220
+ async register(target, app, args = []) {
221
+ const { targetHost } = this.facets;
222
+ const { appTransformer, targetToApp } = this.state;
223
+
224
+ // Because wrapping an app is async, we verify absence of an existing
225
+ // registration twice (once to avoid the unnecessary invocation and
226
+ // once inside `init`), but attempt to throw similar errors in both
227
+ // cases.
228
+ !targetToApp.has(target) || Fail`Target ${target} already registered`;
229
+ const wrappedApp = await (appTransformer
230
+ ? E(appTransformer).wrapApp(app, targetHost, ...args)
231
+ : app);
232
+ try {
233
+ targetToApp.init(target, wrappedApp);
234
+ } catch (cause) {
235
+ throw assert.error(
236
+ X`Target ${target} already registered`,
237
+ undefined,
238
+ { cause },
239
+ );
240
+ }
241
+
242
+ await E(targetHost).sendDowncall({
243
+ type: 'BRIDGE_TARGET_REGISTER',
244
+ target,
245
+ });
246
+
247
+ return makeTargetRegistration(
248
+ target,
249
+ this.facets.targetRegistry,
250
+ args,
251
+ );
252
+ },
253
+ /**
254
+ * Update the app that handles messages for a target.
255
+ *
256
+ * @param {string} target
257
+ * @param {TargetApp} app
258
+ * @param {unknown[]} [args]
259
+ * @returns {Promise<void>}
260
+ */
261
+ async reregister(target, app, args = []) {
262
+ const { targetHost } = this.facets;
263
+ const { appTransformer, targetToApp } = this.state;
264
+
265
+ // Because wrapping an app is async, we verify absence of an existing
266
+ // registration twice (once to avoid the unnecessary invocation and
267
+ // once inside `set`), but attempt to throw similar errors in both
268
+ // cases.
269
+ targetToApp.has(target) ||
270
+ Fail`Target ${target} is already unregistered`;
271
+ const wrappedApp = await (appTransformer
272
+ ? E(appTransformer).wrapApp(app, targetHost, ...args)
273
+ : app);
274
+ try {
275
+ targetToApp.set(target, wrappedApp);
276
+ } catch (cause) {
277
+ throw assert.error(
278
+ X`Target ${target} is already unregistered`,
279
+ undefined,
280
+ { cause },
281
+ );
282
+ }
283
+ },
284
+ /**
285
+ * Unregister the target, bypassing the attenuated `TargetRegistration`
286
+ * API.
287
+ *
288
+ * @param {string} target
289
+ * @returns {Promise<void>}
290
+ */
291
+ async unregister(target) {
292
+ const { targetHost } = this.facets;
293
+ const { targetToApp } = this.state;
294
+ targetToApp.has(target) || Fail`Target ${target} is already deleted`;
295
+ targetToApp.delete(target);
296
+ await E(targetHost).sendDowncall({
297
+ type: 'BRIDGE_TARGET_UNREGISTER',
298
+ target,
299
+ });
300
+ },
301
+ },
302
+ },
303
+ );
304
+ harden(prepareBridgeTargetKit);
305
+
306
+ /** @param {import('@agoric/base-zone').Zone} zone */
307
+ export const prepareBridgeTargetModule = zone => {
308
+ const makeTargetRegistration = prepareTargetRegistration(zone);
309
+ const makeBridgeTargetKit = prepareBridgeTargetKit(
310
+ zone,
311
+ makeTargetRegistration,
312
+ );
313
+
314
+ return harden({ makeBridgeTargetKit });
315
+ };
316
+ harden(prepareBridgeTargetModule);
package/src/bridge.d.ts CHANGED
@@ -1,5 +1,15 @@
1
- export const BridgeHandlerI: import("@endo/patterns").InterfaceGuard;
2
- export const BridgeScopedManagerI: import("@endo/patterns").InterfaceGuard;
3
- export const BridgeManagerI: import("@endo/patterns").InterfaceGuard;
4
- export function prepareBridgeManager(zone: import('@agoric/zone').Zone, D: DProxy): (bridgeDevice: BridgeDevice) => import('./types.js').BridgeManager;
1
+ export function makeScopedBridge<BridgeId extends import("@agoric/internal").BridgeIdValue>(bridgeManager: ERef<import("./types.js").BridgeManager>, bridgeIdValue: BridgeId, handler?: import("@agoric/internal").Remote<import("./types.js").BridgeHandler, {}> | undefined): Promise<import("./types.js").ScopedBridgeManager<BridgeId>>;
2
+ export const BridgeHandlerI: import("@endo/patterns").InterfaceGuard<{
3
+ fromBridge: import("@endo/patterns").MethodGuard;
4
+ }>;
5
+ export const BridgeScopedManagerI: import("@endo/patterns").InterfaceGuard<{
6
+ fromBridge: import("@endo/patterns").MethodGuard;
7
+ toBridge: import("@endo/patterns").MethodGuard;
8
+ initHandler: import("@endo/patterns").MethodGuard;
9
+ setHandler: import("@endo/patterns").MethodGuard;
10
+ }>;
11
+ export const BridgeManagerI: import("@endo/patterns").InterfaceGuard<{
12
+ register: import("@endo/patterns").MethodGuard;
13
+ }>;
14
+ export function prepareBridgeManager(zone: import("@agoric/zone").Zone, D: DProxy): (bridgeDevice: BridgeDevice) => import("./types.js").BridgeManager;
5
15
  //# sourceMappingURL=bridge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["bridge.js"],"names":[],"mappings":"AASA,qEAEG;AAEH,2EAKG;AAEH,qEAIG;AAmEI,2CAHI,OAAO,cAAc,EAAE,IAAI,KAC3B,MAAM,kBA2EJ,YAAY,KACV,OAAO,YAAY,EAAE,aAAa,CA2BhD"}
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["bridge.js"],"names":[],"mappings":"AAqBO,iCARiD,QAAQ,SAAnD,OAAQ,kBAAkB,EAAE,aAAc,iBAC5C,IAAI,CAAC,OAAO,YAAY,EAAE,aAAa,CAAC,iBACxC,QAAQ,oGAIN,OAAO,CAAC,OAAO,YAAY,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAKrE;AAEH;;GAEG;AAEH;;;;;GAKG;AAEH;;GAIG;AAmEI,2CAHI,OAAO,cAAc,EAAE,IAAI,KAC3B,MAAM,kBAuFJ,YAAY,KACV,OAAO,YAAY,EAAE,aAAa,CA2BhD"}
package/src/bridge.js CHANGED
@@ -1,12 +1,29 @@
1
- // @ts-check
2
-
3
1
  import { M } from '@agoric/store';
4
- import '@agoric/store/exported.js';
5
2
  import { E } from '@endo/far';
6
- import './core/types.js';
7
3
 
8
4
  const { Fail, details: X } = assert;
9
5
 
6
+ /**
7
+ * Helper to type the registered scoped bridge correctly.
8
+ *
9
+ * FIXME: This is needed because `register` is not an async function, so
10
+ * `E(x).register` needs to reconstruct its return value as a Promise, which
11
+ * loses the function's genericity. If `register` was async, we could use its
12
+ * type directly, and it would remain generic.
13
+ *
14
+ * @template {import('@agoric/internal').BridgeIdValue} BridgeId
15
+ * @param {ERef<import('./types.js').BridgeManager>} bridgeManager
16
+ * @param {BridgeId} bridgeIdValue
17
+ * @param {import('@agoric/internal').Remote<
18
+ * import('./types.js').BridgeHandler
19
+ * >} [handler]
20
+ * @returns {Promise<import('./types.js').ScopedBridgeManager<BridgeId>>}
21
+ */
22
+ export const makeScopedBridge = (bridgeManager, bridgeIdValue, handler) =>
23
+ /** @type {Promise<import('./types.js').ScopedBridgeManager<BridgeId>>} */ (
24
+ E(bridgeManager).register(bridgeIdValue, handler)
25
+ );
26
+
10
27
  export const BridgeHandlerI = M.interface('BridgeHandler', {
11
28
  fromBridge: M.call(M.any()).returns(M.promise()),
12
29
  });
@@ -34,17 +51,17 @@ const BridgeManagerIKit = harden({
34
51
  }),
35
52
  });
36
53
 
37
- /**
38
- * @param {import('@agoric/zone').Zone} zone
39
- */
54
+ /** @param {import('@agoric/zone').Zone} zone */
40
55
  const prepareScopedManager = zone => {
41
56
  const makeScopedManager = zone.exoClass(
42
57
  'BridgeScopedManager',
43
58
  BridgeScopedManagerI,
44
59
  /**
45
60
  * @param {string} bridgeId
46
- * @param {{ outbound: (bridgeId: string, obj: unknown) => Promise<any> }} toBridge
47
- * @param {import('./types').BridgeHandler} [inboundHandler]
61
+ * @param {{
62
+ * outbound: (bridgeId: string, obj: unknown) => Promise<any>;
63
+ * }} toBridge
64
+ * @param {import('./types.js').BridgeHandler} [inboundHandler]
48
65
  */
49
66
  (bridgeId, toBridge, inboundHandler) => ({
50
67
  bridgeId,
@@ -93,14 +110,16 @@ export const prepareBridgeManager = (zone, D) => {
93
110
  const makeScopedManager = prepareScopedManager(zone);
94
111
 
95
112
  /**
96
- * Create a bridge manager for multiplexing messages to and from a bridge device
97
- * using string-named channels.
113
+ * Create a bridge manager for multiplexing messages to and from a bridge
114
+ * device using string-named channels.
98
115
  *
99
116
  * @param {BridgeDevice} bridgeDevice The bridge to manage
100
117
  * @returns {{
101
- * manager: import('./types.js').BridgeManager,
102
- * privateInbounder: { inbound(srcID: string, obj: unknown): void },
103
- * privateOutbounder: { outbound(dstID: string, obj: unknown): Promise<any> },
118
+ * manager: import('./types.js').BridgeManager;
119
+ * privateInbounder: { inbound(srcID: string, obj: unknown): void };
120
+ * privateOutbounder: {
121
+ * outbound(dstID: string, obj: unknown): Promise<any>;
122
+ * };
104
123
  * }}
105
124
  */
106
125
  const makeBridgeManagerKit = zone.exoClassKit(
@@ -108,7 +127,12 @@ export const prepareBridgeManager = (zone, D) => {
108
127
  BridgeManagerIKit,
109
128
  /** @param {BridgeDevice} bridgeDevice */
110
129
  bridgeDevice => ({
111
- /** @type {MapStore<string, ReturnType<ReturnType<typeof prepareScopedManager>>>} */
130
+ /**
131
+ * @type {MapStore<
132
+ * string,
133
+ * ReturnType<ReturnType<typeof prepareScopedManager>>
134
+ * >}
135
+ */
112
136
  scopedManagers: zone.detached().mapStore('scopedManagers'),
113
137
  bridgeDevice,
114
138
  }),
@@ -156,7 +180,12 @@ export const prepareBridgeManager = (zone, D) => {
156
180
  },
157
181
  );
158
182
 
159
- /** @type {MapStore<BridgeDevice, ReturnType<typeof makeBridgeManagerKit>>} */
183
+ /**
184
+ * @type {MapStore<
185
+ * BridgeDevice,
186
+ * ReturnType<typeof makeBridgeManagerKit>
187
+ * >}
188
+ */
160
189
  const bridgeToManagerKit = zone.mapStore('bridgeToManagerKit');
161
190
 
162
191
  /**
@@ -4,9 +4,9 @@ export function start(zcf: ZCF<{
4
4
  feeMintAccess: FeeMintAccess;
5
5
  }): Promise<{
6
6
  creatorFacet: {
7
- getBootstrapPayment: () => Payment<any>;
8
- } & import("@endo/eventual-send").RemotableBrand<{}, {
9
- getBootstrapPayment: () => Payment<any>;
7
+ getBootstrapPayment: () => globalThis.Payment<any>;
8
+ } & import("@endo/pass-style").RemotableObject<`Alleged: ${string}`> & import("@endo/eventual-send").RemotableBrand<{}, {
9
+ getBootstrapPayment: () => globalThis.Payment<any>;
10
10
  }>;
11
11
  }>;
12
12
  export type CentralSupplyContract = ContractOf<typeof start>;
@@ -1 +1 @@
1
- {"version":3,"file":"centralSupply.d.ts","sourceRoot":"","sources":["centralSupply.js"],"names":[],"mappings":"AAeO;2BALoB,MAAM;;IAGK,aAAa,EAAxC,aAAa;;;;;;;GA0BvB;oCAGa,WAAW,YAAY,CAAC"}
1
+ {"version":3,"file":"centralSupply.d.ts","sourceRoot":"","sources":["centralSupply.js"],"names":[],"mappings":"AAaO,2BANI,GAAG,CAAC;IACd,qBAAyB,EAAE,MAAM,CAAC;CAC/B,CAAC,qBAEF;IAAmC,aAAa,EAAxC,aAAa;CACvB;;;;;;GAyBA;oCAGa,UAAU,CAAC,OAAO,KAAK,CAAC"}
@@ -1,14 +1,12 @@
1
- // @ts-check
2
-
3
1
  import { AmountMath } from '@agoric/ertp';
4
2
  import { E, Far } from '@endo/far';
5
3
 
6
4
  /**
7
- * The sole purpose of this contract is to mint the initial
8
- * supply of the central currency, RUN.
5
+ * The sole purpose of this contract is to mint the initial supply of the
6
+ * central currency, RUN.
9
7
  *
10
8
  * @param {ZCF<{
11
- * bootstrapPaymentValue: bigint,
9
+ * bootstrapPaymentValue: bigint;
12
10
  * }>} zcf
13
11
  * @param {object} privateArgs
14
12
  * @param {FeeMintAccess} privateArgs.feeMintAccess
@@ -1,7 +1,7 @@
1
1
  # Core vats and supports
2
2
 
3
3
  This directory contains modules that build vats that boot other vats. If that's all it did, it could terminate but it also has persistent responsibilities:
4
- - hold the `CORE_EVAL` bridge handler
4
+ - hold the `CORE_EVAL` bridge handler (see `bridgeCoreEval` in [chain-behaviors.js](./chain-behaviors.js)
5
5
  - hold a PrioritySenderManager handed out to some contracts
6
6
 
7
7
  Bootstrap vats must not hold precious state (see https://github.com/Agoric/agoric-sdk/issues/4548). These state aren't _precious_ because they can be reconstructed.
@@ -1,31 +1,24 @@
1
- export function makeVatsFromBundles({ vats, devices, consume: { vatStore }, produce: { vatAdminSvc, loadVat, loadCriticalVat }, }: BootstrapPowers & {}): Promise<void>;
2
- export function produceDiagnostics({ produce }: Pick<ChainBootstrapSpace, 'produce'>): Promise<void>;
3
- export function produceStartUpgradable({ zone, consume: { diagnostics, zoe }, produce, }: BootstrapSpace & {
4
- zone: import('@agoric/zone').Zone;
5
- }): Promise<void>;
6
- export function produceStartGovernedUpgradable({ zone, consume: { chainTimerService, diagnostics, economicCommitteeCreatorFacet, zoe, }, produce, installation: { consume: { contractGovernor }, }, }: BootstrapSpace & {
7
- zone: import('@agoric/zone').Zone;
8
- consume: {
9
- economicCommitteeCreatorFacet: import('@agoric/inter-protocol/src/proposals/econ-behaviors.js').EconomyBootstrapPowers['consume']['economicCommitteeCreatorFacet'];
1
+ export function makeVatsFromBundles({ vats, devices, consume: { vatStore }, produce: { vatAdminSvc, loadVat, loadCriticalVat }, }: BootstrapPowers & {
2
+ produce: {
3
+ loadVat: Producer<VatLoader>;
4
+ loadCriticalVat: Producer<VatLoader>;
10
5
  };
11
6
  }): Promise<void>;
12
- export function buildZoe({ consume: { vatAdminSvc, loadCriticalVat, client }, produce: { zoe, feeMintAccess }, brand: { produce: { Invitation: invitationBrand }, }, issuer: { produce: { Invitation: invitationIssuer }, }, }: BootstrapPowers & {
13
- consume: {
14
- loadCriticalVat: ERef<VatLoader<ZoeVat>>;
15
- };
7
+ export function produceDiagnostics({ produce }: Pick<ChainBootstrapSpace, "produce">): Promise<void>;
8
+ export function produceStartUpgradable({ zone, consume: { diagnostics, zoe }, produce, }: BootstrapSpace & {
9
+ zone: import("@agoric/zone").Zone;
16
10
  }): Promise<void>;
17
- export function startPriceAuthorityRegistry({ consume: { loadCriticalVat, client }, produce, }: BootstrapPowers & {
11
+ export function produceStartGovernedUpgradable({ zone, consume: { chainTimerService, diagnostics, economicCommitteeCreatorFacet, zoe, }, produce, installation: { consume: { contractGovernor }, }, }: BootstrapSpace & {
12
+ zone: import("@agoric/zone").Zone;
18
13
  consume: {
19
- loadCriticalVat: ERef<VatLoader<PriceAuthorityVat>>;
14
+ economicCommitteeCreatorFacet: import("@agoric/inter-protocol/src/proposals/econ-behaviors.js").EconomyBootstrapPowers["consume"]["economicCommitteeCreatorFacet"];
20
15
  };
21
16
  }): Promise<void>;
17
+ export function buildZoe({ consume: { vatAdminSvc, loadCriticalVat, client }, produce: { zoe, feeMintAccess }, brand: { produce: { Invitation: invitationBrand }, }, issuer: { produce: { Invitation: invitationIssuer }, }, }: BootstrapPowers): Promise<void>;
18
+ export function startPriceAuthorityRegistry({ consume: { loadCriticalVat, client }, produce, }: BootstrapPowers): Promise<void>;
22
19
  export function makeOracleBrands({ namedVat: { consume: { agoricNames }, }, oracleBrand: { produce: { USD }, }, }: BootstrapPowers & NamedVatPowers): Promise<void>;
23
20
  export function produceBoard({ consume: { client }, produce: { board: pBoard }, namedVat: { consume: { board: vatBoard }, }, }: BootstrapPowers & NamedVatPowers): Promise<void>;
24
- export function makeBoard({ consume: { loadCriticalVat, client }, produce: { board: { resolve: resolveBoard }, }, }: BootstrapPowers & {
25
- consume: {
26
- loadCriticalVat: ERef<VatLoader<BoardVat>>;
27
- };
28
- }): Promise<void>;
21
+ export function makeBoard({ consume: { loadCriticalVat, client }, produce: { board: { resolve: resolveBoard }, }, }: BootstrapPowers): Promise<void>;
29
22
  export function produceNamesByAddress({ consume: { agoricNames, provisioning: provisioningOptP, client }, produce: { namesByAddress, namesByAddressAdmin }, }: BootstrapPowers): Promise<void>;
30
23
  export function makeAddressNameHubs({ consume: { agoricNames: agoricNamesP, client }, produce, }: BootstrapSpace): Promise<void>;
31
24
  export function makeClientBanks({ consume: { namesByAddressAdmin, client, bankManager, walletFactoryStartResult, }, }: BootstrapSpace): Promise<void>;
@@ -37,30 +30,22 @@ export function mintInitialSupply({ vatParameters: { argv: { bootMsg }, }, consu
37
30
  };
38
31
  };
39
32
  }): Promise<void>;
40
- export function addBankAssets({ consume: { agoricNamesAdmin, initialSupply, bridgeManager: bridgeManagerP, loadCriticalVat, startUpgradable, zoe, }, produce: { bankManager, bldIssuerKit }, installation: { consume: { mintHolder }, }, issuer: { produce: produceIssuer }, brand: { produce: produceBrand }, }: BootstrapSpace & {
41
- consume: {
42
- loadCriticalVat: ERef<VatLoader<BankVat>>;
43
- };
44
- }): Promise<void>;
45
- /** @type {import('./lib-boot').BootstrapManifest} */
46
- export const BASIC_BOOTSTRAP_PERMITS: import('./lib-boot').BootstrapManifest;
47
- /**
48
- * as from createVatByName
49
- */
50
- export type CreateVatResults = import('@agoric/swingset-vat').CreateVatResults;
33
+ export function addBankAssets({ consume: { agoricNamesAdmin, initialSupply, bridgeManager: bridgeManagerP, loadCriticalVat, startUpgradable, zoe, }, produce: { bankManager, bldIssuerKit }, installation: { consume: { mintHolder }, }, issuer: { produce: produceIssuer }, brand: { produce: produceBrand }, }: BootstrapSpace): Promise<void>;
34
+ /** @type {import('./lib-boot.js').BootstrapManifest} */
35
+ export const BASIC_BOOTSTRAP_PERMITS: import("./lib-boot.js").BootstrapManifest;
51
36
  export type VatStore = MapStore<string, CreateVatResults>;
52
- export type ZoeVat = ERef<ReturnType<typeof import("../vat-zoe.js").buildRootObject>>;
53
- export type PriceAuthorityVat = ERef<ReturnType<typeof import("../vat-priceAuthority.js").buildRootObject>>;
54
37
  declare namespace bootMsgEx {
55
- const type: string;
56
- const chainID: string;
57
- const storagePort: number;
58
- const supplyCoins: {
38
+ let type: string;
39
+ let chainID: string;
40
+ let storagePort: number;
41
+ let supplyCoins: {
59
42
  denom: string;
60
43
  amount: string;
61
44
  }[];
62
- const vbankPort: number;
63
- const vibcPort: number;
45
+ let swingsetPort: number;
46
+ let vbankPort: number;
47
+ let vibcPort: number;
64
48
  }
49
+ import type { CreateVatResults } from '@agoric/swingset-vat';
65
50
  export {};
66
51
  //# sourceMappingURL=basic-behaviors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"basic-behaviors.d.ts","sourceRoot":"","sources":["basic-behaviors.js"],"names":[],"mappings":"AA0DO,mIANI,eAAe,GAAG,EACzB,iBA6DH;AAIM,gDADK,KAAK,mBAAmB,EAAE,SAAS,CAAC,iBAW/C;AAGM,0FADK,cAAc,GAAG;IAAE,IAAI,EAAE,OAAO,cAAc,EAAE,IAAI,CAAA;CAAE,iBAiCjE;AAsGM,uMAPI,cAAc,GAAG;IAC3B,IAAQ,EAAE,OAAO,cAAc,EAAE,IAAI,CAAC;IACtC,OAAW,EAAE;QACb,6BAAmC,EAAE,OAAO,wDAAwD,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC,+BAA+B,CAAC,CAAA;KACnK,CAAA;CACF,iBAwDH;AAUM,gOANK,eAAe,GAAG;IAC7B,OAAW,EAAE;QAAE,eAAe,EAAE,KAAK,UAAU,MAAM,CAAC,CAAC,CAAA;KAAE,CAAA;CACtD,iBA2BH;AAUM,gGANI,eAAe,GAAG;IAC5B,OAAW,EAAE;QAAE,eAAe,EAAE,KAAK,UAAU,iBAAiB,CAAC,CAAC,CAAA;KAAC,CAAC;CACjE,iBAkBH;AAQM,mHAFI,eAAe,GAAG,cAAc,iBAe1C;AAMM,gIAFI,eAAe,GAAG,cAAc,iBAY1C;AAUM,qHAJI,eAAe,GAAG;IAC5B,OAAW,EAAE;QAAE,eAAe,EAAE,KAAK,UAAU,QAAQ,CAAC,CAAC,CAAA;KACtD,CAAA;CAAC,iBAWJ;AAeM,+JAFI,eAAe,iBAwBzB;AAQM,kGAFI,cAAc,iBA6BxB;AAIM,uHADK,cAAc,iBAkCzB;AAIM,oIADK,cAAc,iBAiBzB;AASM,0MAJK,eAAe,GAAG;IAC7B,aAAiB,EAAE;QAAE,IAAI,EAAE;YAAE,OAAO,CAAC,EAAE,gBAAgB,CAAA;SAAE,CAAA;KAAC,CAAC;CACxD,iBA+BH;AAUM,kTAJK,cAAc,GAAG;IAC5B,OAAW,EAAE;QAAE,eAAe,EAAE,KAAK,UAAU,OAAO,CAAC,CAAC,CAAA;KAAE,CAAC;CACxD,iBAoFH;AAGD,qDAAqD;AACrD,sCADW,OAAO,YAAY,EAAE,iBAAiB,CA0I/C;;;;+BAzwBW,OAAO,sBAAsB,EAAE,gBAAgB;uBAC/C,SAAS,MAAM,EAAE,gBAAgB,CAAC;qBA+QlC,KAAK,0DAAmD,CAAC;gCAiCzD,KAAK,qEAA8D,CAAC"}
1
+ {"version":3,"file":"basic-behaviors.d.ts","sourceRoot":"","sources":["basic-behaviors.js"],"names":[],"mappings":"AAgEO,mIATI,eAAe,GAAG;IAC5B,OAAW,EAAE;QACb,OAAa,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;QACnC,eAAqB,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;KACtC,CAAC;CACH,iBA4DH;AAIM,gDADK,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,iBAW/C;AAGM,0FADK,cAAc,GAAG;IAAE,IAAI,EAAE,OAAO,cAAc,EAAE,IAAI,CAAA;CAAE,iBAiCjE;AAqGM,uMAPI,cAAc,GAAG;IAC3B,IAAQ,EAAE,OAAO,cAAc,EAAE,IAAI,CAAC;IACtC,OAAW,EAAE;QACb,6BAAmC,EAAE,OAAO,wDAAwD,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC,+BAA+B,CAAC,CAAC;KACpK,CAAC;CACH,iBA6DH;AAMM,gOAFI,eAAe,iBAyBzB;AAMM,gGAFI,eAAe,iBAgBzB;AAQM,mHAFI,eAAe,GAAG,cAAc,iBAe1C;AAIM,gIADK,eAAe,GAAG,cAAc,iBAW3C;AAOM,qHAFI,eAAe,iBAWzB;AAcM,+JAFI,eAAe,iBAwBzB;AAQM,kGAFI,cAAc,iBA6BxB;AAIM,uHADK,cAAc,iBAkCzB;AAIM,oIADK,cAAc,iBAiBzB;AASM,0MAJI,eAAe,GAAG;IAC5B,aAAiB,EAAE;QAAE,IAAI,EAAE;YAAE,OAAO,CAAC,EAAE,OAAO,SAAS,CAAA;SAAE,CAAA;KAAE,CAAC;CACzD,iBAmCH;AAQM,kTAFI,cAAc,iBAsFxB;AAGD,wDAAwD;AACxD,sCADW,OAAO,eAAe,EAAE,iBAAiB,CA0IlD;uBA5wBY,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;;;;;;;;;;;;;sCASb,sBAAsB"}