@agoric/inter-protocol 0.16.1 → 0.16.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 (192) hide show
  1. package/README.md +6 -6
  2. package/package.json +41 -36
  3. package/scripts/build-bundles.js +5 -21
  4. package/src/auction/auctionBook.d.ts +147 -0
  5. package/src/auction/auctionBook.d.ts.map +1 -0
  6. package/src/auction/auctionBook.js +135 -103
  7. package/src/auction/auctioneer.d.ts +69 -0
  8. package/src/auction/auctioneer.d.ts.map +1 -0
  9. package/src/auction/auctioneer.js +63 -49
  10. package/src/auction/offerBook.d.ts +45 -0
  11. package/src/auction/offerBook.d.ts.map +1 -0
  12. package/src/auction/offerBook.js +13 -12
  13. package/src/auction/params.d.ts +144 -0
  14. package/src/auction/params.d.ts.map +1 -0
  15. package/src/auction/params.js +10 -9
  16. package/src/auction/scheduleMath.d.ts +5 -0
  17. package/src/auction/scheduleMath.d.ts.map +1 -0
  18. package/src/auction/scheduleMath.js +17 -15
  19. package/src/auction/scheduler.d.ts +49 -0
  20. package/src/auction/scheduler.d.ts.map +1 -0
  21. package/src/auction/scheduler.js +51 -43
  22. package/src/auction/sortedOffers.d.ts +8 -0
  23. package/src/auction/sortedOffers.d.ts.map +1 -0
  24. package/src/auction/sortedOffers.js +9 -7
  25. package/src/auction/util.d.ts +32 -0
  26. package/src/auction/util.d.ts.map +1 -0
  27. package/src/auction/util.js +6 -4
  28. package/src/clientSupport.d.ts +167 -0
  29. package/src/clientSupport.d.ts.map +1 -0
  30. package/src/clientSupport.js +154 -96
  31. package/src/collectFees.d.ts +2 -0
  32. package/src/collectFees.d.ts.map +1 -0
  33. package/src/contractSupport.d.ts +28 -0
  34. package/src/contractSupport.d.ts.map +1 -0
  35. package/src/contractSupport.js +14 -12
  36. package/src/econCommitteeCharter.d.ts +39 -0
  37. package/src/econCommitteeCharter.d.ts.map +1 -0
  38. package/src/econCommitteeCharter.js +21 -20
  39. package/src/feeDistributor.d.ts +224 -0
  40. package/src/feeDistributor.d.ts.map +1 -0
  41. package/src/feeDistributor.js +37 -33
  42. package/src/index.d.ts +2 -0
  43. package/src/index.d.ts.map +1 -0
  44. package/src/index.js +1 -0
  45. package/src/interest-math.d.ts +3 -0
  46. package/src/interest-math.d.ts.map +1 -0
  47. package/src/interest.d.ts +28 -0
  48. package/src/interest.d.ts.map +1 -0
  49. package/src/interest.js +21 -16
  50. package/src/price/README.md +13 -0
  51. package/src/price/fluxAggregatorContract.d.ts +70 -0
  52. package/src/price/fluxAggregatorContract.d.ts.map +1 -0
  53. package/src/price/fluxAggregatorContract.js +62 -55
  54. package/src/price/fluxAggregatorKit.d.ts +103 -0
  55. package/src/price/fluxAggregatorKit.d.ts.map +1 -0
  56. package/src/price/fluxAggregatorKit.js +50 -37
  57. package/src/price/priceOracleKit.d.ts +38 -0
  58. package/src/price/priceOracleKit.d.ts.map +1 -0
  59. package/src/price/priceOracleKit.js +11 -13
  60. package/src/price/roundsManager.d.ts +204 -0
  61. package/src/price/roundsManager.d.ts.map +1 -0
  62. package/src/price/roundsManager.js +79 -82
  63. package/src/proposals/README.md +2 -3
  64. package/src/proposals/add-auction.d.ts +69 -0
  65. package/src/proposals/add-auction.d.ts.map +1 -0
  66. package/src/proposals/add-auction.js +180 -0
  67. package/src/proposals/addAssetToVault.d.ts +160 -0
  68. package/src/proposals/addAssetToVault.d.ts.map +1 -0
  69. package/src/proposals/addAssetToVault.js +172 -38
  70. package/src/proposals/committee-proposal.d.ts +113 -0
  71. package/src/proposals/committee-proposal.d.ts.map +1 -0
  72. package/src/proposals/committee-proposal.js +25 -31
  73. package/src/proposals/core-proposal.d.ts +149 -0
  74. package/src/proposals/core-proposal.d.ts.map +1 -0
  75. package/src/proposals/core-proposal.js +9 -11
  76. package/src/proposals/econ-behaviors.d.ts +539 -0
  77. package/src/proposals/econ-behaviors.d.ts.map +1 -0
  78. package/src/proposals/econ-behaviors.js +64 -45
  79. package/src/proposals/price-feed-proposal.d.ts +84 -0
  80. package/src/proposals/price-feed-proposal.d.ts.map +1 -0
  81. package/src/proposals/price-feed-proposal.js +108 -51
  82. package/src/proposals/startEconCommittee.d.ts +34 -0
  83. package/src/proposals/startEconCommittee.d.ts.map +1 -0
  84. package/src/proposals/startEconCommittee.js +2 -2
  85. package/src/proposals/startPSM.d.ts +59 -0
  86. package/src/proposals/startPSM.d.ts.map +1 -0
  87. package/src/proposals/startPSM.js +38 -27
  88. package/src/proposals/upgrade-scaledPriceAuthorities.d.ts +24 -0
  89. package/src/proposals/upgrade-scaledPriceAuthorities.d.ts.map +1 -0
  90. package/src/proposals/upgrade-scaledPriceAuthorities.js +78 -0
  91. package/src/proposals/upgrade-vaults.d.ts +35 -0
  92. package/src/proposals/upgrade-vaults.d.ts.map +1 -0
  93. package/src/proposals/upgrade-vaults.js +235 -0
  94. package/src/proposals/utils.d.ts +17 -0
  95. package/src/proposals/utils.d.ts.map +1 -0
  96. package/src/proposals/utils.js +34 -7
  97. package/src/provisionPool.d.ts +167 -0
  98. package/src/provisionPool.d.ts.map +1 -0
  99. package/src/provisionPool.js +122 -0
  100. package/src/provisionPoolKit.d.ts +367 -0
  101. package/src/provisionPoolKit.d.ts.map +1 -0
  102. package/src/provisionPoolKit.js +522 -0
  103. package/src/psm/psm.d.ts +122 -0
  104. package/src/psm/psm.d.ts.map +1 -0
  105. package/src/psm/psm.js +73 -69
  106. package/src/psm/types-ambient.d.ts +2 -0
  107. package/src/psm/types-ambient.d.ts.map +1 -0
  108. package/src/psm/types-ambient.js +3 -0
  109. package/src/reserve/assetReserve.d.ts +47 -0
  110. package/src/reserve/assetReserve.d.ts.map +1 -0
  111. package/src/reserve/assetReserve.js +28 -19
  112. package/src/reserve/assetReserveKit.d.ts +74 -0
  113. package/src/reserve/assetReserveKit.d.ts.map +1 -0
  114. package/src/reserve/assetReserveKit.js +18 -24
  115. package/src/reserve/params.d.ts +10 -0
  116. package/src/reserve/params.d.ts.map +1 -0
  117. package/src/tokens.d.ts +3 -0
  118. package/src/tokens.d.ts.map +1 -0
  119. package/src/tokens.js +5 -0
  120. package/src/vaultFactory/burn.d.ts +2 -0
  121. package/src/vaultFactory/burn.d.ts.map +1 -0
  122. package/src/vaultFactory/burn.js +1 -1
  123. package/src/vaultFactory/liquidation.d.ts +23 -0
  124. package/src/vaultFactory/liquidation.d.ts.map +1 -0
  125. package/src/vaultFactory/liquidation.js +36 -22
  126. package/src/vaultFactory/math.d.ts +11 -0
  127. package/src/vaultFactory/math.d.ts.map +1 -0
  128. package/src/vaultFactory/math.js +10 -9
  129. package/src/vaultFactory/orderedVaultStore.d.ts +93 -0
  130. package/src/vaultFactory/orderedVaultStore.d.ts.map +1 -0
  131. package/src/vaultFactory/orderedVaultStore.js +8 -11
  132. package/src/vaultFactory/params.d.ts +140 -0
  133. package/src/vaultFactory/params.d.ts.map +1 -0
  134. package/src/vaultFactory/params.js +52 -24
  135. package/src/vaultFactory/prioritizedVaults.d.ts +279 -0
  136. package/src/vaultFactory/prioritizedVaults.d.ts.map +1 -0
  137. package/src/vaultFactory/prioritizedVaults.js +4 -4
  138. package/src/vaultFactory/proceeds.d.ts +35 -0
  139. package/src/vaultFactory/proceeds.d.ts.map +1 -0
  140. package/src/vaultFactory/proceeds.js +26 -18
  141. package/src/vaultFactory/storeUtils.d.ts +25 -0
  142. package/src/vaultFactory/storeUtils.d.ts.map +1 -0
  143. package/src/vaultFactory/storeUtils.js +10 -12
  144. package/src/vaultFactory/types-ambient.d.ts +137 -0
  145. package/src/vaultFactory/types-ambient.d.ts.map +1 -0
  146. package/src/vaultFactory/{types.js → types-ambient.js} +42 -42
  147. package/src/vaultFactory/vault.d.ts +332 -0
  148. package/src/vaultFactory/vault.d.ts.map +1 -0
  149. package/src/vaultFactory/vault.js +99 -93
  150. package/src/vaultFactory/vaultDirector.d.ts +340 -0
  151. package/src/vaultFactory/vaultDirector.d.ts.map +1 -0
  152. package/src/vaultFactory/vaultDirector.js +63 -50
  153. package/src/vaultFactory/vaultFactory.d.ts +201 -0
  154. package/src/vaultFactory/vaultFactory.d.ts.map +1 -0
  155. package/src/vaultFactory/vaultFactory.js +49 -32
  156. package/src/vaultFactory/vaultHolder.d.ts +126 -0
  157. package/src/vaultFactory/vaultHolder.d.ts.map +1 -0
  158. package/src/vaultFactory/vaultHolder.js +10 -14
  159. package/src/vaultFactory/vaultKit.d.ts +32 -0
  160. package/src/vaultFactory/vaultKit.d.ts.map +1 -0
  161. package/src/vaultFactory/vaultKit.js +5 -4
  162. package/src/vaultFactory/vaultManager.d.ts +674 -0
  163. package/src/vaultFactory/vaultManager.d.ts.map +1 -0
  164. package/src/vaultFactory/vaultManager.js +249 -151
  165. package/CHANGELOG.md +0 -1033
  166. package/bundles/bundle-auctioneer-js-meta.json +0 -722
  167. package/bundles/bundle-auctioneer.js +0 -1
  168. package/bundles/bundle-econCommitteeCharter-js-meta.json +0 -514
  169. package/bundles/bundle-econCommitteeCharter.js +0 -1
  170. package/bundles/bundle-feeDistributor-js-meta.json +0 -458
  171. package/bundles/bundle-feeDistributor.js +0 -1
  172. package/bundles/bundle-fluxAggregatorKit-js-meta.json +0 -674
  173. package/bundles/bundle-fluxAggregatorKit.js +0 -1
  174. package/bundles/bundle-psm-js-meta.json +0 -666
  175. package/bundles/bundle-psm.js +0 -1
  176. package/bundles/bundle-reserve-js-meta.json +0 -662
  177. package/bundles/bundle-reserve.js +0 -1
  178. package/bundles/bundle-scaledPriceAuthority-js-meta.json +0 -542
  179. package/bundles/bundle-scaledPriceAuthority.js +0 -1
  180. package/bundles/bundle-vaultFactory-js-meta.json +0 -790
  181. package/bundles/bundle-vaultFactory.js +0 -1
  182. package/exported.js +0 -2
  183. package/scripts/add-collateral-core.js +0 -112
  184. package/scripts/deploy-contracts.js +0 -100
  185. package/scripts/init-core.js +0 -198
  186. package/scripts/invite-committee-core.js +0 -42
  187. package/scripts/manual-price-feed.js +0 -117
  188. package/scripts/price-feed-core.js +0 -104
  189. package/scripts/start-local-chain.sh +0 -84
  190. package/src/psm/types.js +0 -3
  191. package/src/typeGuards.js +0 -13
  192. package/src/vaultFactory/type-imports.js +0 -4
