@agoric/inter-protocol 0.16.2-upgrade-14-dev-0169c7e.0 → 0.16.2-upgrade-16-dev-8879538.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 (175) hide show
  1. package/package.json +41 -34
  2. package/scripts/build-bundles.js +5 -21
  3. package/src/auction/auctionBook.d.ts +84 -0
  4. package/src/auction/auctionBook.d.ts.map +1 -0
  5. package/src/auction/auctionBook.js +135 -103
  6. package/src/auction/auctioneer.d.ts +83 -0
  7. package/src/auction/auctioneer.d.ts.map +1 -0
  8. package/src/auction/auctioneer.js +63 -49
  9. package/src/auction/offerBook.d.ts +45 -0
  10. package/src/auction/offerBook.d.ts.map +1 -0
  11. package/src/auction/offerBook.js +13 -12
  12. package/src/auction/params.d.ts +149 -0
  13. package/src/auction/params.d.ts.map +1 -0
  14. package/src/auction/params.js +10 -9
  15. package/src/auction/scheduleMath.d.ts +5 -0
  16. package/src/auction/scheduleMath.d.ts.map +1 -0
  17. package/src/auction/scheduleMath.js +17 -15
  18. package/src/auction/scheduler.d.ts +49 -0
  19. package/src/auction/scheduler.d.ts.map +1 -0
  20. package/src/auction/scheduler.js +51 -43
  21. package/src/auction/sortedOffers.d.ts +8 -0
  22. package/src/auction/sortedOffers.d.ts.map +1 -0
  23. package/src/auction/sortedOffers.js +9 -7
  24. package/src/auction/util.d.ts +32 -0
  25. package/src/auction/util.d.ts.map +1 -0
  26. package/src/auction/util.js +6 -4
  27. package/src/clientSupport.d.ts +167 -0
  28. package/src/clientSupport.d.ts.map +1 -0
  29. package/src/clientSupport.js +97 -40
  30. package/src/collectFees.d.ts +2 -0
  31. package/src/collectFees.d.ts.map +1 -0
  32. package/src/contractSupport.d.ts +28 -0
  33. package/src/contractSupport.d.ts.map +1 -0
  34. package/src/contractSupport.js +14 -12
  35. package/src/econCommitteeCharter.d.ts +39 -0
  36. package/src/econCommitteeCharter.d.ts.map +1 -0
  37. package/src/econCommitteeCharter.js +21 -20
  38. package/src/feeDistributor.d.ts +224 -0
  39. package/src/feeDistributor.d.ts.map +1 -0
  40. package/src/feeDistributor.js +37 -33
  41. package/src/index.d.ts +2 -0
  42. package/src/index.d.ts.map +1 -0
  43. package/src/index.js +1 -0
  44. package/src/interest-math.d.ts +3 -0
  45. package/src/interest-math.d.ts.map +1 -0
  46. package/src/interest.d.ts +28 -0
  47. package/src/interest.d.ts.map +1 -0
  48. package/src/interest.js +21 -16
  49. package/src/price/README.md +13 -0
  50. package/src/price/fluxAggregatorContract.d.ts +70 -0
  51. package/src/price/fluxAggregatorContract.d.ts.map +1 -0
  52. package/src/price/fluxAggregatorContract.js +62 -55
  53. package/src/price/fluxAggregatorKit.d.ts +103 -0
  54. package/src/price/fluxAggregatorKit.d.ts.map +1 -0
  55. package/src/price/fluxAggregatorKit.js +50 -37
  56. package/src/price/priceOracleKit.d.ts +38 -0
  57. package/src/price/priceOracleKit.d.ts.map +1 -0
  58. package/src/price/priceOracleKit.js +11 -13
  59. package/src/price/roundsManager.d.ts +238 -0
  60. package/src/price/roundsManager.d.ts.map +1 -0
  61. package/src/price/roundsManager.js +77 -82
  62. package/src/proposals/README.md +2 -3
  63. package/src/proposals/add-auction.d.ts +69 -0
  64. package/src/proposals/add-auction.d.ts.map +1 -0
  65. package/src/proposals/add-auction.js +181 -0
  66. package/src/proposals/addAssetToVault.d.ts +160 -0
  67. package/src/proposals/addAssetToVault.d.ts.map +1 -0
  68. package/src/proposals/addAssetToVault.js +172 -38
  69. package/src/proposals/committee-proposal.d.ts +113 -0
  70. package/src/proposals/committee-proposal.d.ts.map +1 -0
  71. package/src/proposals/committee-proposal.js +25 -31
  72. package/src/proposals/core-proposal.d.ts +149 -0
  73. package/src/proposals/core-proposal.d.ts.map +1 -0
  74. package/src/proposals/core-proposal.js +9 -11
  75. package/src/proposals/econ-behaviors.d.ts +1169 -0
  76. package/src/proposals/econ-behaviors.d.ts.map +1 -0
  77. package/src/proposals/econ-behaviors.js +66 -45
  78. package/src/proposals/price-feed-proposal.d.ts +84 -0
  79. package/src/proposals/price-feed-proposal.d.ts.map +1 -0
  80. package/src/proposals/price-feed-proposal.js +108 -51
  81. package/src/proposals/startEconCommittee.d.ts +34 -0
  82. package/src/proposals/startEconCommittee.d.ts.map +1 -0
  83. package/src/proposals/startEconCommittee.js +2 -2
  84. package/src/proposals/startPSM.d.ts +59 -0
  85. package/src/proposals/startPSM.d.ts.map +1 -0
  86. package/src/proposals/startPSM.js +38 -27
  87. package/src/proposals/upgrade-scaledPriceAuthorities.d.ts +24 -0
  88. package/src/proposals/upgrade-scaledPriceAuthorities.d.ts.map +1 -0
  89. package/src/proposals/upgrade-scaledPriceAuthorities.js +78 -0
  90. package/src/proposals/upgrade-vaults.d.ts +35 -0
  91. package/src/proposals/upgrade-vaults.d.ts.map +1 -0
  92. package/src/proposals/upgrade-vaults.js +202 -0
  93. package/src/proposals/utils.d.ts +17 -0
  94. package/src/proposals/utils.d.ts.map +1 -0
  95. package/src/proposals/utils.js +34 -7
  96. package/src/provisionPool.d.ts +167 -0
  97. package/src/provisionPool.d.ts.map +1 -0
  98. package/src/provisionPool.js +122 -0
  99. package/src/provisionPoolKit.d.ts +770 -0
  100. package/src/provisionPoolKit.d.ts.map +1 -0
  101. package/src/provisionPoolKit.js +463 -0
  102. package/src/psm/psm.d.ts +122 -0
  103. package/src/psm/psm.d.ts.map +1 -0
  104. package/src/psm/psm.js +73 -69
  105. package/src/psm/types-ambient.d.ts +2 -0
  106. package/src/psm/types-ambient.d.ts.map +1 -0
  107. package/src/psm/types-ambient.js +3 -0
  108. package/src/reserve/assetReserve.d.ts +47 -0
  109. package/src/reserve/assetReserve.d.ts.map +1 -0
  110. package/src/reserve/assetReserve.js +28 -19
  111. package/src/reserve/assetReserveKit.d.ts +74 -0
  112. package/src/reserve/assetReserveKit.d.ts.map +1 -0
  113. package/src/reserve/assetReserveKit.js +18 -24
  114. package/src/reserve/params.d.ts +10 -0
  115. package/src/reserve/params.d.ts.map +1 -0
  116. package/src/tokens.d.ts +3 -0
  117. package/src/tokens.d.ts.map +1 -0
  118. package/src/tokens.js +5 -0
  119. package/src/vaultFactory/burn.d.ts +2 -0
  120. package/src/vaultFactory/burn.d.ts.map +1 -0
  121. package/src/vaultFactory/burn.js +1 -1
  122. package/src/vaultFactory/liquidation.d.ts +163 -0
  123. package/src/vaultFactory/liquidation.d.ts.map +1 -0
  124. package/src/vaultFactory/liquidation.js +36 -22
  125. package/src/vaultFactory/math.d.ts +11 -0
  126. package/src/vaultFactory/math.d.ts.map +1 -0
  127. package/src/vaultFactory/math.js +10 -9
  128. package/src/vaultFactory/orderedVaultStore.d.ts +360 -0
  129. package/src/vaultFactory/orderedVaultStore.d.ts.map +1 -0
  130. package/src/vaultFactory/orderedVaultStore.js +8 -11
  131. package/src/vaultFactory/params.d.ts +145 -0
  132. package/src/vaultFactory/params.d.ts.map +1 -0
  133. package/src/vaultFactory/params.js +52 -24
  134. package/src/vaultFactory/prioritizedVaults.d.ts +992 -0
  135. package/src/vaultFactory/prioritizedVaults.d.ts.map +1 -0
  136. package/src/vaultFactory/prioritizedVaults.js +4 -4
  137. package/src/vaultFactory/proceeds.d.ts +35 -0
  138. package/src/vaultFactory/proceeds.d.ts.map +1 -0
  139. package/src/vaultFactory/proceeds.js +26 -18
  140. package/src/vaultFactory/storeUtils.d.ts +25 -0
  141. package/src/vaultFactory/storeUtils.d.ts.map +1 -0
  142. package/src/vaultFactory/storeUtils.js +10 -12
  143. package/src/vaultFactory/types-ambient.d.ts +234 -0
  144. package/src/vaultFactory/types-ambient.d.ts.map +1 -0
  145. package/src/vaultFactory/{types.js → types-ambient.js} +42 -42
  146. package/src/vaultFactory/vault.d.ts +402 -0
  147. package/src/vaultFactory/vault.d.ts.map +1 -0
  148. package/src/vaultFactory/vault.js +99 -93
  149. package/src/vaultFactory/vaultDirector.d.ts +388 -0
  150. package/src/vaultFactory/vaultDirector.d.ts.map +1 -0
  151. package/src/vaultFactory/vaultDirector.js +61 -50
  152. package/src/vaultFactory/vaultFactory.d.ts +277 -0
  153. package/src/vaultFactory/vaultFactory.d.ts.map +1 -0
  154. package/src/vaultFactory/vaultFactory.js +49 -32
  155. package/src/vaultFactory/vaultHolder.d.ts +270 -0
  156. package/src/vaultFactory/vaultHolder.d.ts.map +1 -0
  157. package/src/vaultFactory/vaultHolder.js +10 -14
  158. package/src/vaultFactory/vaultKit.d.ts +102 -0
  159. package/src/vaultFactory/vaultKit.d.ts.map +1 -0
  160. package/src/vaultFactory/vaultKit.js +5 -4
  161. package/src/vaultFactory/vaultManager.d.ts +819 -0
  162. package/src/vaultFactory/vaultManager.d.ts.map +1 -0
  163. package/src/vaultFactory/vaultManager.js +248 -151
  164. package/CHANGELOG.md +0 -1066
  165. package/exported.js +0 -2
  166. package/scripts/add-collateral-core.js +0 -113
  167. package/scripts/deploy-contracts.js +0 -100
  168. package/scripts/init-core.js +0 -200
  169. package/scripts/invite-committee-core.js +0 -42
  170. package/scripts/manual-price-feed.js +0 -117
  171. package/scripts/price-feed-core.js +0 -104
  172. package/scripts/start-local-chain.sh +0 -84
  173. package/src/psm/types.js +0 -3
  174. package/src/typeGuards.js +0 -13
  175. package/src/vaultFactory/type-imports.js +0 -4
