@agoric/inter-protocol 0.16.2-other-dev-8f8782b.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
@@ -0,0 +1,149 @@
1
+ export * from "./econ-behaviors.js";
2
+ export * from "./startPSM.js";
3
+ export * from "./startEconCommittee.js";
4
+ export function storeInterContractStartKits({ consume: { contractKits, governedContractKits, econCharterKit, economicCommitteeKit, feeDistributorKit, auctioneerKit, reserveKit, vaultFactoryKit, }, }: import("./econ-behaviors.js").EconomyBootstrapPowers): Promise<void>;
5
+ export const SIM_CHAIN_MANIFEST: {};
6
+ export function getManifestForEconCommittee({ restoreRef }: {
7
+ restoreRef: any;
8
+ }, { installKeys, econCommitteeOptions }: {
9
+ installKeys: any;
10
+ econCommitteeOptions: any;
11
+ }): {
12
+ manifest: {
13
+ [x: string]: {
14
+ consume: {
15
+ board: boolean;
16
+ chainStorage: boolean;
17
+ diagnostics: boolean;
18
+ zoe: boolean;
19
+ };
20
+ produce: {
21
+ economicCommitteeKit: boolean;
22
+ economicCommitteeCreatorFacet: string;
23
+ };
24
+ installation: {
25
+ consume: {
26
+ committee: string;
27
+ };
28
+ };
29
+ instance: {
30
+ produce: {
31
+ economicCommittee: string;
32
+ };
33
+ };
34
+ };
35
+ };
36
+ installations: {
37
+ contractGovernor: any;
38
+ committee: any;
39
+ binaryVoteCounter: any;
40
+ };
41
+ options: {
42
+ econCommitteeOptions: any;
43
+ };
44
+ };
45
+ export function getManifestForMain({ restoreRef }: {
46
+ restoreRef: any;
47
+ }, { installKeys, vaultFactoryControllerAddress, minInitialPoolLiquidity, referencedUi, }: {
48
+ installKeys: any;
49
+ vaultFactoryControllerAddress: any;
50
+ minInitialPoolLiquidity: any;
51
+ referencedUi: any;
52
+ }): {
53
+ manifest: import("@agoric/vats/src/core/lib-boot.js").BootstrapManifest;
54
+ installations: {
55
+ VaultFactory: any;
56
+ auctioneer: any;
57
+ feeDistributor: any;
58
+ reserve: any;
59
+ };
60
+ options: {
61
+ vaultFactoryControllerAddress: any;
62
+ minInitialPoolLiquidity: any;
63
+ referencedUi: any;
64
+ };
65
+ };
66
+ export function getManifestForInterProtocol({ restoreRef }: {
67
+ restoreRef: any;
68
+ }, { econCommitteeOptions, installKeys, vaultFactoryControllerAddress, minInitialPoolLiquidity, referencedUi, }: {
69
+ econCommitteeOptions: any;
70
+ installKeys: any;
71
+ vaultFactoryControllerAddress: any;
72
+ minInitialPoolLiquidity: any;
73
+ referencedUi: any;
74
+ }): {
75
+ manifest: {
76
+ [x: string]: import("@agoric/vats/src/core/lib-boot.js").BootstrapManifestPermit | {
77
+ consume: {
78
+ board: boolean;
79
+ chainStorage: boolean;
80
+ diagnostics: boolean;
81
+ zoe: boolean;
82
+ };
83
+ produce: {
84
+ economicCommitteeKit: boolean;
85
+ economicCommitteeCreatorFacet: string;
86
+ };
87
+ installation: {
88
+ consume: {
89
+ committee: string;
90
+ };
91
+ };
92
+ instance: {
93
+ produce: {
94
+ economicCommittee: string;
95
+ };
96
+ };
97
+ } | {
98
+ consume: {
99
+ chainTimerService: boolean;
100
+ diagnostics: boolean;
101
+ bankManager: boolean;
102
+ vaultFactoryKit: boolean;
103
+ periodicFeeCollectors: boolean;
104
+ reserveKit: boolean;
105
+ zoe: boolean;
106
+ };
107
+ produce: {
108
+ feeDistributorKit: boolean;
109
+ periodicFeeCollectors: boolean;
110
+ };
111
+ instance: {
112
+ produce: {
113
+ feeDistributor: boolean;
114
+ };
115
+ };
116
+ installation: {
117
+ consume: {
118
+ feeDistributor: boolean;
119
+ };
120
+ };
121
+ issuer: {
122
+ consume: {
123
+ IST: string;
124
+ };
125
+ };
126
+ brand: {
127
+ consume: {
128
+ IST: string;
129
+ };
130
+ };
131
+ };
132
+ };
133
+ installations: {
134
+ VaultFactory: any;
135
+ auctioneer: any;
136
+ feeDistributor: any;
137
+ reserve: any;
138
+ contractGovernor: any;
139
+ committee: any;
140
+ binaryVoteCounter: any;
141
+ };
142
+ options: {
143
+ vaultFactoryControllerAddress: any;
144
+ minInitialPoolLiquidity: any;
145
+ referencedUi: any;
146
+ econCommitteeOptions: any;
147
+ };
148
+ };
149
+ //# sourceMappingURL=core-proposal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-proposal.d.ts","sourceRoot":"","sources":["core-proposal.js"],"names":[],"mappings":";;;AAgBO,wMADK,OAAO,qBAAqB,EAAE,sBAAsB,iBAmC/D;AA6HD,oCAA6C;AAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAeN;AAEM;;;;;;;;;;;;;;;;;;;;EAuBN;AAEM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuCN"}
@@ -1,23 +1,19 @@
1
1
  // @jessie-check