@@ -1,20 +1,17 @@
1
1
  // @jessie-check
2
2
 
3
- import '../../exported.js';
4
-
5
3
  import { AmountMath } from '@agoric/ertp';
6
- import '@agoric/governance/exported.js';
7
4
  import { deeplyFulfilledObject, makeTracer } from '@agoric/internal';
8
5
  import { makeStorageNodeChild } from '@agoric/internal/src/lib-chainStorage.js';
9
- import '@agoric/vats/exported.js';
10
- import '@agoric/vats/src/core/types.js';
11
- import { Stable } from '@agoric/vats/src/tokens.js';
12
6
  import { E } from '@endo/far';
13
7
  import { makeScalarBigMapStore } from '@agoric/vat-data';
8
+ import { Stable } from '@agoric/internal/src/tokens.js';
14
9
  import { makeGovernedTerms as makeGovernedATerms } from '../auction/params.js';
15
10
  import { makeReserveTerms } from '../reserve/params.js';
16
11
  import { makeGovernedTerms as makeGovernedVFTerms } from '../vaultFactory/params.js';
17
12
 
13
+ /** @import {StartedInstanceKit} from '@agoric/zoe/src/zoeService/utils.js' */
14
+
18
15
  const trace = makeTracer('RunEconBehaviors', true);
