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