2
2
 
3
- import { Stable } from '@agoric/vats/src/tokens.js';
3
+ import { Stable } from '@agoric/internal/src/tokens.js';
4
4
  import * as econBehaviors from './econ-behaviors.js';
5
5
  import { ECON_COMMITTEE_MANIFEST } from './startEconCommittee.js';
6
6
 
7
7
  export * from './econ-behaviors.js';
8
- // @ts-expect-error Module './econ-behaviors.js' has already exported a member
9
- // named 'EconomyBootstrapPowers'.
10
- export * from './startPSM.js'; // eslint-disable-line import/export
11
- export * from './startEconCommittee.js'; // eslint-disable-line import/export
8
+ export * from './startPSM.js';
9
+ export * from './startEconCommittee.js';
12
10
 
13
11
  // XXX all the startInstance() should use startUpgradable()
14
12
  // or startGovernedUpgradeable() but that would
15
13
  // require updating a lot of tests. So for now, we just
16
14
  // grab the kits afterward and store them.
17
15
 
18
- /**
19
- * @param {import('./econ-behaviors.js').EconomyBootstrapPowers} powers
20
- */
16
+ /** @param {import('./econ-behaviors.js').EconomyBootstrapPowers} powers */
21
17
  export const storeInterContractStartKits = async ({
22
18
  consume: {
23
19
  contractKits,
@@ -31,13 +27,15 @@ export const storeInterContractStartKits = async ({
31
27
  },
32
28
  }) => {
33
29
  /**
34
- * @param {Promise<MapStore<string, {instance: Instance}>>} storeP
35
- * @param {Promise<{instance: Instance}>[]} kitPs
30
+ * @param {Promise<MapStore<Instance, { instance: Instance }>>} storeP
31
+ * @param {Promise<{ instance: Instance }>[]} kitPs
36
32
  */
37
33
  const storeAll = async (storeP, kitPs) => {
38
34
  const store = await storeP;
39
35
  const kits = await Promise.all(kitPs);
40
- kits.forEach(kit => store.init(kit.instance, kit));
36
+ for (const kit of kits) {
37
+ store.init(kit.instance, kit);
38
+ }
41
39
  };
42
40
 
43
41
  await storeAll(contractKits, [
@@ -0,0 +1,76 @@
1
+ /** @type {ChainlinkConfig} */
2
+ export const DEFAULT_CONTRACT_TERMS: ChainlinkConfig;
3
+ export function ensureOracleBrand({ namedVat: { consume: { agoricNames }, }, oracleBrand: { produce: oracleBrandProduce }, }: EconomyBootstrapPowers & NamedVatPowers, { name, decimalPlaces }: {
4
+ name: string;
5
+ decimalPlaces: number;
6
+ }): Promise<Brand<"nat">>;
7
+ export function deployPriceFeeds(powers: EconomyBootstrapPowers & NamedVatPowers, config: {
8
+ options: PriceFeedConfig & {
9
+ priceAggregatorRef: {
10
+ bundleID: string;
11
+ };
12
+ scaledPARef: {
13
+ bundleID: string;
14
+ };
15
+ inBrandsDecimals?: number;
16
+ contractTerms?: ChainlinkConfig;
17
+ outBrandName?: string;
18
+ outBrandDecimals?: number;
19
+ };
20
+ }): Promise<void>;
21
+ export function getManifestForPriceFeeds({ restoreRef: _restoreRef }: {
22
+ restoreRef: any;
23
+ }, priceFeedOptions: PriceFeedConfig & {
24
+ priceAggregatorRef: any;
25
+ }): Promise<{
26
+ manifest: {
27
+ [x: string]: {
28
+ namedVat: string;
29
+ consume: {
30
+ agoricNamesAdmin: string;
31
+ agoricNames: string;
32
+ board: string;
33
+ chainStorage: string;
34
+ chainTimerService: string;
35
+ contractKits: string;
36
+ econCharterKit: string;
37
+ highPrioritySendersManager: string;
38
+ instancePrivateArgs: string;
39
+ namesByAddressAdmin: string;
40
+ priceAuthority: string;
41
+ priceAuthorityAdmin: string;
42
+ startGovernedUpgradable: string;
43
+ startUpgradable: string;
44
+ zoe: string;
45
+ };
46
+ installation: {
47
+ produce: {
48
+ priceAggregator: string;
49
+ };
50
+ };
51
+ instance: {
52
+ produce: string;
53
+ };
54
+ oracleBrand: {
55
+ produce: string;
56
+ };
57
+ produce: {
58
+ priceAuthority8400: string;
59
+ };
60
+ };
61
+ };
62
+ options: {
63
+ oracleAddresses: string[];
64
+ inBrandNames: string[];
65
+ contractTerms?: Partial<ChainlinkConfig>;
66
+ priceAggregatorRef: any;
67
+ };
68
+ }>;
69
+ export type PriceFeedConfig = {
70
+ oracleAddresses: string[];
71
+ inBrandNames: string[];
72
+ contractTerms?: Partial<ChainlinkConfig>;
73
+ };
74
+ import type { ChainlinkConfig } from '@agoric/inter-protocol/src/price/fluxAggregatorKit.js';
75
+ import type { EconomyBootstrapPowers } from './econ-behaviors.js';
76
+ //# sourceMappingURL=deploy-price-feeds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy-price-feeds.d.ts","sourceRoot":"","sources":["deploy-price-feeds.js"],"names":[],"mappings":"AAcA,8BAA8B;AAC9B,qCADW,eAAe,CAQxB;AA4CK,8HAJI,sBAAsB,GAAG,cAAc,2BACvC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GACrC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAmBjC;AA0HM,yCAZI,sBAAsB,GAAG,cAAc,UACvC;IACN,OAAO,EAAE,eAAe,GAAG;QACzB,kBAAkB,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC;QACzC,WAAW,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC;QAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,aAAa,CAAC,EAAE,eAAe,CAAC;QAChC,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH,iBAoEH;AAWM,sEAHJ;IAAmB,UAAU,EAArB,GAAG;CACX,oBAAQ,eAAe,GAAG;IAAE,kBAAkB,EAAE,GAAG,CAAA;CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAxPlC,MAAM,EAAE;sBACX,MAAM,EAAE;wBACN,OAAO,CAAC,eAAe,CAAC;4BAsPM,GAAG;;GAmCpD;8BA5RW;IACR,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;CAC1C;qCAV+B,uDAAuD;4CADhD,qBAAqB"}
@@ -0,0 +1,316 @@
1
+ import { makeTracer } from '@agoric/internal';
2
+ import { makeStorageNodeChild } from '@agoric/internal/src/lib-chainStorage.js';
3
+ import { E } from '@endo/far';
4
+
5
+ import { unitAmount } from '@agoric/zoe/src/contractSupport/priceQuote.js';
6
+ import {
7
+ oracleBrandFeedName,
8
+ reserveThenDeposit,
9
+ sanitizePathSegment,
10
+ } from './utils.js';
11
+ import { replaceScaledPriceAuthorities } from './replace-scaledPriceAuthorities.js';
12
+
13
+ const STORAGE_PATH = 'priceFeed';
14
+
15
+ /** @type {ChainlinkConfig} */
16
+ export const DEFAULT_CONTRACT_TERMS = {
17
+ maxSubmissionCount: 1000,
18
+ minSubmissionCount: 2,
19
+ restartDelay: 1n, // the number of rounds an Oracle has to wait before they can initiate another round
20
+ timeout: 10, // in seconds according to chainTimerService
21
+ minSubmissionValue: 1,
22
+ maxSubmissionValue: 2 ** 256,
23
+ };
24
+
25
+ /** @import {EconomyBootstrapPowers} from './econ-behaviors.js'; */
26
+ /** @import {ChainlinkConfig} from '@agoric/inter-protocol/src/price/fluxAggregatorKit.js'; */
27
+ /** @import {FluxStartFn} from '@agoric/inter-protocol/src/price/fluxAggregatorContract.js'; */
28
+
29
+ const trace = makeTracer('DeployPriceFeed', true);
30
+
31
+ /**
32
+ * @typedef {{
33
+ * oracleAddresses: string[];
34
+ * inBrandNames: string[];
35
+ * contractTerms?: Partial<ChainlinkConfig>;
36
+ * }} PriceFeedConfig
37
+ */
38
+
39
+ /**
40
+ * @param {EconomyBootstrapPowers} powers
41
+ * @param {string} bundleID
42
+ */
43
+ const installPriceAggregator = async (
44
+ {
45
+ consume: { zoe },
46
+ installation: {
47
+ produce: { priceAggregator },
48
+ },
49
+ },
50
+ bundleID,
51
+ ) => {
52
+ /** @type {Installation<FluxStartFn>} */
53
+ const installation = await E(zoe).installBundleID(bundleID);
54
+ priceAggregator.reset();
55
+ priceAggregator.resolve(installation);
56
+ trace('installed priceAggregator', bundleID.slice(0, 'b1-1234567'.length));
57
+ return installation;
58
+ };
59
+
60
+ /**
61
+ * Provide (find/create) inert brands (no mint or issuer) referred to by oracles
62
+ *
63
+ * @param {EconomyBootstrapPowers & NamedVatPowers} space
64
+ * @param {{ name: string; decimalPlaces: number }} opt
65
+ * @returns {Promise<Brand<'nat'>>}
66
+ */
67
+ export const ensureOracleBrand = async (
68
+ {
69
+ namedVat: {
70
+ consume: { agoricNames },
71
+ },
72
+ oracleBrand: { produce: oracleBrandProduce },
73
+ },
74
+ { name, decimalPlaces },
75
+ ) => {
76
+ const brand = E(agoricNames).provideInertBrand(name, {
77
+ assetKind: 'nat',
78
+ decimalPlaces,
79
+ });
80
+
81
+ oracleBrandProduce[name].reset();
82
+ oracleBrandProduce[name].resolve(brand);
83
+ return brand;
84
+ };
85
+
86
+ /**
87
+ * @param {EconomyBootstrapPowers} powers
88
+ * @param {{
89
+ * AGORIC_INSTANCE_NAME: string;
90
+ * contractTerms: import('@agoric/inter-protocol/src/price/fluxAggregatorKit.js').ChainlinkConfig;
91
+ * brandIn: Brand<'nat'>;
92
+ * brandOut: Brand<'nat'>;
93
+ * }} config
94
+ * @param {Installation<FluxStartFn>} installation
95
+ */
96
+ const startPriceAggregatorInstance = async (
97
+ {
98
+ consume: {
99
+ board,
100
+ chainStorage,
101
+ chainTimerService,
102
+ econCharterKit,
103
+ highPrioritySendersManager,
104
+ namesByAddressAdmin,
105
+ startGovernedUpgradable,
106
+ },
107
+ instance: { produce: produceInstance },
108
+ },
109
+ { AGORIC_INSTANCE_NAME, contractTerms, brandIn, brandOut },
110
+ installation,
111
+ ) => {
112
+ trace('startPriceAggregatorInstance', AGORIC_INSTANCE_NAME);
113
+ const label = sanitizePathSegment(AGORIC_INSTANCE_NAME);
114
+
115
+ const feedsStorage = await makeStorageNodeChild(chainStorage, STORAGE_PATH);
116
+ const storageNode = await E(feedsStorage).makeChildNode(label);
117
+ const marshaller = await E(board).getReadonlyMarshaller();
118
+
119
+ const terms = harden({
120
+ ...contractTerms,
121
+ description: AGORIC_INSTANCE_NAME,
122
+ brandIn,
123
+ brandOut,
124
+ // XXX powerful TimerService, see #6003
125
+ timer: await chainTimerService,
126
+ unitAmountIn: await unitAmount(brandIn),
127
+ });
128
+ const privateArgs = {
129
+ highPrioritySendersManager: await highPrioritySendersManager,
130
+ marshaller,
131
+ namesByAddressAdmin,
132
+ storageNode,
133
+ };
134
+ const governedKit = await E(startGovernedUpgradable)({
135
+ governedParams: {},
136
+ privateArgs,
137
+ terms,
138
+ label,
139
+ // @ts-expect-error GovernableStartFn vs. fluxAggregatorContract.js start
140
+ installation,
141
+ });
142
+ produceInstance[AGORIC_INSTANCE_NAME].reset();
143
+ produceInstance[AGORIC_INSTANCE_NAME].resolve(governedKit.instance);
144
+ trace(
145
+ 'new instance',
146
+ label,
147
+ { terms, privateArgs, installation },
148
+ governedKit,
149
+ );
150
+
151
+ await E(E.get(econCharterKit).creatorFacet).addInstance(
152
+ governedKit.instance,
153
+ governedKit.governorCreatorFacet,
154
+ AGORIC_INSTANCE_NAME,
155
+ );
156
+ trace('added', label, 'instance to econCharter');
157
+
158
+ /** @type {import('@agoric/zoe/src/zoeService/utils.js').StartedInstanceKit<FluxStartFn>} */
159
+ // @ts-expect-error
160
+ const { instance, publicFacet, creatorFacet } = governedKit;
161
+
162
+ return harden({ instance, publicFacet, creatorFacet });
163
+ };
164
+
165
+ /**
166
+ * Send invitations to oracle operators for a price feed.
167
+ *
168
+ * @param {EconomyBootstrapPowers} powers
169
+ * @param {{ oracleAddresses: string[]; AGORIC_INSTANCE_NAME: string }} config
170
+ * @param {any} creatorFacet
171
+ */
172
+ const distributeInvitations = async (
173
+ { consume: { namesByAddressAdmin } },
174
+ { oracleAddresses, AGORIC_INSTANCE_NAME },
175
+ creatorFacet,
176
+ ) => {
177
+ /** @param {string} addr */
178
+ const addOracle = async addr => {
179
+ const invitation = await E(creatorFacet).makeOracleInvitation(addr);
180
+ const debugName = `${AGORIC_INSTANCE_NAME} member ${addr}`;
181
+ await reserveThenDeposit(debugName, namesByAddressAdmin, addr, [
182
+ invitation,
183
+ ]).catch(err => console.error(`failed deposit to ${debugName}`, err));
184
+ };
185
+
186
+ trace('distributing invitations', oracleAddresses);
187
+ // This doesn't resolve until oracle operators create their smart wallets.
188
+ // Don't block completion on it.
189
+ void Promise.all(oracleAddresses.map(addOracle));
190
+ trace('createPriceFeed complete');
191
+ };
192
+
193
+ /**
194
+ * @param {EconomyBootstrapPowers & NamedVatPowers} powers
195
+ * @param {{
196
+ * options: PriceFeedConfig & {
197
+ * priceAggregatorRef: { bundleID: string };
198
+ * scaledPARef: { bundleID: string };
199
+ * inBrandsDecimals?: number;
200
+ * contractTerms?: ChainlinkConfig;
201
+ * outBrandName?: string;
202
+ * outBrandDecimals?: number;
203
+ * };
204
+ * }} config
205
+ */
206
+ export const deployPriceFeeds = async (powers, config) => {
207
+ const {
208
+ inBrandNames,
209
+ oracleAddresses,
210
+ contractTerms,
211
+ priceAggregatorRef,
212
+ scaledPARef,
213
+ inBrandsDecimals = 6,
214
+ outBrandName = 'USD',
215
+ outBrandDecimals = 6,
216
+ } = config.options;
217
+ await null;
218
+
219
+ const installation = await installPriceAggregator(
220
+ powers,
221
+ priceAggregatorRef.bundleID,
222
+ );
223
+
224
+ const { priceAuthorityAdmin, priceAuthority } = powers.consume;
225
+
226
+ trace({ oracleAddresses });
227
+ trace({ inBrandNames });
228
+ for (const inBrandName of inBrandNames) {
229
+ const AGORIC_INSTANCE_NAME = oracleBrandFeedName(inBrandName, outBrandName);
230
+ const brandIn = await ensureOracleBrand(powers, {
231
+ name: inBrandName,
232
+ decimalPlaces: inBrandsDecimals,
233
+ });
234
+ const brandOut = await ensureOracleBrand(powers, {
235
+ name: outBrandName,
236
+ decimalPlaces: outBrandDecimals,
237
+ });
238
+ const kit = await startPriceAggregatorInstance(
239
+ powers,
240
+ {
241
+ AGORIC_INSTANCE_NAME,
242
+ brandIn,
243
+ brandOut,
244
+ contractTerms: { ...DEFAULT_CONTRACT_TERMS, ...contractTerms },
245
+ },
246
+ installation,
247
+ );
248
+
249
+ const forceReplace = true;
250
+ await E(priceAuthorityAdmin).registerPriceAuthority(
251
+ E(kit.publicFacet).getPriceAuthority(),
252
+ brandIn,
253
+ brandOut,
254
+ forceReplace,
255
+ );
256
+
257
+ await distributeInvitations(
258
+ powers,
259
+ { oracleAddresses, AGORIC_INSTANCE_NAME },
260
+ kit.creatorFacet,
261
+ );
262
+ }
263
+
264
+ // @ts-expect-error replaceScaledPriceAuthorities uses a subset of the powers.
265
+ await replaceScaledPriceAuthorities(powers, {
266
+ options: { scaledPARef },
267
+ });
268
+
269
+ trace('resolving priceAuthority8400');
270
+ // cf. #8400 QuotePayments storage leak
271
+ powers.produce.priceAuthority8400.resolve(priceAuthority);
272
+ };
273
+
274
+ const t = 'priceFeed';
275
+
276
+ /**
277
+ * Thread price feed upgrade options through from builder to core-eval.
278
+ *
279
+ * @param {object} utils
280
+ * @param {any} utils.restoreRef
281
+ * @param {PriceFeedConfig & { priceAggregatorRef: any }} priceFeedOptions
282
+ */
283
+ export const getManifestForPriceFeeds = async (
284
+ { restoreRef: _restoreRef },
285
+ priceFeedOptions,
286
+ ) => ({
287
+ manifest: {
288
+ [deployPriceFeeds.name]: {
289
+ namedVat: t,
290
+ consume: {
291
+ agoricNamesAdmin: t,
292
+ agoricNames: t,
293
+ board: t,
294
+ chainStorage: t,
295
+ chainTimerService: t,
296
+ contractKits: t,
297
+ econCharterKit: t,
298
+ highPrioritySendersManager: t,
299
+ instancePrivateArgs: t,
300
+ namesByAddressAdmin: t,
301
+ priceAuthority: t,
302
+ priceAuthorityAdmin: t,
303
+ startGovernedUpgradable: t,
304
+ startUpgradable: t,
305
+ zoe: t,
306
+ },
307
+ installation: { produce: { priceAggregator: t } },
308
+ instance: {
309
+ produce: t,
310
+ },
311
+ oracleBrand: { produce: t },
312
+ produce: { priceAuthority8400: t },
313
+ },
314
+ },
315
+ options: { ...priceFeedOptions },
316
+ });