@@ -1,28 +1,44 @@
1
1
  // @jessie-check
2
+ // @ts-check
2
3
 
4
+ import { ToFarFunction } from '@endo/captp';
5
+ import { Far } from '@endo/marshal';
3
6
  import { AmountMath, AssetKind } from '@agoric/ertp';
4
- import { makeRatio } from '@agoric/zoe/src/contractSupport/index.js';
5
7
  import { deeplyFulfilledObject } from '@agoric/internal';
6
- import { Stable } from '@agoric/vats/src/tokens.js';
7
- import { E } from '@endo/far';
8
+ import { makeRatio } from '@agoric/zoe/src/contractSupport/index.js';
8
9
  import { parseRatio } from '@agoric/zoe/src/contractSupport/ratio.js';
9
- import { reserveThenGetNames } from './utils.js';
10
+ import { E } from '@endo/far';
11
+ import { Stable } from '@agoric/internal/src/tokens.js';
12
+ import { TimeMath } from '@agoric/time/src/timeMath.js';
13
+ import { makePromiseKit } from '@endo/promise-kit';
14
+
15
+ import {
16
+ oracleBrandFeedName,
17
+ reserveThenGetNames,
18
+ scaledPriceFeedName,
19
+ } from './utils.js';
10
20
 
11
21
  export * from './startPSM.js';
