@agoric/inter-protocol 0.16.2-dev-d492653.0 → 0.16.2-dev-26b0505.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 +16 -16
- package/src/provisionPool.d.ts.map +1 -1
- package/src/provisionPoolKit.d.ts +19 -5
- package/src/provisionPoolKit.d.ts.map +1 -1
- package/src/provisionPoolKit.js +106 -47
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agoric/inter-protocol",
|
|
3
|
-
"version": "0.16.2-dev-
|
|
3
|
+
"version": "0.16.2-dev-26b0505.0+26b0505",
|
|
4
4
|
"description": "Core cryptoeconomy contracts",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.js",
|
|
@@ -31,16 +31,16 @@
|
|
|
31
31
|
},
|
|
32
32
|
"homepage": "https://github.com/Agoric/agoric-sdk#readme",
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@agoric/assert": "0.6.1-dev-
|
|
35
|
-
"@agoric/ertp": "0.16.3-dev-
|
|
36
|
-
"@agoric/governance": "0.10.4-dev-
|
|
37
|
-
"@agoric/internal": "0.3.3-dev-
|
|
38
|
-
"@agoric/notifier": "0.6.3-dev-
|
|
39
|
-
"@agoric/store": "0.9.3-dev-
|
|
40
|
-
"@agoric/time": "0.3.3-dev-
|
|
41
|
-
"@agoric/vat-data": "0.5.3-dev-
|
|
42
|
-
"@agoric/vats": "0.15.2-dev-
|
|
43
|
-
"@agoric/zoe": "0.26.3-dev-
|
|
34
|
+
"@agoric/assert": "0.6.1-dev-26b0505.0+26b0505",
|
|
35
|
+
"@agoric/ertp": "0.16.3-dev-26b0505.0+26b0505",
|
|
36
|
+
"@agoric/governance": "0.10.4-dev-26b0505.0+26b0505",
|
|
37
|
+
"@agoric/internal": "0.3.3-dev-26b0505.0+26b0505",
|
|
38
|
+
"@agoric/notifier": "0.6.3-dev-26b0505.0+26b0505",
|
|
39
|
+
"@agoric/store": "0.9.3-dev-26b0505.0+26b0505",
|
|
40
|
+
"@agoric/time": "0.3.3-dev-26b0505.0+26b0505",
|
|
41
|
+
"@agoric/vat-data": "0.5.3-dev-26b0505.0+26b0505",
|
|
42
|
+
"@agoric/vats": "0.15.2-dev-26b0505.0+26b0505",
|
|
43
|
+
"@agoric/zoe": "0.26.3-dev-26b0505.0+26b0505",
|
|
44
44
|
"@endo/captp": "^4.2.0",
|
|
45
45
|
"@endo/eventual-send": "^1.2.2",
|
|
46
46
|
"@endo/far": "^1.1.2",
|
|
@@ -50,10 +50,10 @@
|
|
|
50
50
|
"jessie.js": "^0.3.4"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
|
-
"@agoric/smart-wallet": "0.5.4-dev-
|
|
54
|
-
"@agoric/swingset-liveslots": "0.10.3-dev-
|
|
55
|
-
"@agoric/swingset-vat": "0.32.3-dev-
|
|
56
|
-
"@agoric/zone": "0.2.3-dev-
|
|
53
|
+
"@agoric/smart-wallet": "0.5.4-dev-26b0505.0+26b0505",
|
|
54
|
+
"@agoric/swingset-liveslots": "0.10.3-dev-26b0505.0+26b0505",
|
|
55
|
+
"@agoric/swingset-vat": "0.32.3-dev-26b0505.0+26b0505",
|
|
56
|
+
"@agoric/zone": "0.2.3-dev-26b0505.0+26b0505",
|
|
57
57
|
"@endo/bundle-source": "^3.2.3",
|
|
58
58
|
"@endo/init": "^1.1.2",
|
|
59
59
|
"@endo/promise-kit": "^1.1.2",
|
|
@@ -84,5 +84,5 @@
|
|
|
84
84
|
"typeCoverage": {
|
|
85
85
|
"atLeast": 95.81
|
|
86
86
|
},
|
|
87
|
-
"gitHead": "
|
|
87
|
+
"gitHead": "26b0505898de4f4bd8bccdfff5f9993c73ac12f5"
|
|
88
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provisionPool.d.ts","sourceRoot":"","sources":["provisionPool.js"],"names":[],"mappings":"AAgBA,8CAA8C;AAE9C,2BAA2B;AAC3B,mBADW,YAAY,CAerB;AAqBK,2BAZI,GAAG,CAAC,cAAc,CAAC;cAEf,OAAO,WAAW,EAAE,IAAI,CACtC,OAAa,8BAA8B,EAAE,IAAI,CAC5C;4BACuB,UAAU;iBACrB,WAAW;;sBAEN,OAAO,uBAAuB,EAAE,mBAAmB;YAE/D,OAAO,kBAAkB,EAAE,OAAO;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"provisionPool.d.ts","sourceRoot":"","sources":["provisionPool.js"],"names":[],"mappings":"AAgBA,8CAA8C;AAE9C,2BAA2B;AAC3B,mBADW,YAAY,CAerB;AAqBK,2BAZI,GAAG,CAAC,cAAc,CAAC;cAEf,OAAO,WAAW,EAAE,IAAI,CACtC,OAAa,8BAA8B,EAAE,IAAI,CAC5C;4BACuB,UAAU;iBACrB,WAAW;;sBAEN,OAAO,uBAAuB,EAAE,mBAAmB;YAE/D,OAAO,kBAAkB,EAAE,OAAO;;;;;;;;;;;;;;;;;gDAsEkqF,QAAQ;;;sDAA4w+B,OAAO,eAAe,EAAE,OAAO,CAAC,SAAQ,IAAK,CAAC;;yCAAvpS,OAAO;;;gDAA48I,SAAS;;;;;;;;;;;;;;;;;;;8EAAqqJ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;8EAAP,OAAO;;;;;;;;;;;;;;;;;;;;;;;;8EAAP,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;iCAAx/9B,0BAA0B;;;;;;2BAAgkC,KAAK,YAA2B,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;GAH9oI;;;;6BAlFY,aAAa,GACzB,eAAmB,CAAC;IACpB,uBAA6B,EAAE,QAAQ,CAAC;CACnC,CAAC;6BAxBoB,eAAe"}
|
|
@@ -245,6 +245,12 @@ export function prepareProvisionPoolKit(baggage: import("@agoric/vat-data").Bagg
|
|
|
245
245
|
onProvisioned(): void;
|
|
246
246
|
/** @param {ERef<Bank>} destBank */
|
|
247
247
|
sendInitialPayment(destBank: ERef<Bank>): Promise<void>;
|
|
248
|
+
/**
|
|
249
|
+
* @param {ERef<Purse>} exchangePurse
|
|
250
|
+
* @param {ERef<Brand>} brand
|
|
251
|
+
*/
|
|
252
|
+
watchCurrentAmount(exchangePurse: ERef<globalThis.Purse>, brand: ERef<globalThis.Brand>): void;
|
|
253
|
+
watchAssetSubscription(): Promise<undefined>;
|
|
248
254
|
/**
|
|
249
255
|
* @param {object} [options]
|
|
250
256
|
* @param {MetricsNotification} [options.metrics]
|
|
@@ -296,7 +302,7 @@ export type PsmInstance = import("@agoric/zoe/src/zoeService/utils.js").Instance
|
|
|
296
302
|
Electorate: "invitation";
|
|
297
303
|
}>;
|
|
298
304
|
}>;
|
|
299
|
-
getInvitation: (name: any) => Promise<Invitation<unknown, undefined>>;
|
|
305
|
+
getInvitation: (name: any) => Promise<Invitation<unknown, undefined>>;
|
|
300
306
|
getLimitedCreatorFacet: () => import("@endo/exo").Guarded<{
|
|
301
307
|
getRewardAllocation(): Allocation;
|
|
302
308
|
makeCollectFeesInvitation(): Promise<Invitation<string, undefined>>;
|
|
@@ -351,7 +357,9 @@ export type ProvisionPoolKitReferences = {
|
|
|
351
357
|
}>>;
|
|
352
358
|
namesByAddressAdmin: ERef<import("@agoric/vats").NameAdmin>;
|
|
353
359
|
walletFactory: ERef<{
|
|
354
|
-
provideSmartWallet(address: string, bank: ERef<import(
|
|
360
|
+
provideSmartWallet(address: string, bank: ERef<import(
|
|
361
|
+
/** @param {ERef<Bank>} destBank */
|
|
362
|
+
"@agoric/vats/src/vat-bank.js").Bank>, namesByAddressAdmin: ERef<import("@agoric/vats/src/types.js").NameAdmin>): Promise<[wallet: {
|
|
355
363
|
handleBridgeAction(actionCapData: import("@endo/marshal").CapData<string | null>, canSpend?: boolean | undefined): Promise<void>;
|
|
356
364
|
getDepositFacet(): import("@endo/exo").Guarded<{
|
|
357
365
|
receive(payment: Payment): Promise<Amount>;
|
|
@@ -449,7 +457,9 @@ export type ProvisionPoolKitReferences = {
|
|
|
449
457
|
repairWalletForIncarnation2(key: object): void;
|
|
450
458
|
}>> & import("@endo/marshal").RemotableObject, isNew: boolean]>;
|
|
451
459
|
} & import("../../../node_modules/@endo/exo/src/get-interface.js").GetInterfaceGuard<{
|
|
452
|
-
provideSmartWallet(address: string, bank: ERef<import(
|
|
460
|
+
provideSmartWallet(address: string, bank: ERef<import(
|
|
461
|
+
/** @param {ERef<Bank>} destBank */
|
|
462
|
+
"@agoric/vats/src/vat-bank.js").Bank>, namesByAddressAdmin: ERef<import("@agoric/vats/src/types.js").NameAdmin>): Promise<[wallet: {
|
|
453
463
|
handleBridgeAction(actionCapData: import("@endo/marshal").CapData<string | null>, canSpend?: boolean | undefined): Promise<void>;
|
|
454
464
|
getDepositFacet(): import("@endo/exo").Guarded<{
|
|
455
465
|
receive(payment: Payment): Promise<Amount>;
|
|
@@ -547,7 +557,9 @@ export type ProvisionPoolKitReferences = {
|
|
|
547
557
|
repairWalletForIncarnation2(key: object): void;
|
|
548
558
|
}>> & import("@endo/marshal").RemotableObject, isNew: boolean]>;
|
|
549
559
|
}> & import("@endo/eventual-send").RemotableBrand<{}, {
|
|
550
|
-
provideSmartWallet(address: string, bank: ERef<import(
|
|
560
|
+
provideSmartWallet(address: string, bank: ERef<import(
|
|
561
|
+
/** @param {ERef<Bank>} destBank */
|
|
562
|
+
"@agoric/vats/src/vat-bank.js").Bank>, namesByAddressAdmin: ERef<import("@agoric/vats/src/types.js").NameAdmin>): Promise<[wallet: {
|
|
551
563
|
handleBridgeAction(actionCapData: import("@endo/marshal").CapData<string | null>, canSpend?: boolean | undefined): Promise<void>;
|
|
552
564
|
getDepositFacet(): import("@endo/exo").Guarded<{
|
|
553
565
|
receive(payment: Payment): Promise<Amount>;
|
|
@@ -645,7 +657,9 @@ export type ProvisionPoolKitReferences = {
|
|
|
645
657
|
repairWalletForIncarnation2(key: object): void;
|
|
646
658
|
}>> & import("@endo/marshal").RemotableObject, isNew: boolean]>;
|
|
647
659
|
} & import("../../../node_modules/@endo/exo/src/get-interface.js").GetInterfaceGuard<{
|
|
648
|
-
provideSmartWallet(address: string, bank: ERef<import(
|
|
660
|
+
provideSmartWallet(address: string, bank: ERef<import(
|
|
661
|
+
/** @param {ERef<Bank>} destBank */
|
|
662
|
+
"@agoric/vats/src/vat-bank.js").Bank>, namesByAddressAdmin: ERef<import("@agoric/vats/src/types.js").NameAdmin>): Promise<[wallet: {
|
|
649
663
|
handleBridgeAction(actionCapData: import("@endo/marshal").CapData<string | null>, canSpend?: boolean | undefined): Promise<void>;
|
|
650
664
|
getDepositFacet(): import("@endo/exo").Guarded<{
|
|
651
665
|
receive(payment: Payment): Promise<Amount>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provisionPoolKit.d.ts","sourceRoot":"","sources":["provisionPoolKit.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"provisionPoolKit.d.ts","sourceRoot":"","sources":["provisionPoolKit.js"],"names":[],"mappings":"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"}
|
package/src/provisionPoolKit.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @ts-check
|
|
2
2
|
import { AmountMath, BrandShape } from '@agoric/ertp';
|
|
3
|
-
import { deeplyFulfilledObject } from '@agoric/internal';
|
|
3
|
+
import { deeplyFulfilledObject, makeTracer } from '@agoric/internal';
|
|
4
4
|
import { UnguardedHelperI } from '@agoric/internal/src/typeGuards.js';
|
|
5
5
|
import {
|
|
6
6
|
observeIteration,
|
|
@@ -21,9 +21,16 @@ import {
|
|
|
21
21
|
import { InstanceHandleShape } from '@agoric/zoe/src/typeGuards.js';
|
|
22
22
|
import { E } from '@endo/far';
|
|
23
23
|
import { Far } from '@endo/marshal';
|
|
24
|
+
import { isUpgradeDisconnection } from '@agoric/internal/src/upgrade-api.js';
|
|
24
25
|
|
|
25
26
|
const { details: X, quote: q, Fail } = assert;
|
|
26
27
|
|
|
28
|
+
const trace = makeTracer('ProvPool');
|
|
29
|
+
|
|
30
|
+
const FIRST_UPPER_KEYWORD = /^[A-Z][a-zA-Z0-9_$]*$/;
|
|
31
|
+
// see https://github.com/Agoric/agoric-sdk/issues/8238
|
|
32
|
+
const FIRST_LOWER_NEAR_KEYWORD = /^[a-z][a-zA-Z0-9_$]*$/;
|
|
33
|
+
|
|
27
34
|
/**
|
|
28
35
|
* @import {ERef} from '@endo/far'
|
|
29
36
|
* @import {Amount} from '@agoric/ertp/src/types.js'
|
|
@@ -73,7 +80,7 @@ export const makeBridgeProvisionTool = (sendInitialPayment, onProvisioned) => {
|
|
|
73
80
|
fromBridge: async obj => {
|
|
74
81
|
obj.type === 'PLEASE_PROVISION' ||
|
|
75
82
|
Fail`Unrecognized request ${obj.type}`;
|
|
76
|
-
|
|
83
|
+
trace('PLEASE_PROVISION', obj);
|
|
77
84
|
const { address, powerFlags } = obj;
|
|
78
85
|
powerFlags.includes(PowerFlags.SMART_WALLET) ||
|
|
79
86
|
Fail`missing SMART_WALLET in powerFlags`;
|
|
@@ -90,7 +97,7 @@ export const makeBridgeProvisionTool = (sendInitialPayment, onProvisioned) => {
|
|
|
90
97
|
if (created) {
|
|
91
98
|
onProvisioned();
|
|
92
99
|
}
|
|
93
|
-
|
|
100
|
+
trace(created ? 'provisioned' : 're-provisioned', address);
|
|
94
101
|
},
|
|
95
102
|
});
|
|
96
103
|
return makeBridgeHandler;
|
|
@@ -149,7 +156,7 @@ export const prepareProvisionPoolKit = (
|
|
|
149
156
|
/** @type {import('@agoric/zoe/src/contractSupport/recorder.js').RecorderKit<MetricsNotification>} */
|
|
150
157
|
const metricsRecorderKit = makeRecorderKit(metricsNode);
|
|
151
158
|
|
|
152
|
-
/** @type {MapStore<Brand
|
|
159
|
+
/** @type {MapStore<ERef<Brand>, PsmInstance>} */
|
|
153
160
|
const brandToPSM = makeScalarBigMapStore('brandToPSM', { durable: true });
|
|
154
161
|
const revivableAddresses = makeScalarBigSetStore('revivableAddresses', {
|
|
155
162
|
durable: true,
|
|
@@ -184,7 +191,7 @@ export const prepareProvisionPoolKit = (
|
|
|
184
191
|
machine: {
|
|
185
192
|
/** @param {string[]} oldAddresses */
|
|
186
193
|
addRevivableAddresses(oldAddresses) {
|
|
187
|
-
|
|
194
|
+
trace('revivableAddresses count', oldAddresses.length);
|
|
188
195
|
this.state.revivableAddresses.addAll(oldAddresses);
|
|
189
196
|
},
|
|
190
197
|
getWalletReviver() {
|
|
@@ -318,7 +325,7 @@ export const prepareProvisionPoolKit = (
|
|
|
318
325
|
.deposit(initialPmt)
|
|
319
326
|
.then(amt => {
|
|
320
327
|
helper.onSendFunds(perAccountInitialAmount);
|
|
321
|
-
|
|
328
|
+
trace('provisionPool sent', amt);
|
|
322
329
|
})
|
|
323
330
|
.catch(reason => {
|
|
324
331
|
console.error(X`initial deposit failed: ${q(reason)}`);
|
|
@@ -327,62 +334,114 @@ export const prepareProvisionPoolKit = (
|
|
|
327
334
|
});
|
|
328
335
|
},
|
|
329
336
|
/**
|
|
330
|
-
* @param {
|
|
331
|
-
* @param {
|
|
337
|
+
* @param {ERef<Purse>} exchangePurse
|
|
338
|
+
* @param {ERef<Brand>} brand
|
|
332
339
|
*/
|
|
333
|
-
|
|
340
|
+
watchCurrentAmount(exchangePurse, brand) {
|
|
334
341
|
const {
|
|
335
342
|
state: { brandToPSM, poolBrand },
|
|
336
343
|
facets: { helper },
|
|
337
344
|
} = this;
|
|
338
345
|
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
346
|
+
void observeNotifier(E(exchangePurse).getCurrentAmountNotifier(), {
|
|
347
|
+
updateState: async amount => {
|
|
348
|
+
trace('provisionPool balance update', amount);
|
|
349
|
+
if (AmountMath.isEmpty(amount) || amount.brand === poolBrand) {
|
|
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
|
+
});
|
|
365
|
+
},
|
|
366
|
+
fail: reason => {
|
|
367
|
+
if (isUpgradeDisconnection(reason)) {
|
|
368
|
+
void helper.watchCurrentAmount(exchangePurse, brand);
|
|
369
|
+
} else {
|
|
370
|
+
console.error(reason);
|
|
371
|
+
}
|
|
372
|
+
},
|
|
373
|
+
});
|
|
374
|
+
},
|
|
375
|
+
watchAssetSubscription() {
|
|
376
|
+
const { facets } = this;
|
|
377
|
+
const { helper } = facets;
|
|
343
378
|
|
|
344
|
-
|
|
379
|
+
/** @param {import('@agoric/vats/src/vat-bank.js').AssetDescriptor} desc */
|
|
380
|
+
const repairDesc = desc => {
|
|
381
|
+
if (desc.issuerName.match(FIRST_UPPER_KEYWORD)) {
|
|
382
|
+
trace(`Saving Issuer ${desc.issuerName}`);
|
|
383
|
+
return desc;
|
|
384
|
+
} else if (desc.issuerName.match(FIRST_LOWER_NEAR_KEYWORD)) {
|
|
385
|
+
const bad = desc.issuerName;
|
|
386
|
+
const goodName = bad.replace(bad[0], bad[0].toUpperCase());
|
|
387
|
+
|
|
388
|
+
trace(
|
|
389
|
+
`Saving Issuer ${desc.issuerName} with repaired keyword ${goodName}`,
|
|
390
|
+
);
|
|
391
|
+
return { ...desc, issuerName: goodName };
|
|
392
|
+
} else {
|
|
393
|
+
console.error(
|
|
394
|
+
`unable to save issuer with illegal keyword: ${desc.issuerName}`,
|
|
395
|
+
);
|
|
396
|
+
return undefined;
|
|
397
|
+
}
|
|
398
|
+
};
|
|
399
|
+
|
|
400
|
+
return observeIteration(
|
|
345
401
|
subscribeEach(E(poolBank).getAssetSubscription()),
|
|
346
402
|
{
|
|
347
403
|
updateState: async desc => {
|
|
348
|
-
|
|
349
|
-
|
|
404
|
+
await null;
|
|
405
|
+
const issuer = zcf.getTerms().issuers[desc.issuerName];
|
|
406
|
+
if (issuer === desc.issuer) {
|
|
407
|
+
trace('provisionPool re-notified of known asset', desc.brand);
|
|
408
|
+
} else {
|
|
409
|
+
const goodDesc = repairDesc(desc);
|
|
410
|
+
if (goodDesc) {
|
|
411
|
+
await zcf.saveIssuer(goodDesc.issuer, goodDesc.issuerName);
|
|
412
|
+
} else {
|
|
413
|
+
console.error(
|
|
414
|
+
`unable to save issuer with illegal keyword: ${desc.issuerName}`,
|
|
415
|
+
);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
|
|
350
419
|
/** @type {ERef<Purse>} */
|
|
351
420
|
const exchangePurse = E(poolBank).getPurse(desc.brand);
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
console.log('provisionPool balance update', amount);
|
|
357
|
-
if (
|
|
358
|
-
AmountMath.isEmpty(amount) ||
|
|
359
|
-
amount.brand === poolBrand
|
|
360
|
-
) {
|
|
361
|
-
return;
|
|
362
|
-
}
|
|
363
|
-
if (!brandToPSM.has(desc.brand)) {
|
|
364
|
-
console.error(
|
|
365
|
-
'funds arrived but no PSM instance',
|
|
366
|
-
desc.brand,
|
|
367
|
-
);
|
|
368
|
-
return;
|
|
369
|
-
}
|
|
370
|
-
const instance = brandToPSM.get(desc.brand);
|
|
371
|
-
const payment = E(exchangePurse).withdraw(amount);
|
|
372
|
-
await helper
|
|
373
|
-
.swap(payment, amount, instance)
|
|
374
|
-
.catch(async reason => {
|
|
375
|
-
console.error(X`swap failed: ${reason}`);
|
|
376
|
-
const resolvedPayment = await payment;
|
|
377
|
-
return E(exchangePurse).deposit(resolvedPayment);
|
|
378
|
-
});
|
|
379
|
-
},
|
|
380
|
-
fail: reason => console.error(reason),
|
|
381
|
-
},
|
|
382
|
-
);
|
|
421
|
+
helper.watchCurrentAmount(exchangePurse, desc.brand);
|
|
422
|
+
},
|
|
423
|
+
fail: _reason => {
|
|
424
|
+
void helper.watchAssetSubscription();
|
|
383
425
|
},
|
|
384
426
|
},
|
|
385
427
|
);
|
|
428
|
+
},
|
|
429
|
+
/**
|
|
430
|
+
* @param {object} [options]
|
|
431
|
+
* @param {MetricsNotification} [options.metrics]
|
|
432
|
+
*/
|
|
433
|
+
start({ metrics } = {}) {
|
|
434
|
+
const {
|
|
435
|
+
state: { poolBrand },
|
|
436
|
+
facets: { helper },
|
|
437
|
+
} = this;
|
|
438
|
+
|
|
439
|
+
// Must match. poolBrand is from durable state and the param is from
|
|
440
|
+
// the contract, so it technically can change between incarnations.
|
|
441
|
+
// That would be a severe bug.
|
|
442
|
+
AmountMath.coerce(poolBrand, params.getPerAccountInitialAmount());
|
|
443
|
+
|
|
444
|
+
void helper.watchAssetSubscription();
|
|
386
445
|
|
|
387
446
|
if (metrics) {
|
|
388
447
|
// Restore state.
|