@agoric/inter-protocol 0.16.2-other-dev-1f26562.0 → 0.16.2-other-dev-3eb1a1d.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 (191) hide show
  1. package/README.md +6 -6
  2. package/package.json +42 -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 +156 -150
  7. package/src/auction/auctionMath.d.ts +17 -0
  8. package/src/auction/auctionMath.d.ts.map +1 -0
  9. package/src/auction/auctionMath.js +81 -0
  10. package/src/auction/auctioneer.d.ts +69 -0
  11. package/src/auction/auctioneer.d.ts.map +1 -0
  12. package/src/auction/auctioneer.js +70 -59
  13. package/src/auction/offerBook.d.ts +45 -0
  14. package/src/auction/offerBook.d.ts.map +1 -0
  15. package/src/auction/offerBook.js +13 -12
  16. package/src/auction/params.d.ts +144 -0
  17. package/src/auction/params.d.ts.map +1 -0
  18. package/src/auction/params.js +10 -9
  19. package/src/auction/scheduleMath.d.ts +5 -0
  20. package/src/auction/scheduleMath.d.ts.map +1 -0
  21. package/src/auction/scheduleMath.js +18 -16
  22. package/src/auction/scheduler.d.ts +50 -0
  23. package/src/auction/scheduler.d.ts.map +1 -0
  24. package/src/auction/scheduler.js +53 -47
  25. package/src/auction/sortedOffers.d.ts +8 -0
  26. package/src/auction/sortedOffers.d.ts.map +1 -0
  27. package/src/auction/sortedOffers.js +10 -9
  28. package/src/auction/util.d.ts +30 -0
  29. package/src/auction/util.d.ts.map +1 -0
  30. package/src/auction/util.js +9 -6
  31. package/src/clientSupport.d.ts +167 -0
  32. package/src/clientSupport.d.ts.map +1 -0
  33. package/src/clientSupport.js +155 -97
  34. package/src/collectFees.d.ts +2 -0
  35. package/src/collectFees.d.ts.map +1 -0
  36. package/src/contractSupport.d.ts +28 -0
  37. package/src/contractSupport.d.ts.map +1 -0
  38. package/src/contractSupport.js +19 -13
  39. package/src/econCommitteeCharter.d.ts +40 -0
  40. package/src/econCommitteeCharter.d.ts.map +1 -0
  41. package/src/econCommitteeCharter.js +21 -20
  42. package/src/feeDistributor.d.ts +224 -0
  43. package/src/feeDistributor.d.ts.map +1 -0
  44. package/src/feeDistributor.js +37 -33
  45. package/src/index.d.ts +2 -0
  46. package/src/index.d.ts.map +1 -0
  47. package/src/index.js +1 -0
  48. package/src/interest-math.d.ts +3 -0
  49. package/src/interest-math.d.ts.map +1 -0
  50. package/src/interest.d.ts +28 -0
  51. package/src/interest.d.ts.map +1 -0
  52. package/src/interest.js +23 -18
  53. package/src/price/README.md +13 -0
  54. package/src/price/fluxAggregatorContract.d.ts +71 -0
  55. package/src/price/fluxAggregatorContract.d.ts.map +1 -0
  56. package/src/price/fluxAggregatorContract.js +64 -55
  57. package/src/price/fluxAggregatorKit.d.ts +103 -0
  58. package/src/price/fluxAggregatorKit.d.ts.map +1 -0
  59. package/src/price/fluxAggregatorKit.js +52 -40
  60. package/src/price/priceOracleKit.d.ts +38 -0
  61. package/src/price/priceOracleKit.d.ts.map +1 -0
  62. package/src/price/priceOracleKit.js +12 -14
  63. package/src/price/roundsManager.d.ts +204 -0
  64. package/src/price/roundsManager.d.ts.map +1 -0
  65. package/src/price/roundsManager.js +131 -85
  66. package/src/proposals/README.md +2 -3
  67. package/src/proposals/add-auction.d.ts +109 -0
  68. package/src/proposals/add-auction.d.ts.map +1 -0
  69. package/src/proposals/add-auction.js +256 -0
  70. package/src/proposals/addAssetToVault.d.ts +173 -0
  71. package/src/proposals/addAssetToVault.d.ts.map +1 -0
  72. package/src/proposals/addAssetToVault.js +192 -40
  73. package/src/proposals/committee-proposal.d.ts +113 -0
  74. package/src/proposals/committee-proposal.d.ts.map +1 -0
  75. package/src/proposals/committee-proposal.js +25 -31
  76. package/src/proposals/core-proposal.d.ts +149 -0
  77. package/src/proposals/core-proposal.d.ts.map +1 -0
  78. package/src/proposals/core-proposal.js +9 -11
  79. package/src/proposals/deploy-price-feeds.d.ts +76 -0
  80. package/src/proposals/deploy-price-feeds.d.ts.map +1 -0
  81. package/src/proposals/deploy-price-feeds.js +316 -0
  82. package/src/proposals/econ-behaviors.d.ts +541 -0
  83. package/src/proposals/econ-behaviors.d.ts.map +1 -0
  84. package/src/proposals/econ-behaviors.js +64 -45
  85. package/src/proposals/price-feed-proposal.d.ts +84 -0
  86. package/src/proposals/price-feed-proposal.d.ts.map +1 -0
  87. package/src/proposals/price-feed-proposal.js +109 -51
  88. package/src/proposals/replace-fee-distributor.d.ts +48 -0
  89. package/src/proposals/replace-fee-distributor.d.ts.map +1 -0
  90. package/src/proposals/replace-fee-distributor.js +195 -0
  91. package/src/proposals/replace-scaledPriceAuthorities.d.ts +30 -0
  92. package/src/proposals/replace-scaledPriceAuthorities.d.ts.map +1 -0
  93. package/src/proposals/replace-scaledPriceAuthorities.js +124 -0
  94. package/src/proposals/replaceElectorate.d.ts +55 -0
  95. package/src/proposals/replaceElectorate.d.ts.map +1 -0
  96. package/src/proposals/replaceElectorate.js +521 -0
  97. package/src/proposals/startEconCommittee.d.ts +34 -0
  98. package/src/proposals/startEconCommittee.d.ts.map +1 -0
  99. package/src/proposals/startEconCommittee.js +2 -2
  100. package/src/proposals/startPSM.d.ts +59 -0
  101. package/src/proposals/startPSM.d.ts.map +1 -0
  102. package/src/proposals/startPSM.js +44 -29
  103. package/src/proposals/upgrade-scaledPriceAuthorities.d.ts +24 -0
  104. package/src/proposals/upgrade-scaledPriceAuthorities.d.ts.map +1 -0
  105. package/src/proposals/upgrade-scaledPriceAuthorities.js +78 -0
  106. package/src/proposals/upgrade-vaults.d.ts +41 -0
  107. package/src/proposals/upgrade-vaults.d.ts.map +1 -0
  108. package/src/proposals/upgrade-vaults.js +202 -0
  109. package/src/proposals/utils.d.ts +19 -0
  110. package/src/proposals/utils.d.ts.map +1 -0
  111. package/src/proposals/utils.js +43 -9
  112. package/src/provisionPool.d.ts +163 -0
  113. package/src/provisionPool.d.ts.map +1 -0
  114. package/src/provisionPool.js +122 -0
  115. package/src/provisionPoolKit.d.ts +359 -0
  116. package/src/provisionPoolKit.d.ts.map +1 -0
  117. package/src/provisionPoolKit.js +522 -0
  118. package/src/psm/psm.d.ts +125 -0
  119. package/src/psm/psm.d.ts.map +1 -0
  120. package/src/psm/psm.js +80 -79
  121. package/src/psm/types-ambient.d.ts +2 -0
  122. package/src/psm/types-ambient.d.ts.map +1 -0
  123. package/src/psm/types-ambient.js +3 -0
  124. package/src/reserve/assetReserve.d.ts +47 -0
  125. package/src/reserve/assetReserve.d.ts.map +1 -0
  126. package/src/reserve/assetReserve.js +28 -19
  127. package/src/reserve/assetReserveKit.d.ts +74 -0
  128. package/src/reserve/assetReserveKit.d.ts.map +1 -0
  129. package/src/reserve/assetReserveKit.js +24 -30
  130. package/src/reserve/params.d.ts +10 -0
  131. package/src/reserve/params.d.ts.map +1 -0
  132. package/src/tokens.d.ts +3 -0
  133. package/src/tokens.d.ts.map +1 -0
  134. package/src/tokens.js +5 -0
  135. package/src/vaultFactory/burn.d.ts +2 -0
  136. package/src/vaultFactory/burn.d.ts.map +1 -0
  137. package/src/vaultFactory/burn.js +1 -1
  138. package/src/vaultFactory/liquidation.d.ts +23 -0
  139. package/src/vaultFactory/liquidation.d.ts.map +1 -0
  140. package/src/vaultFactory/liquidation.js +37 -24
  141. package/src/vaultFactory/math.d.ts +11 -0
  142. package/src/vaultFactory/math.d.ts.map +1 -0
  143. package/src/vaultFactory/math.js +10 -9
  144. package/src/vaultFactory/orderedVaultStore.d.ts +93 -0
  145. package/src/vaultFactory/orderedVaultStore.d.ts.map +1 -0
  146. package/src/vaultFactory/orderedVaultStore.js +8 -11
  147. package/src/vaultFactory/params.d.ts +140 -0
  148. package/src/vaultFactory/params.d.ts.map +1 -0
  149. package/src/vaultFactory/params.js +52 -24
  150. package/src/vaultFactory/prioritizedVaults.d.ts +279 -0
  151. package/src/vaultFactory/prioritizedVaults.d.ts.map +1 -0
  152. package/src/vaultFactory/prioritizedVaults.js +4 -4
  153. package/src/vaultFactory/proceeds.d.ts +35 -0
  154. package/src/vaultFactory/proceeds.d.ts.map +1 -0
  155. package/src/vaultFactory/proceeds.js +26 -18
  156. package/src/vaultFactory/storeUtils.d.ts +25 -0
  157. package/src/vaultFactory/storeUtils.d.ts.map +1 -0
  158. package/src/vaultFactory/storeUtils.js +10 -12
  159. package/src/vaultFactory/types-ambient.d.ts +137 -0
  160. package/src/vaultFactory/types-ambient.d.ts.map +1 -0
  161. package/src/vaultFactory/{types.js → types-ambient.js} +42 -42
  162. package/src/vaultFactory/vault.d.ts +343 -0
  163. package/src/vaultFactory/vault.d.ts.map +1 -0
  164. package/src/vaultFactory/vault.js +105 -99
  165. package/src/vaultFactory/vaultDirector.d.ts +341 -0
  166. package/src/vaultFactory/vaultDirector.d.ts.map +1 -0
  167. package/src/vaultFactory/vaultDirector.js +86 -64
  168. package/src/vaultFactory/vaultFactory.d.ts +202 -0
  169. package/src/vaultFactory/vaultFactory.d.ts.map +1 -0
  170. package/src/vaultFactory/vaultFactory.js +52 -33
  171. package/src/vaultFactory/vaultHolder.d.ts +126 -0
  172. package/src/vaultFactory/vaultHolder.d.ts.map +1 -0
  173. package/src/vaultFactory/vaultHolder.js +11 -16
  174. package/src/vaultFactory/vaultKit.d.ts +32 -0
  175. package/src/vaultFactory/vaultKit.d.ts.map +1 -0
  176. package/src/vaultFactory/vaultKit.js +5 -4
  177. package/src/vaultFactory/vaultManager.d.ts +674 -0
  178. package/src/vaultFactory/vaultManager.d.ts.map +1 -0
  179. package/src/vaultFactory/vaultManager.js +257 -158
  180. package/CHANGELOG.md +0 -1041
  181. package/exported.js +0 -2
  182. package/scripts/add-collateral-core.js +0 -112
  183. package/scripts/deploy-contracts.js +0 -100
  184. package/scripts/init-core.js +0 -198
  185. package/scripts/invite-committee-core.js +0 -42
  186. package/scripts/manual-price-feed.js +0 -117
  187. package/scripts/price-feed-core.js +0 -104
  188. package/scripts/start-local-chain.sh +0 -84
  189. package/src/psm/types.js +0 -3
  190. package/src/typeGuards.js +0 -13
  191. 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;IACN,OAAO,EAAE;QACP,gBAAgB,EAAE;YAChB,oBAAoB,EAAE,MAAM,CAAC;YAC7B,eAAe,EAAE,MAAM,EAAE,CAAC;YAC1B,aAAa,EAAE,OAAO,uDAAuD,EAAE,eAAe,CAAC;YAC/F,aAAa,EAAE,MAAM,CAAC;YACtB,cAAc,EAAE,MAAM,CAAC;YACvB,kBAAkB,EAAE,YAAY,CAAC;SAClC,CAAC;KACH,CAAC;CACH,iBAiKH;AAWM,wDAHJ;IAAmD,UAAU,UAA/C,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC;CAC1C,oBAAQ,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BA3OP,MAAM;+BACF,MAAM;4BACT,MAAM;gCACF,MAAM;;;GAyR7B;AAQK,wGALI,OAAO,qBAAqB,EAAE,sBAAsB;;;;8BA8D9D;+BAhWY;IACR,OAAO,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC;IAC1C,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,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,38 @@ 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. reset() in case we're replacing an existing feed.