12
22
 
23
+ const { quote: q } = assert;
24
+
13
25
  /**
14
26
  * @typedef {object} InterchainAssetOptions
15
27
  * @property {string} [issuerBoardId]
16
28
  * @property {string} [denom]
17
29
  * @property {number} [decimalPlaces]
18
- * @property {string} [proposedName]
19
- * @property {string} keyword
20
- * @property {string} oracleBrand
30
+ * @property {string} keyword - used in regstering with reserve, vaultFactory
31
+ * @property {string} [issuerName] - used in agoricNames for compatibility:
32
+ * defaults to `keyword` if not provided
33
+ * @property {string} [proposedName] - defaults to `issuerName` if not provided
34
+ * @property {string} [oracleBrand] - defaults to `issuerName` if not provided
21
35
  * @property {number} [initialPrice]
22
36
  */
23
37
 
38
+ /** @import {EconomyBootstrapPowers} from './econ-behaviors.js' */
39
+
24
40
  /**
25
- * @param {EconomyBootstrapPowers} powers
41
+ * @param {BootstrapPowers} powers
26
42
  * @param {object} config
27
43
  * @param {object} config.options
28
44
  * @param {InterchainAssetOptions} config.options.interchainAssetOptions
@@ -31,18 +47,22 @@ export const publishInterchainAssetFromBoardId = async (
31
47
  { consume: { board, agoricNamesAdmin } },
32
48
  { options: { interchainAssetOptions } },
33
49
  ) => {
34
- const { issuerBoardId, keyword } = interchainAssetOptions;
50
+ const {
51
+ issuerBoardId,
52
+ keyword,
53
+ issuerName = keyword,
54
+ } = interchainAssetOptions;
35
55
  // Incompatible with denom.
36
56
  assert.equal(interchainAssetOptions.denom, undefined);
37
57
  assert.typeof(issuerBoardId, 'string');
38
- assert.typeof(keyword, 'string');
58
+ assert.typeof(issuerName, 'string');
39
59
 
40
- const issuer = await E(board).getValue(issuerBoardId);
60
+ const issuer = /** @type {Issuer} */ (await E(board).getValue(issuerBoardId));
41
61
  const brand = await E(issuer).getBrand();
