@agoric/inter-protocol 0.16.2-other-dev-3eb1a1d.0 → 0.16.2-other-dev-fbe72e7.0.fbe72e7
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 +36 -35
- package/src/auction/auctionBook.d.ts +6 -6
- package/src/auction/auctionBook.d.ts.map +1 -1
- package/src/auction/auctionBook.js +51 -26
- package/src/auction/auctionMath.d.ts +1 -1
- package/src/auction/auctionMath.d.ts.map +1 -1
- package/src/auction/auctioneer.d.ts +5 -4
- package/src/auction/auctioneer.d.ts.map +1 -1
- package/src/auction/auctioneer.js +2 -0
- package/src/auction/offerBook.d.ts +3 -2
- package/src/auction/offerBook.d.ts.map +1 -1
- package/src/auction/offerBook.js +5 -1
- package/src/auction/params.d.ts +2 -1
- package/src/auction/params.d.ts.map +1 -1
- package/src/auction/params.js +1 -0
- package/src/auction/scheduler.d.ts +1 -1
- package/src/auction/util.d.ts +2 -1
- package/src/auction/util.d.ts.map +1 -1
- package/src/auction/util.js +4 -1
- package/src/clientSupport.d.ts +1 -0
- package/src/clientSupport.d.ts.map +1 -1
- package/src/clientSupport.js +6 -1
- package/src/contractSupport.d.ts +2 -2
- package/src/contractSupport.d.ts.map +1 -1
- package/src/econCommitteeCharter.d.ts +8 -5
- package/src/econCommitteeCharter.d.ts.map +1 -1
- package/src/econCommitteeCharter.js +4 -0
- package/src/feeDistributor.d.ts +33 -33
- package/src/feeDistributor.d.ts.map +1 -1
- package/src/feeDistributor.js +4 -0
- package/src/interest-math.d.ts +1 -0
- package/src/interest-math.d.ts.map +1 -1
- package/src/interest-math.js +5 -1
- package/src/interest.d.ts +3 -1
- package/src/interest.d.ts.map +1 -1
- package/src/interest.js +2 -5
- package/src/price/README.md +1 -1
- package/src/price/fluxAggregatorContract.d.ts +6 -6
- package/src/price/fluxAggregatorContract.d.ts.map +1 -1
- package/src/price/fluxAggregatorKit.d.ts +6 -5
- package/src/price/fluxAggregatorKit.d.ts.map +1 -1
- package/src/price/fluxAggregatorKit.js +3 -2
- package/src/price/priceOracleKit.d.ts +2 -1
- package/src/price/priceOracleKit.d.ts.map +1 -1
- package/src/price/priceOracleKit.js +5 -1
- package/src/price/roundsManager.d.ts +2 -2
- package/src/price/roundsManager.d.ts.map +1 -1
- package/src/price/roundsManager.js +1 -0
- package/src/proposals/add-auction.js +31 -2
- package/src/proposals/addAssetToVault.js +1 -1
- package/src/proposals/deploy-price-feeds.js +28 -3
- package/src/proposals/econ-behaviors.js +21 -5
- package/src/proposals/replace-fee-distributor.js +5 -2
- package/src/proposals/replaceElectorate.js +105 -16
- package/src/proposals/upgrade-vaults.js +7 -2
- package/src/proposals/utils.d.ts +2 -0
- package/src/proposals/utils.d.ts.map +1 -1
- package/src/proposals/utils.js +24 -1
- package/src/proposals/withdraw-reserve-proposal.js +63 -0
- package/src/provisionPool.d.ts +19 -113
- package/src/provisionPool.d.ts.map +1 -1
- package/src/provisionPool.js +29 -13
- package/src/provisionPoolKit.d.ts +36 -266
- package/src/provisionPoolKit.d.ts.map +1 -1
- package/src/provisionPoolKit.js +193 -107
- package/src/psm/psm.d.ts +15 -7
- package/src/psm/psm.d.ts.map +1 -1
- package/src/psm/psm.js +6 -1
- package/src/reserve/assetReserve.d.ts +15 -4
- package/src/reserve/assetReserve.d.ts.map +1 -1
- package/src/reserve/assetReserve.js +16 -17
- package/src/reserve/assetReserveKit.d.ts +32 -3
- package/src/reserve/assetReserveKit.d.ts.map +1 -1
- package/src/reserve/assetReserveKit.js +110 -2
- package/src/reserve/params.d.ts +9 -3
- package/src/reserve/params.d.ts.map +1 -1
- package/src/reserve/params.js +8 -2
- package/src/vaultFactory/burn.d.ts +1 -1
- package/src/vaultFactory/burn.d.ts.map +1 -1
- package/src/vaultFactory/liquidation.d.ts +2 -0
- package/src/vaultFactory/liquidation.d.ts.map +1 -1
- package/src/vaultFactory/liquidation.js +5 -5
- package/src/vaultFactory/math.d.ts +1 -1
- package/src/vaultFactory/math.d.ts.map +1 -1
- package/src/vaultFactory/math.js +1 -1
- package/src/vaultFactory/orderedVaultStore.d.ts +19 -18
- package/src/vaultFactory/orderedVaultStore.d.ts.map +1 -1
- package/src/vaultFactory/orderedVaultStore.js +4 -2
- package/src/vaultFactory/params.d.ts +5 -2
- package/src/vaultFactory/params.d.ts.map +1 -1
- package/src/vaultFactory/params.js +5 -2
- package/src/vaultFactory/prioritizedVaults.d.ts +58 -57
- package/src/vaultFactory/prioritizedVaults.d.ts.map +1 -1
- package/src/vaultFactory/prioritizedVaults.js +5 -2
- package/src/vaultFactory/storeUtils.d.ts +2 -2
- package/src/vaultFactory/storeUtils.d.ts.map +1 -1
- package/src/vaultFactory/types-ambient.d.ts +2 -2
- package/src/vaultFactory/types-ambient.d.ts.map +1 -1
- package/src/vaultFactory/types-ambient.js +5 -2
- package/src/vaultFactory/vault.d.ts +11 -10
- package/src/vaultFactory/vault.d.ts.map +1 -1
- package/src/vaultFactory/vault.js +2 -1
- package/src/vaultFactory/vaultDirector.d.ts +53 -47
- package/src/vaultFactory/vaultDirector.d.ts.map +1 -1
- package/src/vaultFactory/vaultDirector.js +10 -2
- package/src/vaultFactory/vaultFactory.d.ts +63 -15
- package/src/vaultFactory/vaultFactory.d.ts.map +1 -1
- package/src/vaultFactory/vaultFactory.js +6 -2
- package/src/vaultFactory/vaultHolder.d.ts +68 -24
- package/src/vaultFactory/vaultHolder.d.ts.map +1 -1
- package/src/vaultFactory/vaultHolder.js +4 -0
- package/src/vaultFactory/vaultKit.d.ts +8 -7
- package/src/vaultFactory/vaultKit.d.ts.map +1 -1
- package/src/vaultFactory/vaultKit.js +5 -1
- package/src/vaultFactory/vaultManager.d.ts +65 -63
- package/src/vaultFactory/vaultManager.d.ts.map +1 -1
- package/src/vaultFactory/vaultManager.js +58 -38
- package/src/proposals/add-auction.d.ts +0 -109
- package/src/proposals/add-auction.d.ts.map +0 -1
- package/src/proposals/addAssetToVault.d.ts +0 -173
- package/src/proposals/addAssetToVault.d.ts.map +0 -1
- package/src/proposals/committee-proposal.d.ts +0 -113
- package/src/proposals/committee-proposal.d.ts.map +0 -1
- package/src/proposals/core-proposal.d.ts +0 -149
- package/src/proposals/core-proposal.d.ts.map +0 -1
- package/src/proposals/deploy-price-feeds.d.ts +0 -76
- package/src/proposals/deploy-price-feeds.d.ts.map +0 -1
- package/src/proposals/econ-behaviors.d.ts +0 -541
- package/src/proposals/econ-behaviors.d.ts.map +0 -1
- package/src/proposals/price-feed-proposal.d.ts +0 -84
- package/src/proposals/price-feed-proposal.d.ts.map +0 -1
- package/src/proposals/replace-fee-distributor.d.ts +0 -48
- package/src/proposals/replace-fee-distributor.d.ts.map +0 -1
- package/src/proposals/replace-scaledPriceAuthorities.d.ts +0 -30
- package/src/proposals/replace-scaledPriceAuthorities.d.ts.map +0 -1
- package/src/proposals/replaceElectorate.d.ts +0 -55
- package/src/proposals/replaceElectorate.d.ts.map +0 -1
- package/src/proposals/startEconCommittee.d.ts +0 -34
- package/src/proposals/startEconCommittee.d.ts.map +0 -1
- package/src/proposals/startPSM.d.ts +0 -59
- package/src/proposals/startPSM.d.ts.map +0 -1
- package/src/proposals/upgrade-scaledPriceAuthorities.d.ts +0 -24
- package/src/proposals/upgrade-scaledPriceAuthorities.d.ts.map +0 -1
- package/src/proposals/upgrade-vaults.d.ts +0 -41
- package/src/proposals/upgrade-vaults.d.ts.map +0 -1
package/src/provisionPoolKit.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
import { X, q, Fail } from '@endo/errors';
|
|
3
3
|
import { E } from '@endo/far';
|
|
4
|
-
import { Far } from '@endo/marshal';
|
|
5
4
|
|
|
6
5
|
import { AmountMath, BrandShape } from '@agoric/ertp';
|
|
7
6
|
import { deeplyFulfilledObject, makeTracer } from '@agoric/internal';
|
|
@@ -15,8 +14,8 @@ import {
|
|
|
15
14
|
M,
|
|
16
15
|
makeScalarBigMapStore,
|
|
17
16
|
makeScalarBigSetStore,
|
|
18
|
-
prepareExoClassKit,
|
|
19
17
|
} from '@agoric/vat-data';
|
|
18
|
+
import { makeAtomicProvider, makeScalarMapStore } from '@agoric/store';
|
|
20
19
|
import { PowerFlags } from '@agoric/vats/src/walletFlags.js';
|
|
21
20
|
import {
|
|
22
21
|
PublicTopicShape,
|
|
@@ -25,16 +24,31 @@ import {
|
|
|
25
24
|
import { InstanceHandleShape } from '@agoric/zoe/src/typeGuards.js';
|
|
26
25
|
import { isUpgradeDisconnection } from '@agoric/internal/src/upgrade-api.js';
|
|
27
26
|
|
|
27
|
+
/**
|
|
28
|
+
* @import {EReturn} from '@endo/far';
|
|
29
|
+
* @import {BridgeMessage} from '@agoric/cosmic-swingset/src/types.js';
|
|
30
|
+
* @import {Amount, Brand, Payment, Purse} from '@agoric/ertp';
|
|
31
|
+
* @import {StorageNode} from '@agoric/internal/src/lib-chainStorage.js';
|
|
32
|
+
* @import {ZCF} from '@agoric/zoe';
|
|
33
|
+
* @import {ERef} from '@endo/far'
|
|
34
|
+
* @import {Bank, BankManager} from '@agoric/vats/src/vat-bank.js'
|
|
35
|
+
* @import {MapStore, SetStore} from '@agoric/store';
|
|
36
|
+
*/
|
|
37
|
+
|
|
28
38
|
const trace = makeTracer('ProvPool');
|
|
29
39
|
|
|
30
40
|
const FIRST_UPPER_KEYWORD = /^[A-Z][a-zA-Z0-9_$]*$/;
|
|
31
41
|
// see https://github.com/Agoric/agoric-sdk/issues/8238
|
|
32
42
|
const FIRST_LOWER_NEAR_KEYWORD = /^[a-z][a-zA-Z0-9_$]*$/;
|
|
33
43
|
|
|
44
|
+
// XXX when inferred, error TS2742: cannot be named without a reference to '../../../node_modules/@endo/exo/src/get-interface.js'. This is likely not portable. A type annotation is necessary.
|
|
34
45
|
/**
|
|
35
|
-
* @
|
|
36
|
-
*
|
|
37
|
-
*
|
|
46
|
+
* @typedef {{
|
|
47
|
+
* machine: any;
|
|
48
|
+
* helper: any;
|
|
49
|
+
* forHandler: any;
|
|
50
|
+
* public: any;
|
|
51
|
+
* }} ProvisionPoolKit
|
|
38
52
|
*/
|
|
39
53
|
|
|
40
54
|
/**
|
|
@@ -66,28 +80,48 @@ const FIRST_LOWER_NEAR_KEYWORD = /^[a-z][a-zA-Z0-9_$]*$/;
|
|
|
66
80
|
* Given attenuated access to the funding purse, handle requests to provision
|
|
67
81
|
* smart wallets.
|
|
68
82
|
*
|
|
69
|
-
* @param {(
|
|
70
|
-
* @param {() => void} onProvisioned
|
|
83
|
+
* @param {import('@agoric/zone').Zone} zone
|
|
71
84
|
*/
|
|
72
|
-
export const
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
85
|
+
export const prepareBridgeProvisionTool = zone =>
|
|
86
|
+
zone.exoClass(
|
|
87
|
+
'smartWalletProvisioningHandler',
|
|
88
|
+
M.interface('ProvisionBridgeHandlerMaker', {
|
|
89
|
+
fromBridge: M.callWhen(M.record()).returns(),
|
|
90
|
+
}),
|
|
91
|
+
/**
|
|
92
|
+
* @param {ERef<BankManager>} bankManager
|
|
93
|
+
* @param {ERef<
|
|
94
|
+
* EReturn<
|
|
95
|
+
* import('@agoric/smart-wallet/src/walletFactory.js').start
|
|
96
|
+
* >['creatorFacet']
|
|
97
|
+
* >} walletFactory
|
|
98
|
+
* @param {ERef<import('@agoric/vats').NameAdmin>} namesByAddressAdmin
|
|
99
|
+
* @param {ProvisionPoolKit['forHandler']} forHandler
|
|
100
|
+
*/
|
|
101
|
+
(bankManager, walletFactory, namesByAddressAdmin, forHandler) => ({
|
|
102
|
+
bankManager,
|
|
103
|
+
walletFactory,
|
|
104
|
+
namesByAddressAdmin,
|
|
105
|
+
forHandler,
|
|
106
|
+
}),
|
|
107
|
+
{
|
|
108
|
+
/** @param {BridgeMessage} obj */
|
|
109
|
+
async fromBridge(obj) {
|
|
110
|
+
if (obj.type !== 'PLEASE_PROVISION')
|
|
111
|
+
throw Fail`Unrecognized request ${obj.type}`;
|
|
83
112
|
trace('PLEASE_PROVISION', obj);
|
|
84
113
|
const { address, powerFlags } = obj;
|
|
114
|
+
// XXX expects powerFlags to be an array, but if it's a string then
|
|
115
|
+
// this allows a string that has 'SMART_WALLET' in it.
|
|
85
116
|
powerFlags.includes(PowerFlags.SMART_WALLET) ||
|
|
86
117
|
Fail`missing SMART_WALLET in powerFlags`;
|
|
87
118
|
|
|
119
|
+
const { bankManager, walletFactory, namesByAddressAdmin, forHandler } =
|
|
120
|
+
this.state;
|
|
121
|
+
|
|
88
122
|
const bank = E(bankManager).getBankForAddress(address);
|
|
89
123
|
// only proceed if we can provide funds
|
|
90
|
-
await sendInitialPayment(bank);
|
|
124
|
+
await forHandler.sendInitialPayment(bank);
|
|
91
125
|
|
|
92
126
|
const [_, created] = await E(walletFactory).provideSmartWallet(
|
|
93
127
|
address,
|
|
@@ -95,31 +129,44 @@ export const makeBridgeProvisionTool = (sendInitialPayment, onProvisioned) => {
|
|
|
95
129
|
namesByAddressAdmin,
|
|
96
130
|
);
|
|
97
131
|
if (created) {
|
|
98
|
-
onProvisioned();
|
|
132
|
+
forHandler.onProvisioned();
|
|
99
133
|
}
|
|
100
134
|
trace(created ? 'provisioned' : 're-provisioned', address);
|
|
101
135
|
},
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
};
|
|
136
|
+
},
|
|
137
|
+
);
|
|
105
138
|
|
|
106
139
|
/**
|
|
107
|
-
* @param {import('@agoric/
|
|
140
|
+
* @param {import('@agoric/zone').Zone} zone
|
|
108
141
|
* @param {{
|
|
109
142
|
* makeRecorderKit: import('@agoric/zoe/src/contractSupport/recorder.js').MakeRecorderKit;
|
|
110
143
|
* params: any;
|
|
111
144
|
* poolBank: import('@endo/far').ERef<Bank>;
|
|
112
145
|
* zcf: ZCF;
|
|
146
|
+
* makeBridgeProvisionTool: ReturnType<typeof prepareBridgeProvisionTool>;
|
|
113
147
|
* }} powers
|
|
114
148
|
*/
|
|
115
149
|
export const prepareProvisionPoolKit = (
|
|
116
|
-
|
|
117
|
-
{ makeRecorderKit, params, poolBank, zcf },
|
|
150
|
+
zone,
|
|
151
|
+
{ makeRecorderKit, params, poolBank, zcf, makeBridgeProvisionTool },
|
|
118
152
|
) => {
|
|
119
153
|
const zoe = zcf.getZoeService();
|
|
154
|
+
const ephemeralPurses = makeScalarMapStore('fundingPurseForBrand');
|
|
155
|
+
const purseProvider = makeAtomicProvider(ephemeralPurses);
|
|
156
|
+
const getFundingPurseForBrand = async poolBrand => {
|
|
157
|
+
await null;
|
|
158
|
+
try {
|
|
159
|
+
const purse = await purseProvider.provideAsync(poolBrand, brand =>
|
|
160
|
+
E(poolBank).getPurse(brand),
|
|
161
|
+
);
|
|
162
|
+
return purse;
|
|
163
|
+
} catch (err) {
|
|
164
|
+
trace(`🚨 could not get purse for brand ${poolBrand}`, err);
|
|
165
|
+
throw err;
|
|
166
|
+
}
|
|
167
|
+
};
|
|
120
168
|
|
|
121
|
-
const makeProvisionPoolKitInternal =
|
|
122
|
-
baggage,
|
|
169
|
+
const makeProvisionPoolKitInternal = zone.exoClassKit(
|
|
123
170
|
'ProvisionPoolKit',
|
|
124
171
|
{
|
|
125
172
|
machine: M.interface('ProvisionPoolKit machine', {
|
|
@@ -142,13 +189,14 @@ export const prepareProvisionPoolKit = (
|
|
|
142
189
|
ackWallet: M.call(M.string()).returns(M.boolean()),
|
|
143
190
|
}),
|
|
144
191
|
helper: UnguardedHelperI,
|
|
192
|
+
forHandler: UnguardedHelperI,
|
|
145
193
|
public: M.interface('ProvisionPoolKit public', {
|
|
146
194
|
getPublicTopics: M.call().returns({ metrics: PublicTopicShape }),
|
|
147
195
|
}),
|
|
148
196
|
},
|
|
149
197
|
/**
|
|
150
198
|
* @param {object} opts
|
|
151
|
-
* @param {Purse<'nat'>} opts.fundPurse
|
|
199
|
+
* @param {Purse<'nat'>} [opts.fundPurse]
|
|
152
200
|
* @param {Brand<'nat'>} opts.poolBrand
|
|
153
201
|
* @param {StorageNode} opts.metricsNode
|
|
154
202
|
*/
|
|
@@ -208,23 +256,24 @@ export const prepareProvisionPoolKit = (
|
|
|
208
256
|
const refs = await deeplyFulfilledObject(obj);
|
|
209
257
|
Object.assign(this.state, refs);
|
|
210
258
|
},
|
|
259
|
+
/** @returns {import('@agoric/vats').BridgeHandler} */
|
|
211
260
|
makeHandler() {
|
|
212
261
|
const { bankManager, namesByAddressAdmin, walletFactory } =
|
|
213
262
|
this.state;
|
|
214
263
|
if (!bankManager || !namesByAddressAdmin || !walletFactory) {
|
|
215
264
|
throw Fail`must set references before handling requests`;
|
|
216
265
|
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
() => helper.onProvisioned(),
|
|
222
|
-
);
|
|
223
|
-
return innerMaker({
|
|
266
|
+
|
|
267
|
+
const { forHandler } = this.facets;
|
|
268
|
+
|
|
269
|
+
const provisionHandler = makeBridgeProvisionTool(
|
|
224
270
|
bankManager,
|
|
225
|
-
namesByAddressAdmin,
|
|
226
271
|
walletFactory,
|
|
227
|
-
|
|
272
|
+
namesByAddressAdmin,
|
|
273
|
+
forHandler,
|
|
274
|
+
);
|
|
275
|
+
|
|
276
|
+
return provisionHandler;
|
|
228
277
|
},
|
|
229
278
|
/**
|
|
230
279
|
* @param {Brand} brand
|
|
@@ -302,66 +351,43 @@ export const prepareProvisionPoolKit = (
|
|
|
302
351
|
);
|
|
303
352
|
facets.helper.publishMetrics();
|
|
304
353
|
},
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
const {
|
|
313
|
-
facets: { helper },
|
|
314
|
-
state: { fundPurse, poolBrand },
|
|
315
|
-
} = this;
|
|
316
|
-
const perAccountInitialAmount = /** @type {Amount<'nat'>} */ (
|
|
317
|
-
params.getPerAccountInitialAmount()
|
|
318
|
-
);
|
|
319
|
-
const initialPmt = await E(fundPurse).withdraw(
|
|
320
|
-
perAccountInitialAmount,
|
|
321
|
-
);
|
|
354
|
+
/**
|
|
355
|
+
* @param {Amount} amount
|
|
356
|
+
* @param {ERef<Purse>} srcPurse
|
|
357
|
+
*/
|
|
358
|
+
async onPoolDeposit(amount, srcPurse) {
|
|
359
|
+
const { helper } = this.facets;
|
|
360
|
+
const { brandToPSM, poolBrand } = this.state;
|
|
322
361
|
|
|
323
|
-
const
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
362
|
+
const { brand } = amount;
|
|
363
|
+
if (AmountMath.isEmpty(amount) || brand === poolBrand) {
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
// `amount` doesn't match the current `poolBrand`, so we need to swap
|
|
368
|
+
// it.
|
|
369
|
+
if (!brandToPSM.has(brand)) {
|
|
370
|
+
console.error('funds arrived but no PSM instance', brand);
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
const instance = brandToPSM.get(brand);
|
|
374
|
+
const payment = E(srcPurse).withdraw(amount);
|
|
375
|
+
await helper.swap(payment, amount, instance).catch(async reason => {
|
|
376
|
+
console.error(X`swap failed: ${reason}`);
|
|
377
|
+
const resolvedPayment = await payment;
|
|
378
|
+
return E(srcPurse).deposit(resolvedPayment);
|
|
379
|
+
});
|
|
335
380
|
},
|
|
336
381
|
/**
|
|
337
382
|
* @param {ERef<Purse>} exchangePurse
|
|
338
383
|
* @param {ERef<Brand>} brand
|
|
339
384
|
*/
|
|
340
385
|
watchCurrentAmount(exchangePurse, brand) {
|
|
341
|
-
const {
|
|
342
|
-
state: { brandToPSM, poolBrand },
|
|
343
|
-
facets: { helper },
|
|
344
|
-
} = this;
|
|
345
|
-
|
|
386
|
+
const { helper } = this.facets;
|
|
346
387
|
void observeNotifier(E(exchangePurse).getCurrentAmountNotifier(), {
|
|
347
388
|
updateState: async amount => {
|
|
348
389
|
trace('provisionPool balance update', amount);
|
|
349
|
-
|
|
350
|
-
return;
|
|
351
|
-
}
|
|
352
|
-
if (!brandToPSM.has(brand)) {
|
|
353
|
-
console.error('funds arrived but no PSM instance', brand);
|
|
354
|
-
return;
|
|
355
|
-
}
|
|
356
|
-
const instance = brandToPSM.get(brand);
|
|
357
|
-
const payment = E(exchangePurse).withdraw(amount);
|
|
358
|
-
await helper
|
|
359
|
-
.swap(payment, amount, instance)
|
|
360
|
-
.catch(async reason => {
|
|
361
|
-
console.error(X`swap failed: ${reason}`);
|
|
362
|
-
const resolvedPayment = await payment;
|
|
363
|
-
return E(exchangePurse).deposit(resolvedPayment);
|
|
364
|
-
});
|
|
390
|
+
await helper.onPoolDeposit(amount, exchangePurse);
|
|
365
391
|
},
|
|
366
392
|
fail: reason => {
|
|
367
393
|
if (isUpgradeDisconnection(reason)) {
|
|
@@ -427,40 +453,50 @@ export const prepareProvisionPoolKit = (
|
|
|
427
453
|
);
|
|
428
454
|
},
|
|
429
455
|
/**
|
|
456
|
+
* @param {Brand<'nat'>} poolBrand
|
|
430
457
|
* @param {object} [options]
|
|
431
458
|
* @param {MetricsNotification} [options.metrics]
|
|
432
459
|
*/
|
|
433
|
-
start({ metrics } = {}) {
|
|
434
|
-
const {
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
} = this;
|
|
460
|
+
start(poolBrand, { metrics } = {}) {
|
|
461
|
+
const { facets, state } = this;
|
|
462
|
+
const { helper } = facets;
|
|
463
|
+
const lastPoolBrand = state.poolBrand;
|
|
438
464
|
|
|
439
|
-
//
|
|
440
|
-
//
|
|
441
|
-
// That would be a severe bug.
|
|
465
|
+
// The PerAccountInitialAmount param must use the correct brand for
|
|
466
|
+
// this incarnation.
|
|
442
467
|
AmountMath.coerce(poolBrand, params.getPerAccountInitialAmount());
|
|
443
468
|
|
|
444
|
-
|
|
445
|
-
|
|
469
|
+
// Restore old metrics.
|
|
446
470
|
if (metrics) {
|
|
447
|
-
// Restore state.
|
|
448
|
-
// we publishMetrics() below
|
|
449
471
|
const {
|
|
450
472
|
walletsProvisioned,
|
|
451
473
|
totalMintedProvided,
|
|
452
474
|
totalMintedConverted,
|
|
453
475
|
} = metrics;
|
|
454
476
|
assert.typeof(walletsProvisioned, 'bigint');
|
|
455
|
-
AmountMath.coerce(
|
|
456
|
-
AmountMath.coerce(
|
|
457
|
-
Object.assign(
|
|
477
|
+
AmountMath.coerce(lastPoolBrand, totalMintedProvided);
|
|
478
|
+
AmountMath.coerce(lastPoolBrand, totalMintedConverted);
|
|
479
|
+
Object.assign(state, {
|
|
458
480
|
walletsProvisioned,
|
|
459
481
|
totalMintedProvided,
|
|
460
482
|
totalMintedConverted,
|
|
461
483
|
});
|
|
462
484
|
helper.publishMetrics();
|
|
463
485
|
}
|
|
486
|
+
|
|
487
|
+
// Update as needed when `poolBrand` changes.
|
|
488
|
+
if (poolBrand !== lastPoolBrand) {
|
|
489
|
+
state.poolBrand = poolBrand;
|
|
490
|
+
state.fundPurse = undefined;
|
|
491
|
+
void getFundingPurseForBrand(poolBrand).then(purse =>
|
|
492
|
+
helper.updateFundPurse(purse, poolBrand),
|
|
493
|
+
);
|
|
494
|
+
state.totalMintedProvided = AmountMath.makeEmpty(poolBrand);
|
|
495
|
+
state.totalMintedConverted = AmountMath.makeEmpty(poolBrand);
|
|
496
|
+
helper.publishMetrics();
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
void helper.watchAssetSubscription();
|
|
464
500
|
},
|
|
465
501
|
/**
|
|
466
502
|
* @param {ERef<Payment>} payIn
|
|
@@ -468,10 +504,13 @@ export const prepareProvisionPoolKit = (
|
|
|
468
504
|
* @param {PsmInstance} instance
|
|
469
505
|
*/
|
|
470
506
|
async swap(payIn, amount, instance) {
|
|
507
|
+
await null;
|
|
508
|
+
const { facets, state } = this;
|
|
509
|
+
const { helper } = facets;
|
|
471
510
|
const {
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
} =
|
|
511
|
+
poolBrand,
|
|
512
|
+
fundPurse = await getFundingPurseForBrand(poolBrand),
|
|
513
|
+
} = state;
|
|
475
514
|
const psmPub = E(zoe).getPublicFacet(instance);
|
|
476
515
|
const proposal = harden({ give: { In: amount } });
|
|
477
516
|
const invitation = E(psmPub).makeWantMintedInvitation();
|
|
@@ -481,6 +520,52 @@ export const prepareProvisionPoolKit = (
|
|
|
481
520
|
helper.onTrade(rxd);
|
|
482
521
|
return rxd;
|
|
483
522
|
},
|
|
523
|
+
/**
|
|
524
|
+
* @param {Purse<'nat'>} purse
|
|
525
|
+
* @param {Brand<'nat'>} brand
|
|
526
|
+
*/
|
|
527
|
+
updateFundPurse(purse, brand) {
|
|
528
|
+
const { state } = this;
|
|
529
|
+
if (brand !== state.poolBrand || state.fundPurse) return;
|
|
530
|
+
state.fundPurse = purse;
|
|
531
|
+
},
|
|
532
|
+
},
|
|
533
|
+
forHandler: {
|
|
534
|
+
onProvisioned() {
|
|
535
|
+
const { facets, state } = this;
|
|
536
|
+
state.walletsProvisioned += 1n;
|
|
537
|
+
facets.helper.publishMetrics();
|
|
538
|
+
},
|
|
539
|
+
/** @param {ERef<Bank>} destBank */
|
|
540
|
+
async sendInitialPayment(destBank) {
|
|
541
|
+
await null;
|
|
542
|
+
const { facets, state } = this;
|
|
543
|
+
const { helper } = facets;
|
|
544
|
+
const {
|
|
545
|
+
poolBrand,
|
|
546
|
+
fundPurse = await getFundingPurseForBrand(poolBrand),
|
|
547
|
+
} = state;
|
|
548
|
+
const perAccountInitialAmount = /** @type {Amount<'nat'>} */ (
|
|
549
|
+
params.getPerAccountInitialAmount()
|
|
550
|
+
);
|
|
551
|
+
trace('sendInitialPayment withdrawing', perAccountInitialAmount);
|
|
552
|
+
const initialPmt = await E(fundPurse).withdraw(
|
|
553
|
+
perAccountInitialAmount,
|
|
554
|
+
);
|
|
555
|
+
|
|
556
|
+
const destPurse = E(destBank).getPurse(poolBrand);
|
|
557
|
+
return E(destPurse)
|
|
558
|
+
.deposit(initialPmt)
|
|
559
|
+
.then(amt => {
|
|
560
|
+
helper.onSendFunds(perAccountInitialAmount);
|
|
561
|
+
trace('provisionPool sent', amt);
|
|
562
|
+
})
|
|
563
|
+
.catch(reason => {
|
|
564
|
+
console.error(X`initial deposit failed: ${q(reason)}`);
|
|
565
|
+
void E(fundPurse).deposit(initialPmt);
|
|
566
|
+
throw reason;
|
|
567
|
+
});
|
|
568
|
+
},
|
|
484
569
|
},
|
|
485
570
|
public: {
|
|
486
571
|
getPublicTopics() {
|
|
@@ -506,9 +591,10 @@ export const prepareProvisionPoolKit = (
|
|
|
506
591
|
* @param {object} opts
|
|
507
592
|
* @param {Brand<'nat'>} opts.poolBrand
|
|
508
593
|
* @param {ERef<StorageNode>} opts.storageNode
|
|
594
|
+
* @returns {Promise<ProvisionPoolKit>}
|
|
509
595
|
*/
|
|
510
596
|
const makeProvisionPoolKit = async ({ poolBrand, storageNode }) => {
|
|
511
|
-
const fundPurse = await
|
|
597
|
+
const fundPurse = await getFundingPurseForBrand(poolBrand);
|
|
512
598
|
const metricsNode = await E(storageNode).makeChildNode('metrics');
|
|
513
599
|
|
|
514
600
|
return makeProvisionPoolKitInternal({
|
package/src/psm/psm.d.ts
CHANGED
|
@@ -5,6 +5,10 @@
|
|
|
5
5
|
* economic policies, the fee percentage for trading into and out of the
|
|
6
6
|
* stable token are specified separately.
|
|
7
7
|
*/
|
|
8
|
+
/**
|
|
9
|
+
* @import {EReturn} from '@endo/far';
|
|
10
|
+
* @import {ContractMeta, FeeMintAccess, Installation} from '@agoric/zoe';
|
|
11
|
+
*/
|
|
8
12
|
/**
|
|
9
13
|
* @typedef {object} MetricsNotification Metrics naming scheme is that nouns are
|
|
10
14
|
* present values and past-participles are accumulative.
|
|
@@ -47,7 +51,7 @@ export function start(zcf: ZCF<GovernanceTerms<{
|
|
|
47
51
|
} & {
|
|
48
52
|
Electorate: "invitation";
|
|
49
53
|
}>;
|
|
50
|
-
} &
|
|
54
|
+
} & RemotableObject<`Alleged: ${string}`> & import("@endo/eventual-send").RemotableBrand<{}, {
|
|
51
55
|
get: () => import("@agoric/governance/src/contractGovernance/typedParamManager.js").TypedParamManager<{
|
|
52
56
|
GiveMintedFee: "ratio";
|
|
53
57
|
MintLimit: "amount";
|
|
@@ -56,11 +60,11 @@ export function start(zcf: ZCF<GovernanceTerms<{
|
|
|
56
60
|
Electorate: "invitation";
|
|
57
61
|
}>;
|
|
58
62
|
}>;
|
|
59
|
-
getInvitation: (name: any) => Promise<Invitation
|
|
63
|
+
getInvitation: (name: any) => Promise<globalThis.Invitation>;
|
|
60
64
|
getLimitedCreatorFacet: () => import("@endo/exo").Guarded<{
|
|
61
65
|
getRewardAllocation(): Allocation;
|
|
62
|
-
makeCollectFeesInvitation(): Promise<Invitation<string
|
|
63
|
-
makeRestoreMetricsInvitation(): Promise<Invitation<void, Omit<MetricsNotification, "anchorPoolBalance">>>;
|
|
66
|
+
makeCollectFeesInvitation(): Promise<globalThis.Invitation<string>>;
|
|
67
|
+
makeRestoreMetricsInvitation(): Promise<globalThis.Invitation<void, Omit<MetricsNotification, "anchorPoolBalance">>>;
|
|
64
68
|
}>;
|
|
65
69
|
getGovernedApis: () => GovernedApis;
|
|
66
70
|
getGovernedApiNames: () => string[];
|
|
@@ -85,8 +89,8 @@ export function start(zcf: ZCF<GovernanceTerms<{
|
|
|
85
89
|
getPublicTopics(): {
|
|
86
90
|
metrics: import("@agoric/zoe/src/contractSupport/topics.js").PublicTopic<MetricsNotification>;
|
|
87
91
|
};
|
|
88
|
-
makeWantMintedInvitation(): Promise<Invitation<void, undefined>>;
|
|
89
|
-
makeGiveMintedInvitation(): Promise<Invitation<void, undefined>>;
|
|
92
|
+
makeWantMintedInvitation(): Promise<globalThis.Invitation<void, undefined>>;
|
|
93
|
+
makeGiveMintedInvitation(): Promise<globalThis.Invitation<void, undefined>>;
|
|
90
94
|
}>;
|
|
91
95
|
}>;
|
|
92
96
|
/**
|
|
@@ -120,6 +124,10 @@ export type MetricsNotification = {
|
|
|
120
124
|
*/
|
|
121
125
|
totalMintedProvided: Amount<"nat">;
|
|
122
126
|
};
|
|
123
|
-
export type PsmPublicFacet =
|
|
127
|
+
export type PsmPublicFacet = EReturn<typeof start>["publicFacet"];
|
|
128
|
+
import type { ContractMeta } from '@agoric/zoe';
|
|
129
|
+
import type { FeeMintAccess } from '@agoric/zoe';
|
|
124
130
|
import type { Baggage } from '@agoric/vat-data';
|
|
131
|
+
import type { Installation } from '@agoric/zoe';
|
|
132
|
+
import type { EReturn } from '@endo/far';
|
|
125
133
|
//# sourceMappingURL=psm.d.ts.map
|
package/src/psm/psm.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"psm.d.ts","sourceRoot":"","sources":["psm.js"],"names":[],"mappings":"AAqCA;;;;;;GAMG;AAEH;;;;;;;;;;;;;GAaG;AAEH;;;GAGG;AAEH,2BAA2B;AAC3B,mBADW,YAAY,CAkCrB;AAsBK,2BAlBI,GAAG,CACT,eAAe,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,QAAQ,CAAC;CACrB,CAAC,GAAG;IACH,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,eAAe,EAAE,KAAK,CAAC;CACxB,CACF,eACO;IACN,aAAa,EAAE,aAAa,CAAC;IAC7B,sBAAsB,EAAE,UAAU,CAAC;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,UAAU,CAAC;CACxB,WACO,OAAO
|
|
1
|
+
{"version":3,"file":"psm.d.ts","sourceRoot":"","sources":["psm.js"],"names":[],"mappings":"AAqCA;;;;;;GAMG;AAEH;;;GAGG;AAEH;;;;;;;;;;;;;GAaG;AAEH;;;GAGG;AAEH,2BAA2B;AAC3B,mBADW,YAAY,CAkCrB;AAsBK,2BAlBI,GAAG,CACT,eAAe,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,QAAQ,CAAC;CACrB,CAAC,GAAG;IACH,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,eAAe,EAAE,KAAK,CAAC;CACxB,CACF,eACO;IACN,aAAa,EAAE,aAAa,CAAC;IAC7B,sBAAsB,EAAE,UAAU,CAAC;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,UAAU,CAAC;CACxB,WACO,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkUjB;;;;;;;;;;uBAzYa,MAAM,CAAC,KAAK,CAAC;;;;;uBAEb,MAAM,CAAC,KAAK,CAAC;;;;;oBAEb,MAAM,CAAC,KAAK,CAAC;;;;;yBAEb,MAAM,CAAC,KAAK,CAAC;;;;;yBAEb,MAAM,CAAC,KAAK,CAAC;;6BAoYb,QAAQ,OAAO,KAAK,CAAb,CAAe,aAAa,CAAC;kCAlZU,aAAa;mCAAb,aAAa;6BAoB/C,kBAAkB;kCApBgB,aAAa;6BAD/C,WAAW"}
|
package/src/psm/psm.js
CHANGED
|
@@ -43,6 +43,11 @@ import { makeNatAmountShape } from '../contractSupport.js';
|
|
|
43
43
|
* stable token are specified separately.
|
|
44
44
|
*/
|
|
45
45
|
|
|
46
|
+
/**
|
|
47
|
+
* @import {EReturn} from '@endo/far';
|
|
48
|
+
* @import {ContractMeta, FeeMintAccess, Installation} from '@agoric/zoe';
|
|
49
|
+
*/
|
|
50
|
+
|
|
46
51
|
/**
|
|
47
52
|
* @typedef {object} MetricsNotification Metrics naming scheme is that nouns are
|
|
48
53
|
* present values and past-participles are accumulative.
|
|
@@ -442,4 +447,4 @@ export const start = async (zcf, privateArgs, baggage) => {
|
|
|
442
447
|
};
|
|
443
448
|
harden(start);
|
|
444
449
|
|
|
445
|
-
/** @typedef {
|
|
450
|
+
/** @typedef {EReturn<typeof start>['publicFacet']} PsmPublicFacet */
|
|
@@ -12,14 +12,19 @@ export function start(zcf: ZCF<GovernanceTerms<{}> & {
|
|
|
12
12
|
creatorFacet: GovernedCreatorFacet<import("@endo/exo").Guarded<{
|
|
13
13
|
addIssuer(issuer: Issuer, keyword: string): Promise<void>;
|
|
14
14
|
getAllocations(): Allocation;
|
|
15
|
-
makeShortfallReportingInvitation(): Promise<Invitation<import("@endo/exo").Guarded<{
|
|
15
|
+
makeShortfallReportingInvitation(): Promise<globalThis.Invitation<import("@endo/exo").Guarded<{
|
|
16
16
|
increaseLiquidationShortfall(shortfall: Amount<"nat">): void;
|
|
17
17
|
reduceLiquidationShortfall(reduction: Amount<"nat">): void;
|
|
18
18
|
}>, undefined>>;
|
|
19
|
+
makeSingleWithdrawalInvitation(): Promise<globalThis.Invitation<any, undefined>>;
|
|
20
|
+
makeRepeatableWithdrawalInvitation(): Promise<globalThis.Invitation<{
|
|
21
|
+
invitationMakers: Partial<any>;
|
|
22
|
+
}, undefined>>;
|
|
23
|
+
revokeOutstandingWithdrawalInvitations(): void;
|
|
19
24
|
}>>;
|
|
20
25
|
/** @type {GovernedPublicFacet<typeof assetReserveKit.public>} */
|
|
21
26
|
publicFacet: GovernedPublicFacet<import("@endo/exo").Guarded<{
|
|
22
|
-
makeAddCollateralInvitation(): Promise<Invitation<string, never>>;
|
|
27
|
+
makeAddCollateralInvitation(): Promise<globalThis.Invitation<string, never>>;
|
|
23
28
|
getPublicTopics(): {
|
|
24
29
|
metrics: import("@agoric/zoe/src/contractSupport/topics.js").PublicTopic<import("./assetReserveKit.js").MetricsNotification>;
|
|
25
30
|
};
|
|
@@ -38,10 +43,16 @@ export type AssetReserveLimitedCreatorFacet = {
|
|
|
38
43
|
getAllocations: () => Allocation;
|
|
39
44
|
makeShortfallReportingInvitation: () => Promise<Invitation<ShortfallReporter>>;
|
|
40
45
|
};
|
|
41
|
-
export type AssetReservePublicFacet =
|
|
46
|
+
export type AssetReservePublicFacet = EReturn<typeof start>["publicFacet"];
|
|
42
47
|
/**
|
|
43
48
|
* the creator facet for the governor
|
|
44
49
|
*/
|
|
45
|
-
export type AssetReserveCreatorFacet =
|
|
50
|
+
export type AssetReserveCreatorFacet = EReturn<typeof start>["creatorFacet"];
|
|
51
|
+
export type ReserveContract = ContractOf<typeof start>;
|
|
52
|
+
import type { ContractMeta } from '@agoric/zoe';
|
|
53
|
+
import type { FeeMintAccess } from '@agoric/zoe';
|
|
46
54
|
import type { Baggage } from '@agoric/vat-data';
|
|
55
|
+
import type { Allocation } from '@agoric/zoe';
|
|
56
|
+
import type { EReturn } from '@endo/far';
|
|
57
|
+
import type { ContractOf } from '@agoric/zoe/src/zoeService/utils.js';
|
|
47
58
|
//# sourceMappingURL=assetReserve.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assetReserve.d.ts","sourceRoot":"","sources":["assetReserve.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"assetReserve.d.ts","sourceRoot":"","sources":["assetReserve.js"],"names":[],"mappings":"AAkBA,yCAAyC;AACzC,mBADW,aAAa,OAAO,KAAK,CAAC,CAGnC;AAgCK,2BAbI,GAAG,CACT,eAAe,CAAC,EAAE,CAAC,GAAG;IACpB,YAAY,EAAE,CAAC,2BAA2B,CAAC,CAAC;CAC7C,CACF,eACO;IACN,aAAa,EAAE,aAAa,CAAC;IAC7B,sBAAsB,EAAE,UAAU,CAAC;IACnC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7B,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;CAChC,WACO,OAAO;IAoDd,mEAAmE;kBAAxD,oBAAoB;;;;;;;;;;;;OAAgC;IAE/D,iEAAiE;iBAAtD,mBAAmB;;;;;OAA+B;GAKhE;sCArFY;IACR,4BAA4B,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,0BAA0B,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACzD;;kCAuFU,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI;gCAC3B,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI;;;eAK3B,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI;oBACrC,MAAM,UAAU;sCAChB,MAAM,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;;sCAG5C,QAAQ,OAAO,KAAK,CAAb,CAAe,aAAa,CAAC;;;;uCAErC,QAAQ,OAAO,KAAK,CAAb,CAAe,cAAc,CAAC;8BAIpC,WAAW,OAAO,KAAK,CAAC;kCAvHkC,aAAa;mCAAb,aAAa;6BAkB1D,kBAAkB;gCAlB2B,aAAa;6BAF3D,WAAW;gCACR,qCAAqC"}
|
|
@@ -8,6 +8,12 @@ import {
|
|
|
8
8
|
} from '@agoric/zoe/src/contractSupport/index.js';
|
|
9
9
|
import { prepareAssetReserveKit } from './assetReserveKit.js';
|
|
10
10
|
|
|
11
|
+
/**
|
|
12
|
+
* @import {EReturn} from '@endo/far';
|
|
13
|
+
* @import {ContractOf} from '@agoric/zoe/src/zoeService/utils.js';
|
|
14
|
+
* @import {Allocation, ContractMeta, FeeMintAccess, Installation} from '@agoric/zoe';
|
|
15
|
+
*/
|
|
16
|
+
|
|
11
17
|
const trace = makeTracer('AR', true);
|
|
12
18
|
|
|
13
19
|
/** @type {ContractMeta<typeof start>} */
|
|
@@ -57,22 +63,13 @@ export const start = async (zcf, privateArgs, baggage) => {
|
|
|
57
63
|
privateArgs.marshaller,
|
|
58
64
|
);
|
|
59
65
|
|
|
60
|
-
/** @type {() => Promise<ZCFMint<'nat'>>} */
|
|
61
|
-
const takeFeeMint = async () => {
|
|
62
|
-
if (baggage.has('feeMint')) {
|
|
63
|
-
return baggage.get('feeMint');
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
const feeMintTemp = await zcf.registerFeeMint(
|
|
67
|
-
'Fee',
|
|
68
|
-
privateArgs.feeMintAccess,
|
|
69
|
-
);
|
|
70
|
-
baggage.init('feeMint', feeMintTemp);
|
|
71
|
-
return feeMintTemp;
|
|
72
|
-
};
|
|
73
|
-
trace('awaiting takeFeeMint');
|
|
74
|
-
const feeMint = await takeFeeMint();
|
|
75
66
|
const storageNode = await privateArgs.storageNode;
|
|
67
|
+
|
|
68
|
+
trace('awaiting feeMint');
|
|
69
|
+
const { feeMint } = await provideAll(baggage, {
|
|
70
|
+
feeMint: () => zcf.registerFeeMint('Fee', privateArgs.feeMintAccess),
|
|
71
|
+
});
|
|
72
|
+
|
|
76
73
|
const makeAssetReserveKit = await prepareAssetReserveKit(baggage, {
|
|
77
74
|
feeMint,
|
|
78
75
|
makeRecorderKit,
|
|
@@ -127,8 +124,10 @@ harden(start);
|
|
|
127
124
|
* @property {() => Promise<Invitation<ShortfallReporter>>} makeShortfallReportingInvitation
|
|
128
125
|
*/
|
|
129
126
|
|
|
130
|
-
/** @typedef {
|
|
127
|
+
/** @typedef {EReturn<typeof start>['publicFacet']} AssetReservePublicFacet */
|
|
131
128
|
/**
|
|
132
|
-
* @typedef {
|
|
129
|
+
* @typedef {EReturn<typeof start>['creatorFacet']} AssetReserveCreatorFacet
|
|
133
130
|
* the creator facet for the governor
|
|
134
131
|
*/
|
|
132
|
+
|
|
133
|
+
/** @typedef {ContractOf<typeof start>} ReserveContract */
|