19
16
 
20
17
  export const SECONDS_PER_MINUTE = 60n;
@@ -22,54 +19,73 @@ export const SECONDS_PER_HOUR = 60n * 60n;
22
19
  export const SECONDS_PER_DAY = 24n * SECONDS_PER_HOUR;
23
20
  export const SECONDS_PER_WEEK = 7n * SECONDS_PER_DAY;
24
21
 
25
- /**
26
- * @typedef {import('../vaultFactory/vaultFactory.js').VaultFactoryContract['publicFacet']} VaultFactoryPublicFacet
27
- * @typedef {import('../auction/auctioneer.js').AuctioneerPublicFacet} AuctioneerPublicFacet
28
- * @typedef {import('../auction/auctioneer.js').AuctioneerCreatorFacet} AuctioneerCreatorFacet
29
- */
22
+ /** @import {start as VFStart} from '../vaultFactory/vaultFactory.js' */
23
+ /** @typedef {Awaited<ReturnType<VFStart>>['publicFacet']} VaultFactoryPublicFacet */
30
24
 
31
25
  /**
32
26
  * @typedef {object} PSMKit
33
27
  * @property {string} label
34
28
  * @property {Instance} psm
35
29
  * @property {Instance} psmGovernor
36
- * @property {Awaited<ReturnType<Awaited<ReturnType<import('../psm/psm.js')['prepare']>>['creatorFacet']['getLimitedCreatorFacet']>>} psmCreatorFacet
37
- * @property {GovernorCreatorFacet<import('../../src/psm/psm.js')['prepare']>} psmGovernorCreatorFacet
30
+ * @property {Awaited<
31
+ * ReturnType<
32
+ * Awaited<
33
+ * ReturnType<import('../psm/psm.js')['start']>
34
+ * >['creatorFacet']['getLimitedCreatorFacet']
35
+ * >
36
+ * >} psmCreatorFacet
37
+ * @property {GovernorCreatorFacet<import('../../src/psm/psm.js')['start']>} psmGovernorCreatorFacet
38
38
  * @property {AdminFacet} psmAdminFacet
39
39
  */
40
40
 
41
- /**
42
- * @typedef {GovernanceFacetKit<import('../auction/auctioneer.js').start>} AuctioneerKit
43
- */
41
+ /** @typedef {GovernanceFacetKit<import('../auction/auctioneer.js').start>} AuctioneerKit */
44
42
 