231
+ produceInstance[AGORIC_INSTANCE_NAME].reset();
232
+ produceInstance[AGORIC_INSTANCE_NAME].resolve(faKit.instance);
233
+
170
234
  E(E.get(econCharterKit).creatorFacet).addInstance(
171
235
  faKit.instance,
172
236
  faKit.governorCreatorFacet,
173
237
  AGORIC_INSTANCE_NAME,
174
238
  );
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
239
 
186
240
  /**
187
241
  * Initialize a new oracle and send an invitation to administer it.
@@ -190,22 +244,23 @@ export const createPriceFeed = async (
190
244
  */
191
245
  const addOracle = async addr => {
192
246
  const invitation = await E(faKit.creatorFacet).makeOracleInvitation(addr);
193
- await reserveThenDeposit(
194
- `${AGORIC_INSTANCE_NAME} member ${addr}`,
195
- namesByAddressAdmin,
196
- addr,
197
- [invitation],
198
- );
247
+ const debugName = `${AGORIC_INSTANCE_NAME} member ${addr}`;
248
+ await reserveThenDeposit(debugName, namesByAddressAdmin, addr, [
249
+ invitation,
250
+ ]).catch(err => console.error(`failed deposit to ${debugName}`, err));
199
251
  };
200
252
 
201
253
  trace('distributing invitations', oracleAddresses);