42
62
 
43
63
  return Promise.all([
44
- E(E(agoricNamesAdmin).lookupAdmin('issuer')).update(keyword, issuer),
45
- E(E(agoricNamesAdmin).lookupAdmin('brand')).update(keyword, brand),
64
+ E(E(agoricNamesAdmin).lookupAdmin('issuer')).update(issuerName, issuer),
65
+ E(E(agoricNamesAdmin).lookupAdmin('brand')).update(issuerName, brand),
46
66
  ]);
47
67
  };
48
68
 
@@ -61,18 +81,23 @@ export const publishInterchainAssetFromBank = async (
61
81
  },
62
82
  { options: { interchainAssetOptions } },
63
83
  ) => {
64
- const { denom, decimalPlaces, proposedName, keyword } =
65
- interchainAssetOptions;
84
+ const {
85
+ denom,
86
+ decimalPlaces,
87
+ keyword,
88
+ issuerName = keyword,
89
+ proposedName = keyword,
90
+ } = interchainAssetOptions;
66
91
 
67
92
  // Incompatible with issuerBoardId.
68
93
  assert.equal(interchainAssetOptions.issuerBoardId, undefined);
69
94
  assert.typeof(denom, 'string');
70
- assert.typeof(keyword, 'string');
71
95
  assert.typeof(decimalPlaces, 'number');
96
+ assert.typeof(issuerName, 'string');
72
97
  assert.typeof(proposedName, 'string');
73
98
 
74
99
  const terms = {
75
- keyword,
100
+ keyword: issuerName, // "keyword" is a misnomer in mintHolder terms
76
101
  assetKind: AssetKind.NAT,
77
102
  displayInfo: {
78
103
  decimalPlaces,
@@ -82,20 +107,20 @@ export const publishInterchainAssetFromBank = async (
82
107
 
83
108
  const { creatorFacet: mint, publicFacet: issuer } = await E(startUpgradable)({
84
109
  installation: mintHolder,
85
- label: keyword,
110
+ label: issuerName,
86
111
  privateArgs: undefined,
87
112
  terms,
88
113
  });
89
114
 
90
115
  const brand = await E(issuer).getBrand();
91
- const kit = { mint, issuer, brand };
116
+ const kit = /** @type {IssuerKit<'nat'>} */ ({ mint, issuer, brand });
92
117
 
93
118
  await E(E.get(reserveKit).creatorFacet).addIssuer(issuer, keyword);
94
119
 
95
120
  await Promise.all([
96
- E(E(agoricNamesAdmin).lookupAdmin('issuer')).update(keyword, issuer),
97
- E(E(agoricNamesAdmin).lookupAdmin('brand')).update(keyword, brand),
98
- E(bankManager).addAsset(denom, keyword, proposedName, kit),
121
+ E(E(agoricNamesAdmin).lookupAdmin('issuer')).update(issuerName, issuer),
122
+ E(E(agoricNamesAdmin).lookupAdmin('brand')).update(issuerName, brand),
123
+ E(bankManager).addAsset(denom, issuerName, proposedName, kit),
99
124
  ]);
100
125
  };
101
126
 
@@ -113,15 +138,17 @@ export const registerScaledPriceAuthority = async (
113
138
  priceAuthorityAdmin,
114
139
  priceAuthority,
115
140
  },
141
+ instance: { produce: produceInstance },
116
142
  },
117
143
  { options: { interchainAssetOptions } },
118
144
  ) => {
119
145
  const {
120
146
  keyword,
121
- oracleBrand,
147
+ issuerName = keyword,
148
+ oracleBrand = issuerName,
122
149
  initialPrice: initialPriceRaw,
123
150
  } = interchainAssetOptions;
124
- assert.typeof(keyword, 'string');
151
+ assert.typeof(issuerName, 'string');
125
152
  assert.typeof(oracleBrand, 'string');
126
153
 
127
154
  const [
@@ -132,7 +159,7 @@ export const registerScaledPriceAuthority = async (
132
159
  ] = await Promise.all([
133
160
  priceAuthority,
134
161
  reserveThenGetNames(E(agoricNamesAdmin).lookupAdmin('brand'), [
135
- keyword,
162
+ issuerName,
136
163
  'IST',
137
164
  ]),
138
165
  reserveThenGetNames(E(agoricNamesAdmin).lookupAdmin('oracleBrand'), [
@@ -188,9 +215,11 @@ export const registerScaledPriceAuthority = async (
188
215
  }),
189
216
  );
190
217
 
218
+ const label = scaledPriceFeedName(issuerName);
219
+
191
220
  const spaKit = await E(startUpgradable)({
192
221
  installation: scaledPriceAuthority,
193
- label: `scaledPriceAuthority-${keyword}`,
222
+ label,
194
223
  terms,
195
224
  });
196
225
 
@@ -201,9 +230,81 @@ export const registerScaledPriceAuthority = async (
201
230
  stableBrand,
202
231
  true, // force
203
232
  );
233
+
234
+ // publish into agoricNames so that others can await its presence.
235
+ // This must stay after registerPriceAuthority above so it's evidence of registration.
236
+ // eslint-disable-next-line no-restricted-syntax -- computed property
237
+ produceInstance[label].resolve(spaKit.instance);
204
238
  };
205
239
 
206
- /** @typedef {import('./econ-behaviors.js').EconomyBootstrapPowers} EconomyBootstrapPowers */
240
+ // wait a short while after end to allow things to settle
241
+ const BUFFER = 5n * 60n;
242
+ // let's insist on 20 minutes leeway for running the scripts
243
+ const COMPLETION = 20n * 60n;
244
+
245
+ /**
246
+ * This function works around an issue identified in #8307 and #8296, and fixed
247
+ * in #8301. The fix is needed until #8301 makes it into production.
248
+ *
249
+ * If there is a liveSchedule, 1) run now if start is far enough away,
250
+ * otherwise, 2) run after endTime. If neither liveSchedule nor nextSchedule is
251
+ * defined, 3) run now. If there is only a nextSchedule, 4) run now if startTime
252
+ * is far enough away, else 5) run after endTime
253
+ *
254
+ * @param {import('../auction/scheduler.js').FullSchedule} schedules
255
+ * @param {ERef<import('@agoric/time').TimerService>} timer
256
+ * @param {() => void} thunk
257
+ */
258
+ const whenQuiescent = async (schedules, timer, thunk) => {
259
+ const { nextAuctionSchedule, liveAuctionSchedule } = schedules;
260
+ const now = await E(timer).getCurrentTimestamp();
261
+
262
+ const waker = Far('addAssetWaker', { wake: () => thunk() });
263
+
264
+ if (liveAuctionSchedule) {
265
+ const safeStart = TimeMath.subtractAbsRel(
266
+ liveAuctionSchedule.startTime,
267
+ COMPLETION,
268
+ );
269
+
270
+ if (TimeMath.compareAbs(safeStart, now) < 0) {
271
+ // case 2
272
+ console.warn(
273
+ `Add Asset after live schedule's endtime: ${q(
274
+ liveAuctionSchedule.endTime,
275
+ )}`,
276
+ );
277
+
278
+ return E(timer).setWakeup(
279
+ TimeMath.addAbsRel(liveAuctionSchedule.endTime, BUFFER),
280
+ waker,
281
+ );
282
+ }
283
+ }
284
+
285
+ if (!liveAuctionSchedule && nextAuctionSchedule) {
286
+ const safeStart = TimeMath.subtractAbsRel(
287
+ nextAuctionSchedule.startTime,
288
+ COMPLETION,
289
+ );
290
+ if (TimeMath.compareAbs(safeStart, now) < 0) {
291
+ // case 5
292
+ console.warn(
293
+ `Add Asset after next schedule's endtime: ${q(
294
+ nextAuctionSchedule.endTime,
295
+ )}`,
296
+ );
297
+ return E(timer).setWakeup(
298
+ TimeMath.addAbsRel(nextAuctionSchedule.endTime, BUFFER),
299
+ waker,
300
+ );
301
+ }
302
+ }
303
+
304
+ // cases 1, 3, and 4 fall through to here.
305
+ console.warn(`Add Asset immediately`, thunk);
306
+ return thunk();
307
+ };
207
308
 
208
309
  /**
209
310
  * @param {EconomyBootstrapPowers} powers
@@ -215,10 +316,16 @@ export const registerScaledPriceAuthority = async (
215
316
  */
216
317
  export const addAssetToVault = async (
217
318
  {
218
- consume: { vaultFactoryKit, agoricNamesAdmin, auctioneerKit },
319
+ consume: {
320
+ vaultFactoryKit,
321
+ agoricNamesAdmin,
322
+ auctioneerKit,
323
+ chainTimerService,
324
+ },
219
325
  brand: {
220
326
  consume: { [Stable.symbol]: stableP },
221
327
  },
328
+ instance: { consume: consumeInstance },
222
329
  },
223
330
  {
224
331
  options: {
@@ -231,17 +338,43 @@ export const addAssetToVault = async (
231
338
  },
232
339
  },
233
340
  ) => {
234
- const { keyword, oracleBrand } = interchainAssetOptions;
341
+ const {
342
+ keyword,
343
+ issuerName = keyword,
344
+ oracleBrand = issuerName,
345
+ } = interchainAssetOptions;
235
346
  assert.typeof(keyword, 'string');
347
+ assert.typeof(issuerName, 'string');
236
348
  assert.typeof(oracleBrand, 'string');
237
349
  const [interchainIssuer] = await reserveThenGetNames(
238
350
  E(agoricNamesAdmin).lookupAdmin('issuer'),
239
- [keyword],
351
+ [issuerName],
240
352
  );
241
353
 
354
+ // don't add the collateral offering to vaultFactory until its price feed is available
355
+ // eslint-disable-next-line no-restricted-syntax -- allow this computed property
356
+ await consumeInstance[oracleBrandFeedName(oracleBrand, 'USD')];
357
+ // await also the negotiable brand
358
+ // eslint-disable-next-line no-restricted-syntax -- allow this computed property
359
+ await consumeInstance[scaledPriceFeedName(issuerName)];
360
+
361
+ const auctioneerCreator = E.get(auctioneerKit).creatorFacet;
362
+ const schedules = await E(auctioneerCreator).getSchedule();
363
+
364
+ const finishPromiseKit = makePromiseKit();
365
+ const addBrandThenResolve = ToFarFunction('addBrandThenResolve', async () => {
366
+ await E(auctioneerCreator).addBrand(interchainIssuer, keyword);
367
+ finishPromiseKit.resolve(undefined);
368
+ });
369
+
370
+ // schedules actions on a timer (or does it immediately).
371
+ // finishPromiseKit signals completion.
372
+ void whenQuiescent(schedules, chainTimerService, addBrandThenResolve);
373
+ await finishPromiseKit.promise;
374
+
242
375
  const stable = await stableP;
243
376
  const vaultFactoryCreator = E.get(vaultFactoryKit).creatorFacet;
244
- await E(vaultFactoryCreator).addVaultType(interchainIssuer, oracleBrand, {
377
+ await E(vaultFactoryCreator).addVaultType(interchainIssuer, keyword, {
245
378
  debtLimit: AmountMath.make(stable, BigInt(debtLimitValue)),
246
379
  interestRate: makeRatio(interestRateValue, stable),
247
380
  // The rest of these we use safe defaults.
@@ -253,8 +386,6 @@ export const addAssetToVault = async (
253
386
  mintFee: makeRatio(50n, stable, 10_000n),
254
387
  liquidationPenalty: makeRatio(1n, stable),
255
388
  });
256
- const auctioneerCreator = E.get(auctioneerKit).creatorFacet;
257
- await E(auctioneerCreator).addBrand(interchainIssuer, keyword);
258
389
  };
259
390
 
260
391
  export const getManifestForAddAssetToVault = (
@@ -286,9 +417,7 @@ export const getManifestForAddAssetToVault = (
286
417
  consume: {
287
418
  bankManager: true,
288
419
  agoricNamesAdmin: true,
289
- bankMints: true,
290
420
  reserveKit: true,
291
- vBankKits: true,
292
421
  startUpgradable: true,
293
422
  },
294
423
  produce: { bankMints: true, vBankKits: true },
@@ -303,10 +432,9 @@ export const getManifestForAddAssetToVault = (
303
432
  startUpgradable: true,
304
433
  priceAuthorityAdmin: true,
305
434
  priceAuthority: true,
306
- scaledPriceAuthorityKits: true,
307
435
  },
308
- produce: {
309
- scaledPriceAuthorityKits: true,
436
+ instance: {
437
+ produce: true,
310
438
  },
311
439
  installation: {
312
440
  consume: { scaledPriceAuthority: true },
@@ -317,10 +445,16 @@ export const getManifestForAddAssetToVault = (
317
445
  auctioneerKit: 'auctioneer',
318
446
  vaultFactoryKit: 'vaultFactory',
319
447
  agoricNamesAdmin: true,
448
+ chainTimerService: true,
320
449
  },
321
450
  brand: {
322
451
  consume: { [Stable.symbol]: true },
323
452
  },
453
+ instance: {
454
+ // allow any instance because the AGORIC_INSTANCE_NAME of
455
+ // priceFeedOptions cannot be known statically.
456
+ consume: true,
457
+ },
324
458
  },
325
459
  },
326
460
  installations: {
@@ -0,0 +1,113 @@
1
+ export function inviteCommitteeMembers({ consume: { namesByAddressAdmin, economicCommitteeCreatorFacet, ...consume }, }: import("./econ-behaviors.js").EconomyBootstrapPowers, { options: { voterAddresses } }: {
2
+ options: {
3
+ voterAddresses: Record<string, string>;
4
+ };
5
+ }): Promise<void>;
6
+ export function startEconCharter({ consume: { zoe }, produce: { econCharterKit }, installation: { consume: { binaryVoteCounter: counterP, econCommitteeCharter: installP }, }, instance: { produce: { econCommitteeCharter: instanceP }, }, }: import("./econ-behaviors.js").EconomyBootstrapPowers): Promise<void>;
7
+ export function addGovernorsToEconCharter({ consume: { reserveKit, vaultFactoryKit, econCharterKit, auctioneerKit }, instance: { consume: { reserve, VaultFactory, auctioneer }, }, }: import("./econ-behaviors.js").EconomyBootstrapPowers): Promise<void>;
8
+ export function inviteToEconCharter({ consume: { namesByAddressAdmin, econCharterKit } }: import("./econ-behaviors.js").EconomyBootstrapPowers, { options: { voterAddresses } }: {
9
+ options: {
10
+ voterAddresses: Record<string, string>;
11
+ };
12
+ }): Promise<void>;
13
+ export function getManifestForInviteCommittee({ restoreRef }: {
14
+ restoreRef: any;
15
+ }, { voterAddresses, econCommitteeCharterRef }: {
16
+ voterAddresses: any;
17
+ econCommitteeCharterRef: any;
18
+ }): Promise<{
19
+ manifest: {
20
+ [x: string]: {
21
+ consume: {
22
+ namesByAddressAdmin: boolean;
23
+ economicCommitteeCreatorFacet: boolean;
24
+ highPrioritySendersManager: boolean;
25
+ zoe?: undefined;
26
+ auctioneerKit?: undefined;
27
+ econCharterKit?: undefined;
28
+ agoricNames?: undefined;
29
+ reserveKit?: undefined;
30
+ vaultFactoryKit?: undefined;
31
+ };
32
+ produce?: undefined;
33
+ installation?: undefined;
34
+ instance?: undefined;
35
+ } | {
36
+ consume: {
37
+ zoe: boolean;
38
+ namesByAddressAdmin?: undefined;
39
+ economicCommitteeCreatorFacet?: undefined;
40
+ highPrioritySendersManager?: undefined;
41
+ auctioneerKit?: undefined;
42
+ econCharterKit?: undefined;
43
+ agoricNames?: undefined;
44
+ reserveKit?: undefined;
45
+ vaultFactoryKit?: undefined;
46
+ };
47
+ produce: {
48
+ econCharterKit: boolean;
49
+ };
50
+ installation: {
51
+ consume: {
52
+ binaryVoteCounter: boolean;
53
+ econCommitteeCharter: boolean;
54
+ };
55
+ };
56
+ instance: {
57
+ produce: {
58
+ econCommitteeCharter: boolean;
59
+ };
60
+ consume?: undefined;
61
+ };
62
+ } | {
63
+ consume: {
64
+ auctioneerKit: boolean;
65
+ econCharterKit: boolean;
66
+ zoe: boolean;
67
+ agoricNames: boolean;
68
+ namesByAddressAdmin: boolean;
69
+ economicCommitteeCreatorFacet: boolean;
70
+ reserveKit: boolean;
71
+ vaultFactoryKit: boolean;
72
+ highPrioritySendersManager?: undefined;
73
+ };
74
+ installation: {
75
+ consume: {
76
+ binaryVoteCounter: boolean;
77
+ econCommitteeCharter?: undefined;
78
+ };
79
+ };
80
+ instance: {
81
+ consume: {
82
+ auctioneer: boolean;
83
+ reserve: boolean;
84
+ VaultFactory: boolean;
85
+ };
86
+ produce?: undefined;
87
+ };
88
+ produce?: undefined;
89
+ } | {
90
+ consume: {
91
+ namesByAddressAdmin: boolean;
92
+ econCharterKit: boolean;
93
+ economicCommitteeCreatorFacet?: undefined;
94
+ highPrioritySendersManager?: undefined;
95
+ zoe?: undefined;
96
+ auctioneerKit?: undefined;
97
+ agoricNames?: undefined;
98
+ reserveKit?: undefined;
99
+ vaultFactoryKit?: undefined;
100
+ };
101
+ produce?: undefined;
102
+ installation?: undefined;
103
+ instance?: undefined;
104
+ };
105
+ };
106
+ installations: {
107
+ econCommitteeCharter: any;
108
+ };
109
+ options: {
110
+ voterAddresses: any;
111
+ };
112
+ }>;
113
+ //# sourceMappingURL=committee-proposal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"committee-proposal.d.ts","sourceRoot":"","sources":["committee-proposal.js"],"names":[],"mappings":"AAeO,yHAHI,OAAO,qBAAqB,EAAE,sBAAsB,mCACpD;IAAE,OAAO,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAA;CAAE,iBAoCjE;AAKM,+OADK,OAAO,qBAAqB,EAAE,sBAAsB,iBA+B/D;AAQM,uLAFI,OAAO,qBAAqB,EAAE,sBAAsB,iBAiC9D;AAQM,0FAHI,OAAO,qBAAqB,EAAE,sBAAsB,mCACpD;IAAE,OAAO,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAA;CAAE,iBAkBjE;AAIM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDN"}
@@ -4,14 +4,14 @@ import { reserveThenDeposit } from './utils.js';
4
4
 
5
5
  const { values } = Object;
6
6
 
7
- /** @type { <X, Y>(xs: X[], ys: Y[]) => [X, Y][]} */
7
+ /** @type {<X, Y>(xs: X[], ys: Y[]) => [X, Y][]} */
8
8
  const zip = (xs, ys) => xs.map((x, i) => [x, ys[i]]);
9
9
 
10
10
  const EC_HIGH_PRIORITY_SENDERS_NAMESPACE = 'economicCommittee';
11
11
 
12
12
  /**
13
- * @param {import('./econ-behaviors').EconomyBootstrapPowers} powers
14
- * @param {{ options: { voterAddresses: Record<string, string> }}} param1
13
+ * @param {import('./econ-behaviors.js').EconomyBootstrapPowers} powers
14
+ * @param {{ options: { voterAddresses: Record<string, string> } }} param1
15
15
  */
16
16
  export const inviteCommitteeMembers = async (
17
17
  {
@@ -26,18 +26,14 @@ export const inviteCommitteeMembers = async (
26
26
 
27
27
  const highPrioritySendersManager = await consume.highPrioritySendersManager;
28
28
 
29
- /**
30
- * @param {[string, Promise<Invitation>][]} addrInvitations
31
- */
29
+ /** @param {[string, Promise<Invitation>][]} addrInvitations */
32
30
  const distributeInvitations = async addrInvitations => {
33
31
  await Promise.all(
34
32
  addrInvitations.map(async ([addr, invitationP]) => {
35
- await reserveThenDeposit(
36
- `econ committee member ${addr}`,
37
- namesByAddressAdmin,
38
- addr,
39
- [invitationP],
40
- );
33
+ const debugName = `econ committee member ${addr}`;
34
+ await reserveThenDeposit(debugName, namesByAddressAdmin, addr, [
35
+ invitationP,
36
+ ]).catch(err => console.error(`failed deposit to ${debugName}`, err));
41
37
  if (highPrioritySendersManager) {
42
38
  await E(highPrioritySendersManager).add(
43
39
  EC_HIGH_PRIORITY_SENDERS_NAMESPACE,
@@ -48,14 +44,14 @@ export const inviteCommitteeMembers = async (
48
44
  );
49
45
  };
50
46
 
51
- await distributeInvitations(zip(values(voterAddresses), invitations));
47
+ // This doesn't resolve until the committee members create their smart wallets.
48
+ // Don't block bootstrap on it.
49
+ void distributeInvitations(zip(values(voterAddresses), invitations));
52
50
  };
53
51
 
54
52
  harden(inviteCommitteeMembers);
55
53
 
56
- /**
57
- * @param {import('./econ-behaviors').EconomyBootstrapPowers} powers
58
- */
54
+ /** @param {import('./econ-behaviors.js').EconomyBootstrapPowers} powers */
59
55
  export const startEconCharter = async ({
60
56
  consume: { zoe },
61
57
  produce: { econCharterKit },
@@ -76,7 +72,7 @@ export const startEconCharter = async ({
76
72
  }),
77
73
  );
78
74
 
79
- /** @type {Promise<import('./econ-behaviors').EconCharterStartResult>} */
75
+ /** @type {Promise<import('./econ-behaviors.js').EconCharterStartResult>} */
80
76
  const startResult = E(zoe).startInstance(
81
77
  charterInstall,
82
78
  undefined,
@@ -92,7 +88,7 @@ harden(startEconCharter);
92
88
  /**
93
89
  * Introduce charter to governed creator facets.
94
90
  *
95
- * @param {import('./econ-behaviors').EconomyBootstrapPowers} powers
91
+ * @param {import('./econ-behaviors.js').EconomyBootstrapPowers} powers
96
92
  */
97
93
  export const addGovernorsToEconCharter = async ({
98
94
  consume: { reserveKit, vaultFactoryKit, econCharterKit, auctioneerKit },
@@ -130,8 +126,8 @@ export const addGovernorsToEconCharter = async ({
130
126
  harden(addGovernorsToEconCharter);
131
127
 
132
128
  /**
133
- * @param {import('./econ-behaviors').EconomyBootstrapPowers} powers
134
- * @param {{ options: { voterAddresses: Record<string, string> }}} param1
129
+ * @param {import('./econ-behaviors.js').EconomyBootstrapPowers} powers
130
+ * @param {{ options: { voterAddresses: Record<string, string> } }} param1
135
131
  */
136
132
  export const inviteToEconCharter = async (
137
133
  { consume: { namesByAddressAdmin, econCharterKit } },
@@ -139,15 +135,15 @@ export const inviteToEconCharter = async (
139
135
  ) => {
140
136
  const { creatorFacet } = E.get(econCharterKit);
141
137
 
142
- await Promise.all(
143
- values(voterAddresses).map(async addr =>
144
- reserveThenDeposit(
145
- `econ charter member ${addr}`,
146
- namesByAddressAdmin,
147
- addr,
148
- [E(creatorFacet).makeCharterMemberInvitation()],
149
- ),
150
- ),
138
+ // This doesn't resolve until the committee members create their smart wallets.
139
+ // Don't block bootstrap on it.
140
+ void Promise.all(
141
+ values(voterAddresses).map(async addr => {
142
+ const debugName = `econ charter member ${addr}`;
143
+ reserveThenDeposit(debugName, namesByAddressAdmin, addr, [
144
+ E(creatorFacet).makeCharterMemberInvitation(),
145
+ ]).catch(err => console.error(`failed deposit to ${debugName}`, err));
146
+ }),
151
147
  );
152
148
  };
153
149
 
@@ -180,8 +176,6 @@ export const getManifestForInviteCommittee = async (
180
176
  [addGovernorsToEconCharter.name]: {
181
177
  consume: {
182
178
  auctioneerKit: t,
183
- reserveGovernorCreatorFacet: t,
184
- vaultFactoryGovernorCreator: t,
185
179
  econCharterKit: t,
186
180
  zoe: t,
187
181
  agoricNames: t,