45
43
  /**
46
- * @typedef { WellKnownSpaces & ChainBootstrapSpace & EconomyBootstrapSpace
47
- * } EconomyBootstrapPowers
44
+ * @typedef {WellKnownSpaces & ChainBootstrapSpace & EconomyBootstrapSpace} EconomyBootstrapPowers
45
+ *
46
+ *
48
47
  * @typedef {PromiseSpaceOf<{
49
- * economicCommitteeKit: CommitteeStartResult,
50
- * economicCommitteeCreatorFacet: import('@agoric/governance/src/committee.js').CommitteeElectorateCreatorFacet,
51
- * feeDistributorKit: StartedInstanceKit<typeof import('../feeDistributor.js').start>,
52
- * periodicFeeCollectors: MapStore<number, import('../feeDistributor.js').PeriodicFeeCollector>,
53
- * psmKit: MapStore<Brand, PSMKit>,
54
- * anchorBalancePayments: MapStore<Brand, Payment<'nat'>>,
55
- * econCharterKit: EconCharterStartResult,
56
- * reserveKit: GovernanceFacetKit<import('../reserve/assetReserve.js')['prepare']>,
57
- * vaultFactoryKit: GovernanceFacetKit<import('../vaultFactory/vaultFactory.js')['prepare']>,
58
- * auctioneerKit: AuctioneerKit,
59
- * minInitialDebt: NatValue,
48
+ * economicCommitteeKit: CommitteeStartResult;
49
+ * economicCommitteeCreatorFacet: import('@agoric/governance/src/committee.js').CommitteeElectorateCreatorFacet;
50
+ * feeDistributorKit: StartedInstanceKit<
51
+ * typeof import('../feeDistributor.js').start
52
+ * >;
53
+ * periodicFeeCollectors: MapStore<
54
+ * number,
55
+ * import('../feeDistributor.js').PeriodicFeeCollector
56
+ * >;
57
+ * psmKit: MapStore<Brand, PSMKit>;
58
+ * anchorBalancePayments: MapStore<Brand, Payment<'nat'>>;
59
+ * econCharterKit: EconCharterStartResult;
60
+ * reserveKit: GovernanceFacetKit<
61
+ * import('../reserve/assetReserve.js')['start']
62
+ * >;
63
+ * vaultFactoryKit: GovernanceFacetKit<VFStart>;
64
+ * auctioneerKit: AuctioneerKit;
65
+ * newAuctioneerKit: AuctioneerKit | undefined;
66
+ * minInitialDebt: NatValue;
60
67
  * }>} EconomyBootstrapSpace
61
68
  */
62
69
 
63
- /** @typedef {import('@agoric/zoe/src/zoeService/utils.js').StartedInstanceKit<import('../econCommitteeCharter')['prepare']>} EconCharterStartResult */
64
- /** @typedef {import('@agoric/zoe/src/zoeService/utils.js').StartedInstanceKit<import('@agoric/governance/src/committee.js')['prepare']>} CommitteeStartResult */
70
+ /**
71
+ * @typedef {StartedInstanceKit<
72
+ * import('../econCommitteeCharter.js')['start']
73
+ * >} EconCharterStartResult
74
+ */
75
+ /**
76
+ * @typedef {StartedInstanceKit<
77
+ * import('@agoric/governance/src/committee.js')['start']
78
+ * >} CommitteeStartResult
79
+ */
65
80
 
66
81
  /**
67
82
  * @file A collection of productions, each of which declares inputs and outputs.
68
- * Each function is passed a set of powers for reading from and writing to the vat config.
83
+ * Each function is passed a set of powers for reading from and writing to the
84
+ * vat config.
69
85
  *
70
- * Each of the things they produce they're responsible for resolving or setting.
86
+ * Each of the things they produce they're responsible for resolving or setting.
71
87
  *
72
- * In production called by @agoric/vats to bootstrap.
88
+ * In production called by @agoric/vats to bootstrap.
73
89
  */
74
90
 
75
91
  /** @param {EconomyBootstrapPowers} powers */
@@ -214,14 +230,14 @@ export const setupVaultFactoryArguments = async (
214
230
  initialShortfallInvitation,
215
231
  shortfallInvitationAmount,
216
232
  feeMintAccess,
217
- auctioneerPublicFacet,
233
+ auctioneerInstance,
218
234
  ] = await Promise.all([
219
235
  poserInvitationP,
220
236
  E(E(zoe).getInvitationIssuer()).getAmountOf(poserInvitationP),
221
237
  shortfallInvitationP,
222
238
  E(E(zoe).getInvitationIssuer()).getAmountOf(shortfallInvitationP),
223
239
  feeMintAccessP,
224
- E.get(auctioneerKit).publicFacet,
240
+ E.get(auctioneerKit).instance,
225
241
  ]);
226
242
 
227
243
  const reservePublicFacet = await E.get(reserveKit).publicFacet;