202
- await Promise.all(oracleAddresses.map(addOracle));
254
+ // This doesn't resolve until oracle operators create their smart wallets.
255
+ // Don't block bootstrap on it.
256
+ void Promise.all(oracleAddresses.map(addOracle));
203
257
  trace('createPriceFeed complete');
204
258
  };
205
259
 
206
260
  const t = 'priceFeed';
207
261
  /**
208
- * Add a price feed to a running chain, returning the manifest, installations, and options.
262
+ * Add a price feed to a running chain, returning the manifest, installations,
263
+ * and options.
209
264
  *
210
265
  * @param {object} utils
211
266
  * @param {(ref: unknown) => Promise<unknown>} [utils.restoreRef]
@@ -223,14 +278,16 @@ export const getManifestForPriceFeed = async (
223
278
  chainStorage: t,
224
279
  chainTimerService: t,
225
280
  client: t,
226
- contractGovernor: t,
227
281
  econCharterKit: t,
228
- economicCommitteeCreatorFacet: t,
229
282
  highPrioritySendersManager: t,
230
283
  namesByAddressAdmin: t,
231
284
  priceAuthority: t,
232
285
  priceAuthorityAdmin: t,
233
286
  startGovernedUpgradable: t,
287
+ zoe: t,
288
+ },
289
+ instance: {
290
+ produce: t,
234
291
  },
235
292
  },
236
293
  [ensureOracleBrands.name]: {
@@ -243,6 +300,7 @@ export const getManifestForPriceFeed = async (
243
300
  },
244
301
  },
245
302
  installations: {
303
+ // ??? will every eval of price-feed-proposal install priceAggregator ?
246
304
  priceAggregator: restoreRef(priceFeedOptions.priceAggregatorRef),
247
305
  },
248
306
  options: {
@@ -258,7 +316,7 @@ export const getManifestForPriceFeed = async (
258
316
  });
259
317
 
260
318
  /**
261
- * @param {import('./econ-behaviors').EconomyBootstrapPowers} powers
319
+ * @param {import('./econ-behaviors.js').EconomyBootstrapPowers} powers
262
320
  * @param {object} [config]
263
321
  * @param {object} [config.options]
264
322
  * @param {string[]} [config.options.demoOracleAddresses]
@@ -303,7 +361,7 @@ export const startPriceFeeds = async (
303
361
  {
304
362
  options: {
305
363
  priceFeedOptions: {
306
- AGORIC_INSTANCE_NAME: `${inBrandName}-${outBrandName} price feed`,
364
+ AGORIC_INSTANCE_NAME: oracleBrandFeedName(inBrandName, outBrandName),
307
365
  contractTerms: {
308
366
  minSubmissionCount: 2,
309
367
  minSubmissionValue: 1,
@@ -0,0 +1,48 @@
1
+ export function replaceFeeDistributor({ consume: { chainTimerService, bankManager, vaultFactoryKit, periodicFeeCollectors, reserveKit, zoe, contractKits: contractKitsP, }, produce: { feeDistributorKit, periodicFeeCollectors: periodicFeeCollectorsP, }, instance: { produce: { feeDistributor: feeDistributorP }, }, installation: { consume: { feeDistributor }, }, issuer: { consume: { [Stable.symbol]: centralIssuerP }, }, brand: { consume: { [Stable.symbol]: centralBrandP }, }, }: import("./econ-behaviors").EconomyBootstrapPowers, { options }: {
2
+ options: {
3
+ keywordShares: Record<string, bigint>;
4
+ collectionInterval: bigint;
5
+ };
6
+ }): Promise<void>;
7
+ export function getManifestForReplaceFeeDistributor(_: any, feeDistributorOptions: any): Promise<{
8
+ manifest: {
9
+ [x: string]: {
10
+ consume: {
11
+ chainTimerService: string;
12
+ bankManager: string;
13
+ vaultFactoryKit: string;
14
+ periodicFeeCollectors: string;
15
+ reserveKit: string;
16
+ zoe: string;
17
+ contractKits: string;
18
+ };
19
+ produce: {
20
+ feeDistributorKit: string;
21
+ periodicFeeCollectors: string;
22
+ };
23
+ instance: {
24
+ produce: {
25
+ feeDistributor: string;
26
+ };
27
+ };
28
+ installation: {
29
+ consume: {
30
+ feeDistributor: string;
31
+ };
32
+ };
33
+ issuer: {
34
+ consume: {
35
+ IST: string;
36
+ };
37
+ };
38
+ brand: {
39
+ consume: {
40
+ IST: string;
41
+ };
42
+ };
43
+ };
44
+ };
45
+ options: any;
46
+ }>;
47
+ import { Stable } from '@agoric/internal/src/tokens.js';
48
+ //# sourceMappingURL=replace-fee-distributor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replace-fee-distributor.d.ts","sourceRoot":"","sources":["replace-fee-distributor.js"],"names":[],"mappings":"AAkBO,geARI,OAAO,kBAAkB,EAAE,sBAAsB,eACjD;IACN,OAAO,EAAE;QACP,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtC,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;CACH,iBA4IH;AAIM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCL;uBAjMqB,gCAAgC"}