@@ -230,7 +246,6 @@ export const setupVaultFactoryArguments = async (
230
246
 
231
247
  const vaultFactoryTerms = makeGovernedVFTerms({
232
248
  priceAuthority,
233
- auctioneerPublicFacet,
234
249
  reservePublicFacet,
235
250
  interestTiming,
236
251
  timer: chainTimerService,
@@ -242,6 +257,7 @@ export const setupVaultFactoryArguments = async (
242
257
  });
243
258
 
244
259
  const vaultFactoryPrivateArgs = {
260
+ auctioneerInstance,
245
261
  feeMintAccess,
246
262
  initialPoserInvitation,
247
263
  initialShortfallInvitation,
@@ -301,7 +317,11 @@ export const startVaultFactory = async (
301
317
  }),
302
318
  );
303
319
 
304
- /** @type {GovernorStartedInstallationKit<typeof vaultFactoryInstallation>} */
320
+ /**
321
+ * @type {GovernorStartedInstallationKit<
322
+ * typeof vaultFactoryInstallation
323
+ * >}
324
+ */
305
325
  const g = await E(consume.zoe).startInstance(
306
326
  contractGovernorInstallation,
307
327
  undefined,
@@ -350,8 +370,8 @@ export const startVaultFactory = async (
350
370
  };
351
371
 
352
372
  /**
353
- * Grant access to the VaultFactory creatorFacet
354
- * to up to one user based on address.
373
+ * Grant access to the VaultFactory creatorFacet to up to one user based on
374
+ * address.
355
375
  *
356
376
  * @param {EconomyBootstrapPowers} powers
357
377
  * @param {object} [root0]
@@ -436,19 +456,18 @@ export const startRewardDistributor = async ({
436
456
  });
437
457
 
438
458
  /**
439
- * @type {Awaited<
440
- * ReturnType<typeof import('../feeDistributor.js').makeFeeDistributor>>
441
- * & { adminFacet: AdminFacet, instance: Instance }
442
- * }
459
+ * @type {StartedInstanceKit<
460
+ * typeof import('@agoric/inter-protocol/src/feeDistributor.js').start
461
+ * >}
443
462
  */
444
463
  const instanceKit = await E(zoe).startInstance(
445
464
  feeDistributor,
446
465
  { Fee: centralIssuer },
466
+ // @ts-expect-error XXX
447
467
  feeDistributorTerms,
448
468
  undefined,
449
469
  'feeDistributor',
450
470
  );
451
- /** @type {ERef<import('../feeDistributor.js').FeeDestination>} */
452
471
  await E(instanceKit.creatorFacet).setDestinations({
453
472
  ...(rewardDistributorDepositFacet && {
454
473
  RewardDistributor: E(
@@ -0,0 +1,84 @@
1
+ export { oracleBrandFeedName as instanceNameFor };
2
+ export function ensureOracleBrands({ namedVat: { consume: { agoricNames }, }, oracleBrand: { produce: oracleBrandProduce }, }: ChainBootstrapSpace & NamedVatPowers, { options: { priceFeedOptions: { brandIn: rawBrandIn, brandOut: rawBrandOut, IN_BRAND_NAME, IN_BRAND_DECIMALS, OUT_BRAND_NAME, OUT_BRAND_DECIMALS, }, }, }: {
3
+ options: {
4
+ priceFeedOptions: PriceFeedOptions;
5
+ };
6
+ }): Promise<[Brand<"nat">, Brand<"nat">]>;
7
+ export function createPriceFeed({ consume: { agoricNamesAdmin, board, chainStorage, chainTimerService, client, econCharterKit, highPrioritySendersManager, namesByAddressAdmin, priceAuthority, priceAuthorityAdmin, startGovernedUpgradable, zoe, }, instance: { produce: produceInstance }, }: ChainBootstrapSpace, { options: { priceFeedOptions: { AGORIC_INSTANCE_NAME, oracleAddresses, contractTerms, IN_BRAND_NAME, OUT_BRAND_NAME, priceAggregatorRef, }, }, }: {
8
+ options: {
9
+ priceFeedOptions: {
10
+ AGORIC_INSTANCE_NAME: string;
11
+ oracleAddresses: string[];
12
+ contractTerms: import("@agoric/inter-protocol/src/price/fluxAggregatorKit.js").ChainlinkConfig;
13
+ IN_BRAND_NAME: string;
14
+ OUT_BRAND_NAME: string;
15
+ priceAggregatorRef: Installation;
16
+ };
17
+ };
18
+ }): Promise<void>;
19
+ export function getManifestForPriceFeed({ restoreRef }: {
20
+ restoreRef?: ((ref: unknown) => Promise<unknown>) | undefined;
21
+ }, priceFeedOptions: PriceFeedOptions): Promise<{
22
+ manifest: {
23
+ [x: string]: {
24
+ consume: {
25
+ agoricNamesAdmin: string;
26
+ board: string;
27
+ chainStorage: string;
28
+ chainTimerService: string;
29
+ client: string;
30
+ econCharterKit: string;
31
+ highPrioritySendersManager: string;
32
+ namesByAddressAdmin: string;
33
+ priceAuthority: string;
34
+ priceAuthorityAdmin: string;
35
+ startGovernedUpgradable: string;
36
+ zoe: string;
37
+ };
38
+ instance: {
39
+ produce: string;
40
+ };
41
+ namedVat?: undefined;
42
+ oracleBrand?: undefined;
43
+ } | {
44
+ namedVat: {
45
+ consume: {
46
+ agoricNames: string;
47
+ };
48
+ };
49
+ oracleBrand: {
50
+ produce: string;
51
+ };
52
+ consume?: undefined;
53
+ instance?: undefined;
54
+ };
55
+ };
56
+ installations: {
57
+ priceAggregator: Promise<unknown>;
58
+ };
59
+ options: {
60
+ priceFeedOptions: {
61
+ brandIn: any;
62
+ brandOut: any;
63
+ IN_BRAND_NAME: string;
64
+ IN_BRAND_DECIMALS: string;
65
+ OUT_BRAND_NAME: string;
66
+ OUT_BRAND_DECIMALS: string;
67
+ };
68
+ };
69
+ }>;
70
+ export function startPriceFeeds({ consume, produce, installation: { consume: { priceAggregator }, }, }: import("./econ-behaviors.js").EconomyBootstrapPowers, { options: { demoOracleAddresses } }?: {
71
+ options?: {
72
+ demoOracleAddresses?: string[] | undefined;
73
+ } | undefined;
74
+ } | undefined): Promise<void>;
75
+ export type PriceFeedOptions = {
76
+ brandIn?: ERef<Brand<"nat"> | undefined>;
77
+ brandOut?: ERef<Brand<"nat"> | undefined>;
78
+ IN_BRAND_NAME: string;
79
+ IN_BRAND_DECIMALS: string;
80
+ OUT_BRAND_NAME: string;
81
+ OUT_BRAND_DECIMALS: string;
82
+ };
83
+ import { oracleBrandFeedName } from './utils.js';
84
+ //# sourceMappingURL=price-feed-proposal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"price-feed-proposal.d.ts","sourceRoot":"","sources":["price-feed-proposal.js"],"names":[],"mappings":";AA6CO,+HAJI,mBAAmB,GAAG,cAAc,8JACpC;IAAE,OAAO,EAAE;QAAE,gBAAgB,EAAE,gBAAgB,CAAA;KAAE,CAAA;CAAE,GACjD,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAsCjD;AAiBM,iSAdI,mBAAmB,qJACnB;IACV,OAAW,EAAE;QACb,gBAAsB,EAAE;YACxB,oBAA4B,EAAE,MAAM,CAAC;YACrC,eAAuB,EAAE,MAAM,EAAE,CAAC;YAClC,aAAqB,EAAE,OAAO,uDAAuD,EAAE,eAAe,CAAC;YACvG,aAAqB,EAAE,MAAM,CAAC;YAC9B,cAAsB,EAAE,MAAM,CAAC;YAC/B,kBAA0B,EAAE,YAAY,CAAC;SAClC,CAAC;KACH,CAAC;CACH,iBAgKH;AAWM,wDAHJ;IAAmD,UAAU,UAA/C,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC;CAC1C,oBAAQ,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BA1OP,MAAM;+BACF,MAAM;4BACT,MAAM;gCACF,MAAM;;;GAwR7B;AAQK,wGALI,OAAO,qBAAqB,EAAE,sBAAsB;;;;8BA8D9D;+BA/VY;IACZ,OAAW,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC;IAC7C,QAAY,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC;IAC9C,aAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAsB,EAAE,MAAM,CAAC;CAC5B;oCAtBG,YAAY"}
@@ -1,13 +1,20 @@
1
1
  // @ts-nocheck -- lots of type errors. low prio b/c proposals are like scripts
2
- import { E } from '@endo/far';
2
+ import { makeTracer } from '@agoric/internal';
3
3
  import {
4
- makeStorageNodeChild,
5
4
  assertPathSegment,
5
+ makeStorageNodeChild,
6
6
  } from '@agoric/internal/src/lib-chainStorage.js';
7
- import { makeTracer } from '@agoric/internal';
7
+ import { E } from '@endo/far';
8
8
 
9
9
  import { unitAmount } from '@agoric/zoe/src/contractSupport/priceQuote.js';
10
- import { reserveThenDeposit, reserveThenGetNames } from './utils.js';
10
+ import {
11
+ oracleBrandFeedName,
12
+ reserveThenDeposit,
13
+ reserveThenGetNames,
14
+ } from './utils.js';
15
+
16
+ // backwards compatibility
17
+ export { oracleBrandFeedName as instanceNameFor };
11
18
 
12
19
  const trace = makeTracer('RunPriceFeed', true);
13
20
 
@@ -20,12 +27,12 @@ const sanitizePathSegment = name => {
20
27
 
21
28
  /**
22
29
  * @typedef {{
23
- * brandIn?: ERef<Brand<'nat'> | undefined>,
24
- * brandOut?: ERef<Brand<'nat'> | undefined>,
25
- * IN_BRAND_NAME: string,
26
- * IN_BRAND_DECIMALS: string,
27
- * OUT_BRAND_NAME: string,
28
- * OUT_BRAND_DECIMALS: string,
30
+ * brandIn?: ERef<Brand<'nat'> | undefined>;
31
+ * brandOut?: ERef<Brand<'nat'> | undefined>;
32
+ * IN_BRAND_NAME: string;
33
+ * IN_BRAND_DECIMALS: string;
34
+ * OUT_BRAND_NAME: string;
35
+ * OUT_BRAND_DECIMALS: string;
29
36
  * }} PriceFeedOptions
30
37
  */
31
38
 
@@ -33,7 +40,7 @@ const sanitizePathSegment = name => {
33
40
  * Create inert brands (no mint or issuer) referred to by price oracles.
34
41
  *
35
42
  * @param {ChainBootstrapSpace & NamedVatPowers} space
36
- * @param {{options: {priceFeedOptions: PriceFeedOptions}}} opt
43
+ * @param {{ options: { priceFeedOptions: PriceFeedOptions } }} opt
37
44
  * @returns {Promise<[Brand<'nat'>, Brand<'nat'>]>}
38
45
  */
39
46
  export const ensureOracleBrands = async (
@@ -56,13 +63,10 @@ export const ensureOracleBrands = async (
56
63
  },
57
64
  },
58
65
  ) => {
59
- trace('ensureOracleBrands');
60
-
61
66
  const updateFreshBrand = async (brand, name, decimals) => {
62
67
  let b = await brand;
63
68
  if (!b) {
64
69
  // not 1st await
65
- // eslint-disable-next-line @jessie.js/no-nested-await
66
70
  b = await E(agoricNames).provideInertBrand(
67
71
  name,
68
72
  harden({ decimalPlaces: parseInt(decimals, 10) }),
@@ -79,7 +83,18 @@ export const ensureOracleBrands = async (
79
83
 
80
84
  /**
81
85
  * @param {ChainBootstrapSpace} powers
82
- * @param {{options: {priceFeedOptions: {AGORIC_INSTANCE_NAME: string, oracleAddresses: string[], contractTerms: import('@agoric/inter-protocol/src/price/fluxAggregatorKit.js').ChainlinkConfig, IN_BRAND_NAME: string, OUT_BRAND_NAME: string}}}} config
86
+ * @param {{
87
+ * options: {
88
+ * priceFeedOptions: {
89
+ * AGORIC_INSTANCE_NAME: string;
90
+ * oracleAddresses: string[];
91
+ * contractTerms: import('@agoric/inter-protocol/src/price/fluxAggregatorKit.js').ChainlinkConfig;
92
+ * IN_BRAND_NAME: string;
93
+ * OUT_BRAND_NAME: string;
94
+ * priceAggregatorRef: Installation;
95
+ * };
96
+ * };
97
+ * }} config
83
98
  */
84
99
  export const createPriceFeed = async (
85
100
  {
@@ -95,7 +110,9 @@ export const createPriceFeed = async (
95
110
  priceAuthority,
96
111
  priceAuthorityAdmin,
97
112
  startGovernedUpgradable,
113
+ zoe,
98
114
  },
115
+ instance: { produce: produceInstance },
99
116
  },
100
117
  {
101
118
  options: {
@@ -105,30 +122,62 @@ export const createPriceFeed = async (
105
122
  contractTerms,
106
123
  IN_BRAND_NAME,
107
124
  OUT_BRAND_NAME,
125
+ priceAggregatorRef,
108
126
  },
109
127
  },
110
128
  },
111
129
  ) => {
112
- trace('createPriceFeed');
130
+ trace('createPriceFeed', AGORIC_INSTANCE_NAME);
113
131
  const STORAGE_PATH = 'priceFeed';
114
132
 
115
133
  void E(client).assignBundle([_addr => ({ priceAuthority })]);
116
134
 
117
- const timer = await chainTimerService;
135
+ let installationP;
136
+ await null;
137
+ if (priceAggregatorRef) {
138
+ const bundleID = await E.get(priceAggregatorRef).bundleID;
139
+ if (bundleID) {
140
+ installationP = E(zoe).installBundleID(bundleID);
141
+ await E.when(
142
+ installationP,
143
+ installation =>
144
+ E(E(agoricNamesAdmin).lookupAdmin('installation')).update(
145
+ 'priceAggregator',
146
+ installation,
147
+ ),
148
+ err =>
149
+ console.error(
150
+ `🚨 failed to update priceAggregator installation for ${AGORIC_INSTANCE_NAME}`,
151
+ err,
152
+ ),
153
+ );
154
+ }
155
+ }
156
+ if (!installationP) {
157
+ installationP = E.get(
158
+ reserveThenGetNames(E(agoricNamesAdmin).lookupAdmin('installation'), [
159
+ 'priceAggregator',
160
+ ]),
161
+ )[0];
162
+ console.error(
163
+ '🚨 failed to install new fluxAggregator bundle, reusing previous one.',
164
+ );
165
+ }
118
166
 
119
167
  /**
120
- * Values come from economy-template.json, which at this writing had IN:ATOM, OUT:USD
121
- *
122
- * @type {[[Brand<'nat'>, Brand<'nat'>], [Installation<import('@agoric/inter-protocol/src/price/fluxAggregatorContract.js').prepare>]]}
168
+ * @type {[
169
+ * [Brand<'nat'>, Brand<'nat'>],
170
+ * Installation<import('@agoric/inter-protocol/src/price/fluxAggregatorContract.js')['start]>,
171
+ * Timer,
172
+ * ]}
123
173
  */
124
- const [[brandIn, brandOut], [priceAggregator]] = await Promise.all([
174
+ const [[brandIn, brandOut], installation, timer] = await Promise.all([
125
175
  reserveThenGetNames(E(agoricNamesAdmin).lookupAdmin('oracleBrand'), [
126
176
  IN_BRAND_NAME,
127
177
  OUT_BRAND_NAME,
128
178
  ]),
129
- reserveThenGetNames(E(agoricNamesAdmin).lookupAdmin('installation'), [
130
- 'priceAggregator',
131
- ]),
179
+ installationP,
180
+ chainTimerService,
132
181
  ]);
133
182
 
134
183
  const unitAmountIn = await unitAmount(brandIn);
@@ -140,14 +189,11 @@ export const createPriceFeed = async (
140
189
  timer,
141
190
  unitAmountIn,
142
191
  });
143
- trace('got terms');
144
-
145
192
  const label = sanitizePathSegment(AGORIC_INSTANCE_NAME);
146
193
 
147
194
  const storageNode = await makeStorageNodeChild(chainStorage, STORAGE_PATH);
148
195
  const marshaller = await E(board).getReadonlyMarshaller();
149
196
 
150
- trace('awaiting startInstance');
151
197
  const faKit = await E(startGovernedUpgradable)({
152
198
  governedParams: {},
153
199
  privateArgs: {
@@ -158,30 +204,37 @@ export const createPriceFeed = async (
158
204
  },
159
205
  terms,
160
206
  label,
161
- installation: priceAggregator,
207
+ installation,
162
208
  });
163
209
 
164
- E(E(agoricNamesAdmin).lookupAdmin('instance'))
210
+ // Publish price feed in home.priceAuthority.
211
+ const forceReplace = true;
212
+ // Make sure this PA is registered before sharing the instance in agoricNames,
213
+ // which allows contracts that depend on the registry value to wait for it and
214
+ // prevent a race.
215
+ await E(priceAuthorityAdmin).registerPriceAuthority(
216
+ E(faKit.publicFacet).getPriceAuthority(),
217
+ brandIn,
218
+ brandOut,
219
+ forceReplace,
220
+ );
221
+
222
+ await E(E(agoricNamesAdmin).lookupAdmin('instance'))
165
223
  .update(AGORIC_INSTANCE_NAME, faKit.instance)
166
224
  .catch(err =>
167
225
  console.error(`🚨 failed to update ${AGORIC_INSTANCE_NAME}`, err),
168
226
  );
169
227
 
228
+ // being after the above awaits means that when this resolves, the consumer
229
+ // gets notified that the authority is in the registry and its instance is in
230
+ // agoricNames.
231
+ produceInstance[AGORIC_INSTANCE_NAME].resolve(faKit.instance);
232
+
170
233
  E(E.get(econCharterKit).creatorFacet).addInstance(
171
234
  faKit.instance,
172
235
  faKit.governorCreatorFacet,
173
236
  AGORIC_INSTANCE_NAME,
174
237
  );
175
- trace('registered', AGORIC_INSTANCE_NAME, faKit.instance);
176
-
177
- // Publish price feed in home.priceAuthority.
178
- const forceReplace = true;
179
- void E(priceAuthorityAdmin).registerPriceAuthority(
180
- E(faKit.publicFacet).getPriceAuthority(),
181
- brandIn,
182
- brandOut,
183
- forceReplace,
184
- );
185
238
 
186
239
  /**
187
240
  * Initialize a new oracle and send an invitation to administer it.
@@ -190,22 +243,23 @@ export const createPriceFeed = async (
190
243
  */
191
244
  const addOracle = async addr => {
192
245
  const invitation = await E(faKit.creatorFacet).makeOracleInvitation(addr);
193
- await reserveThenDeposit(
194
- `${AGORIC_INSTANCE_NAME} member ${addr}`,
195
- namesByAddressAdmin,
196
- addr,
197
- [invitation],
198
- );
246
+ const debugName = `${AGORIC_INSTANCE_NAME} member ${addr}`;
247
+ await reserveThenDeposit(debugName, namesByAddressAdmin, addr, [
248
+ invitation,
249
+ ]).catch(err => console.error(`failed deposit to ${debugName}`, err));
199
250
  };
200
251
 
201
252
  trace('distributing invitations', oracleAddresses);
202
- await Promise.all(oracleAddresses.map(addOracle));
253
+ // This doesn't resolve until oracle operators create their smart wallets.
254
+ // Don't block bootstrap on it.
255
+ void Promise.all(oracleAddresses.map(addOracle));
203
256
  trace('createPriceFeed complete');
204
257
  };
205
258
 
206
259
  const t = 'priceFeed';
207
260
  /**
208
- * Add a price feed to a running chain, returning the manifest, installations, and options.
261
+ * Add a price feed to a running chain, returning the manifest, installations,
262
+ * and options.
209
263
  *
210
264
  * @param {object} utils
211
265
  * @param {(ref: unknown) => Promise<unknown>} [utils.restoreRef]
@@ -223,14 +277,16 @@ export const getManifestForPriceFeed = async (
223
277
  chainStorage: t,
224
278
  chainTimerService: t,
225
279
  client: t,
226
- contractGovernor: t,
227
280
  econCharterKit: t,
228
- economicCommitteeCreatorFacet: t,
229
281
  highPrioritySendersManager: t,
230
282
  namesByAddressAdmin: t,
231
283
  priceAuthority: t,
232
284
  priceAuthorityAdmin: t,
233
285
  startGovernedUpgradable: t,
286
+ zoe: t,
287
+ },
288
+ instance: {
289
+ produce: t,
234
290
  },
235
291
  },
236
292
  [ensureOracleBrands.name]: {
@@ -243,6 +299,7 @@ export const getManifestForPriceFeed = async (
243
299
  },
244
300
  },
245
301
  installations: {
302
+ // ??? will every eval of price-feed-proposal install priceAggregator ?
246
303
  priceAggregator: restoreRef(priceFeedOptions.priceAggregatorRef),
247
304
  },
248
305
  options: {
@@ -258,7 +315,7 @@ export const getManifestForPriceFeed = async (
258
315
  });
259
316
 
260
317
  /**
261
- * @param {import('./econ-behaviors').EconomyBootstrapPowers} powers
318
+ * @param {import('./econ-behaviors.js').EconomyBootstrapPowers} powers
262
319
  * @param {object} [config]
263
320
  * @param {object} [config.options]
264
321
  * @param {string[]} [config.options.demoOracleAddresses]
@@ -303,7 +360,7 @@ export const startPriceFeeds = async (
303
360
  {
304
361
  options: {
305
362
  priceFeedOptions: {
306
- AGORIC_INSTANCE_NAME: `${inBrandName}-${outBrandName} price feed`,
363
+ AGORIC_INSTANCE_NAME: oracleBrandFeedName(inBrandName, outBrandName),
307
364
  contractTerms: {
308
365
  minSubmissionCount: 2,
309
366
  minSubmissionValue: 1,
@@ -0,0 +1,34 @@
1
+ export function startEconomicCommittee({ consume: { board, chainStorage, diagnostics, zoe }, produce: { economicCommitteeKit, economicCommitteeCreatorFacet }, installation: { consume: { committee }, }, instance: { produce: { economicCommittee }, }, }: import("./econ-behaviors.js").EconomyBootstrapPowers, { options: { econCommitteeOptions } }: {
2
+ options?: {
3
+ econCommitteeOptions?: EconCommitteeOptions | undefined;
4
+ } | undefined;
5
+ }): Promise<void>;
6
+ export const ECON_COMMITTEE_MANIFEST: {
7
+ [x: string]: {
8
+ consume: {
9
+ board: boolean;
10
+ chainStorage: boolean;
11
+ diagnostics: boolean;
12
+ zoe: boolean;
13
+ };
14
+ produce: {
15
+ economicCommitteeKit: boolean;
16
+ economicCommitteeCreatorFacet: string;
17
+ };
18
+ installation: {
19
+ consume: {
20
+ committee: string;
21
+ };
22
+ };
23
+ instance: {
24
+ produce: {
25
+ economicCommittee: string;
26
+ };
27
+ };
28
+ };
29
+ };
30
+ export type EconCommitteeOptions = {
31
+ committeeName?: string | undefined;
32
+ committeeSize?: number | undefined;
33
+ };
34
+ //# sourceMappingURL=startEconCommittee.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startEconCommittee.d.ts","sourceRoot":"","sources":["startEconCommittee.js"],"names":[],"mappings":"AA4BO,4PALI,OAAO,qBAAqB,EAAE,sBAAsB,yCAE5D;IAAwB,OAAO;;;CACoC,iBAyDrE;AAGD;;;;;;;;;;;;;;;;;;;;;;;EAmBG"}
@@ -21,8 +21,8 @@ const sanitizePathSegment = name => {
21
21
  */
22
22
 
23
23
  /**
24
- * @param {import('./econ-behaviors').EconomyBootstrapPowers} powers
25
- * @param {object} [config]
24
+ * @param {import('./econ-behaviors.js').EconomyBootstrapPowers} powers
25
+ * @param {object} config
26
26
  * @param {object} [config.options]
27
27
  * @param {EconCommitteeOptions} [config.options.econCommitteeOptions]
28
28
  */