@agoric/inter-protocol 0.16.2-dev-a9d113a.0 → 0.16.2-dev-13a758d.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/price/README.md +13 -0
- package/src/proposals/addAssetToVault.d.ts +8 -9
- package/src/proposals/addAssetToVault.d.ts.map +1 -1
- package/src/proposals/addAssetToVault.js +20 -7
- package/src/proposals/price-feed-proposal.d.ts +2 -1
- package/src/proposals/price-feed-proposal.d.ts.map +1 -1
- package/src/proposals/price-feed-proposal.js +9 -5
- package/src/proposals/utils.d.ts +2 -0
- package/src/proposals/utils.d.ts.map +1 -1
- package/src/proposals/utils.js +6 -0
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-13a758d.0+13a758d",
|
|
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-13a758d.0+13a758d",
|
|
35
|
+
"@agoric/ertp": "0.16.3-dev-13a758d.0+13a758d",
|
|
36
|
+
"@agoric/governance": "0.10.4-dev-13a758d.0+13a758d",
|
|
37
|
+
"@agoric/internal": "0.3.3-dev-13a758d.0+13a758d",
|
|
38
|
+
"@agoric/notifier": "0.6.3-dev-13a758d.0+13a758d",
|
|
39
|
+
"@agoric/store": "0.9.3-dev-13a758d.0+13a758d",
|
|
40
|
+
"@agoric/time": "0.3.3-dev-13a758d.0+13a758d",
|
|
41
|
+
"@agoric/vat-data": "0.5.3-dev-13a758d.0+13a758d",
|
|
42
|
+
"@agoric/vats": "0.15.2-dev-13a758d.0+13a758d",
|
|
43
|
+
"@agoric/zoe": "0.26.3-dev-13a758d.0+13a758d",
|
|
44
44
|
"@endo/captp": "^3.1.4",
|
|
45
45
|
"@endo/eventual-send": "^0.17.5",
|
|
46
46
|
"@endo/far": "^0.2.21",
|
|
@@ -50,10 +50,10 @@
|
|
|
50
50
|
"jessie.js": "^0.3.2"
|
|
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-13a758d.0+13a758d",
|
|
54
|
+
"@agoric/swingset-liveslots": "0.10.3-dev-13a758d.0+13a758d",
|
|
55
|
+
"@agoric/swingset-vat": "0.32.3-dev-13a758d.0+13a758d",
|
|
56
|
+
"@agoric/zone": "0.2.3-dev-13a758d.0+13a758d",
|
|
57
57
|
"@endo/bundle-source": "^2.7.0",
|
|
58
58
|
"@endo/init": "^0.5.59",
|
|
59
59
|
"@endo/promise-kit": "^0.2.59",
|
|
@@ -85,5 +85,5 @@
|
|
|
85
85
|
"typeCoverage": {
|
|
86
86
|
"atLeast": 93.45
|
|
87
87
|
},
|
|
88
|
-
"gitHead": "
|
|
88
|
+
"gitHead": "13a758d01ee151552e5d9af8b7d3fc2cb9d4961f"
|
|
89
89
|
}
|
package/src/price/README.md
CHANGED
|
@@ -4,6 +4,19 @@ This directory contains the `fluxAggregatorKit.js` contract which takes prices a
|
|
|
4
4
|
input and outputs a best known price. There are multiple ways to get the price,
|
|
5
5
|
including a PriceAuthority interface.
|
|
6
6
|
|
|
7
|
+
## Design
|
|
8
|
+
|
|
9
|
+
The authorities are hierarchical. Many authorities can be registered in the priceAuthorityRegistry.
|
|
10
|
+
|
|
11
|
+
For oracles, there must be two: the negotiable brand and the _oracle_ brand (an inert one).
|
|
12
|
+
|
|
13
|
+
The intended flow is that:
|
|
14
|
+
1. a negotiable brand is created (e.g. ATOM)
|
|
15
|
+
2. a price provider says “i can give you quotes for that” and runs price-feed-proposal. That makes “oracleBrands” (which are inert and have a separate identity so that they don’t have the authority to say they’re the real quote for it).
|
|
16
|
+
3. Some higher authority (eg EC, Stakers) decides that should be the quote source for negotiable brand so it registers it under the real brand identity in the registry (with a new instance of a scaledPriceAuthority ).
|
|
17
|
+
|
|
18
|
+
In practice we do these all in one core proposal. And each vault manager is started with a limit on minting to the EC has another way to gate transactions.
|
|
19
|
+
|
|
7
20
|
## Usage
|
|
8
21
|
|
|
9
22
|
See the [Smart Wallet integration test](/packages/inter-protocol/test/smartWallet/test-oracle-integration.js) for how it's used.
|
|
@@ -9,7 +9,7 @@ export function publishInterchainAssetFromBank({ consume: { bankManager, agoricN
|
|
|
9
9
|
interchainAssetOptions: InterchainAssetOptions;
|
|
10
10
|
};
|
|
11
11
|
}): Promise<void>;
|
|
12
|
-
export function registerScaledPriceAuthority({ consume: { agoricNamesAdmin, startUpgradable, priceAuthorityAdmin, priceAuthority, }, }: BootstrapPowers, { options: { interchainAssetOptions } }: {
|
|
12
|
+
export function registerScaledPriceAuthority({ consume: { agoricNamesAdmin, startUpgradable, priceAuthorityAdmin, priceAuthority, }, instance: { produce: produceInstance }, }: BootstrapPowers, { options: { interchainAssetOptions } }: {
|
|
13
13
|
options: {
|
|
14
14
|
interchainAssetOptions: InterchainAssetOptions;
|
|
15
15
|
};
|
|
@@ -45,8 +45,8 @@ export function getManifestForAddAssetToVault({ restoreRef }: {
|
|
|
45
45
|
};
|
|
46
46
|
produce?: undefined;
|
|
47
47
|
installation?: undefined;
|
|
48
|
-
brand?: undefined;
|
|
49
48
|
instance?: undefined;
|
|
49
|
+
brand?: undefined;
|
|
50
50
|
} | {
|
|
51
51
|
consume: {
|
|
52
52
|
bankManager: boolean;
|
|
@@ -63,7 +63,6 @@ export function getManifestForAddAssetToVault({ restoreRef }: {
|
|
|
63
63
|
produce: {
|
|
64
64
|
bankMints: boolean;
|
|
65
65
|
vBankKits: boolean;
|
|
66
|
-
scaledPriceAuthorityKits?: undefined;
|
|
67
66
|
};
|
|
68
67
|
installation: {
|
|
69
68
|
consume: {
|
|
@@ -71,8 +70,8 @@ export function getManifestForAddAssetToVault({ restoreRef }: {
|
|
|
71
70
|
scaledPriceAuthority?: undefined;
|
|
72
71
|
};
|
|
73
72
|
};
|
|
74
|
-
brand?: undefined;
|
|
75
73
|
instance?: undefined;
|
|
74
|
+
brand?: undefined;
|
|
76
75
|
} | {
|
|
77
76
|
consume: {
|
|
78
77
|
agoricNamesAdmin: boolean;
|
|
@@ -86,10 +85,9 @@ export function getManifestForAddAssetToVault({ restoreRef }: {
|
|
|
86
85
|
vaultFactoryKit?: undefined;
|
|
87
86
|
chainTimerService?: undefined;
|
|
88
87
|
};
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
vBankKits?: undefined;
|
|
88
|
+
instance: {
|
|
89
|
+
produce: boolean;
|
|
90
|
+
consume?: undefined;
|
|
93
91
|
};
|
|
94
92
|
installation: {
|
|
95
93
|
consume: {
|
|
@@ -97,8 +95,8 @@ export function getManifestForAddAssetToVault({ restoreRef }: {
|
|
|
97
95
|
mintHolder?: undefined;
|
|
98
96
|
};
|
|
99
97
|
};
|
|
98
|
+
produce?: undefined;
|
|
100
99
|
brand?: undefined;
|
|
101
|
-
instance?: undefined;
|
|
102
100
|
} | {
|
|
103
101
|
consume: {
|
|
104
102
|
auctioneerKit: string;
|
|
@@ -119,6 +117,7 @@ export function getManifestForAddAssetToVault({ restoreRef }: {
|
|
|
119
117
|
};
|
|
120
118
|
instance: {
|
|
121
119
|
consume: boolean;
|
|
120
|
+
produce?: undefined;
|
|
122
121
|
};
|
|
123
122
|
produce?: undefined;
|
|
124
123
|
installation?: undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addAssetToVault.d.ts","sourceRoot":"","sources":["addAssetToVault.js"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"addAssetToVault.d.ts","sourceRoot":"","sources":["addAssetToVault.js"],"names":[],"mappings":";AA6CO,4FALI,eAAe;IAEA,OAAO;QACiB,sBAAsB,EAA7D,sBAAsB;;0BAuBhC;AAQM,yKALI,sBAAsB;IAEP,OAAO;QACiB,sBAAsB,EAA7D,sBAAsB;;kBAoDhC;AAQM,gLALI,eAAe;IAEA,OAAO;QACiB,sBAAsB,EAA7D,sBAAsB;;kBA2GhC;AA+EM,mNAPI,sBAAsB;IAEP,OAAO;QACiB,sBAAsB,EAA7D,sBAAsB;QACmB,cAAc,EAAvD,MAAM,GAAG,MAAM,GAAG,MAAM;QACD,iBAAiB,EAAxC,MAAM;;kBA0EhB;AAEM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8EN;;;;;;;;aAvba,MAAM;;;;;;;;;;;;;;;;qCAQN,OAAO,qBAAqB,EAAE,sBAAsB;uBA3B3C,gCAAgC"}
|
|
@@ -12,8 +12,11 @@ import { Stable } from '@agoric/internal/src/tokens.js';
|
|
|
12
12
|
import { TimeMath } from '@agoric/time/src/timeMath.js';
|
|
13
13
|
import { makePromiseKit } from '@endo/promise-kit';
|
|
14
14
|
|
|
15
|
-
import {
|
|
16
|
-
|
|
15
|
+
import {
|
|
16
|
+
oracleBrandFeedName,
|
|
17
|
+
reserveThenGetNames,
|
|
18
|
+
scaledPriceFeedName,
|
|
19
|
+
} from './utils.js';
|
|
17
20
|
|
|
18
21
|
export * from './startPSM.js';
|
|
19
22
|
|
|
@@ -135,6 +138,7 @@ export const registerScaledPriceAuthority = async (
|
|
|
135
138
|
priceAuthorityAdmin,
|
|
136
139
|
priceAuthority,
|
|
137
140
|
},
|
|
141
|
+
instance: { produce: produceInstance },
|
|
138
142
|
},
|
|
139
143
|
{ options: { interchainAssetOptions } },
|
|
140
144
|
) => {
|
|
@@ -211,9 +215,11 @@ export const registerScaledPriceAuthority = async (
|
|
|
211
215
|
}),
|
|
212
216
|
);
|
|
213
217
|
|
|
218
|
+
const label = scaledPriceFeedName(issuerName);
|
|
219
|
+
|
|
214
220
|
const spaKit = await E(startUpgradable)({
|
|
215
221
|
installation: scaledPriceAuthority,
|
|
216
|
-
label
|
|
222
|
+
label,
|
|
217
223
|
terms,
|
|
218
224
|
});
|
|
219
225
|
|
|
@@ -224,6 +230,11 @@ export const registerScaledPriceAuthority = async (
|
|
|
224
230
|
stableBrand,
|
|
225
231
|
true, // force
|
|
226
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);
|
|
227
238
|
};
|
|
228
239
|
|
|
229
240
|
// wait a short while after end to allow things to settle
|
|
@@ -340,10 +351,12 @@ export const addAssetToVault = async (
|
|
|
340
351
|
[issuerName],
|
|
341
352
|
);
|
|
342
353
|
|
|
343
|
-
const oracleInstanceName = instanceNameFor(oracleBrand, 'USD');
|
|
344
354
|
// don't add the collateral offering to vaultFactory until its price feed is available
|
|
345
355
|
// eslint-disable-next-line no-restricted-syntax -- allow this computed property
|
|
346
|
-
await consumeInstance[
|
|
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)];
|
|
347
360
|
|
|
348
361
|
const auctioneerCreator = E.get(auctioneerKit).creatorFacet;
|
|
349
362
|
const schedules = await E(auctioneerCreator).getSchedule();
|
|
@@ -420,8 +433,8 @@ export const getManifestForAddAssetToVault = (
|
|
|
420
433
|
priceAuthorityAdmin: true,
|
|
421
434
|
priceAuthority: true,
|
|
422
435
|
},
|
|
423
|
-
|
|
424
|
-
|
|
436
|
+
instance: {
|
|
437
|
+
produce: true,
|
|
425
438
|
},
|
|
426
439
|
installation: {
|
|
427
440
|
consume: { scaledPriceAuthority: true },
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export
|
|
1
|
+
export { oracleBrandFeedName as instanceNameFor };
|
|
2
2
|
export function ensureOracleBrands({ namedVat: { consume: { agoricNames }, }, oracleBrand: { produce: oracleBrandProduce }, }: ChainBootstrapSpace & NamedVatPowers, { options: { priceFeedOptions: { brandIn: rawBrandIn, brandOut: rawBrandOut, IN_BRAND_NAME, IN_BRAND_DECIMALS, OUT_BRAND_NAME, OUT_BRAND_DECIMALS, }, }, }: {
|
|
3
3
|
options: {
|
|
4
4
|
priceFeedOptions: PriceFeedOptions;
|
|
@@ -78,4 +78,5 @@ export type PriceFeedOptions = {
|
|
|
78
78
|
OUT_BRAND_NAME: string;
|
|
79
79
|
OUT_BRAND_DECIMALS: string;
|
|
80
80
|
};
|
|
81
|
+
import { oracleBrandFeedName } from './utils.js';
|
|
81
82
|
//# sourceMappingURL=price-feed-proposal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"price-feed-proposal.d.ts","sourceRoot":"","sources":["price-feed-proposal.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"price-feed-proposal.d.ts","sourceRoot":"","sources":["price-feed-proposal.js"],"names":[],"mappings":";AA6CO,+HAJI,mBAAmB,GAAG,cAAc,8JACpC;IAAE,OAAO,EAAE;QAAE,gBAAgB,EAAE,gBAAgB,CAAA;KAAE,CAAA;CAAE,GACjD,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,CAwCjD;AAgBM,4RAbI,mBAAmB,iIACnB;IACV,OAAW,EAAE;QACb,gBAAsB,EAAE;YACxB,oBAA4B,EAAE,MAAM,CAAC;YACrC,eAAuB,EAAE,MAAM,EAAE,CAAC;YAClC,aAAqB,EAAE,OAAO,uDAAuD,EAAE,eAAe,CAAC;YACvG,aAAqB,EAAE,MAAM,CAAC;YAC9B,cAAsB,EAAE,MAAM,CAAC;SACxB,CAAC;KACH,CAAC;CACH,iBA0IH;AAWM;IAH+C,UAAU,UAA/C,OAAO,KAAK,QAAQ,OAAO,CAAC;qBAClC,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BArNP,MAAM;+BACF,MAAM;4BACT,MAAM;gCACF,MAAM;;;GAkQ7B;AAQK,wGALI,OAAO,kBAAkB,EAAE,sBAAsB;;;;8BA8D3D;+BAzUY;IACZ,OAAW,CAAC,EAAE,KAAK,MAAM,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC;IAC7C,QAAY,CAAC,EAAE,KAAK,MAAM,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC;IAC9C,aAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAsB,EAAE,MAAM,CAAC;CAC5B;oCAtBG,YAAY"}
|
|
@@ -7,7 +7,14 @@ import {
|
|
|
7
7
|
import { E } from '@endo/far';
|
|
8
8
|
|
|
9
9
|
import { unitAmount } from '@agoric/zoe/src/contractSupport/priceQuote.js';
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
oracleBrandFeedName,
|
|
12
|
+
reserveThenDeposit,
|
|
13
|
+
reserveThenGetNames,
|
|
14
|
+
} from './utils.js';
|
|
15
|
+
|
|
16
|
+
// backwards compatibility
|
|
17
|
+
export { oracleBrandFeedName as instanceNameFor };
|
|
11
18
|
|
|
12
19
|
const trace = makeTracer('RunPriceFeed', true);
|
|
13
20
|
|
|
@@ -18,9 +25,6 @@ const sanitizePathSegment = name => {
|
|
|
18
25
|
return candidate;
|
|
19
26
|
};
|
|
20
27
|
|
|
21
|
-
export const instanceNameFor = (inBrandName, outBrandName) =>
|
|
22
|
-
`${inBrandName}-${outBrandName} price feed`;
|
|
23
|
-
|
|
24
28
|
/**
|
|
25
29
|
* @typedef {{
|
|
26
30
|
* brandIn?: ERef<Brand<'nat'> | undefined>;
|
|
@@ -334,7 +338,7 @@ export const startPriceFeeds = async (
|
|
|
334
338
|
{
|
|
335
339
|
options: {
|
|
336
340
|
priceFeedOptions: {
|
|
337
|
-
AGORIC_INSTANCE_NAME:
|
|
341
|
+
AGORIC_INSTANCE_NAME: oracleBrandFeedName(inBrandName, outBrandName),
|
|
338
342
|
contractTerms: {
|
|
339
343
|
minSubmissionCount: 2,
|
|
340
344
|
minSubmissionValue: 1,
|
package/src/proposals/utils.d.ts
CHANGED
|
@@ -12,4 +12,6 @@ export function makeInstallCache(homeP: {
|
|
|
12
12
|
wrapInstall: (install: any) => (mPath: any, bPath: any, opts: any) => Promise<any>;
|
|
13
13
|
saveCache: () => Promise<void>;
|
|
14
14
|
}>;
|
|
15
|
+
export function oracleBrandFeedName(inBrandName: any, outBrandName: any): string;
|
|
16
|
+
export function scaledPriceFeedName(issuerName: any): string;
|
|
15
17
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["utils.js"],"names":[],"mappings":"AAUO,mDAHI,KAAK,OAAO,cAAc,EAAE,SAAS,CAAC,SACtC,MAAM,EAAE,EAAE,kBA+BpB;AAMM,+CAHI,KAAK,OAAO,cAAc,EAAE,SAAS,CAAC,SACtC,MAAM,EAAE,kBAMhB;AAQI,8CALI,MAAM,uBACN,KAAK,OAAO,cAAc,EAAE,SAAS,CAAC,QACtC,MAAM,YACN,KAAK,OAAO,CAAC,EAAE,iBAuBzB;AA6BM,wCAPI;IACV,OAAW,EAAE,KAAK,OAAO,iCAAiC,EAAE,UAAU,CAAC,CAAC;CACrE;4BAEmB,MAAM,KAAK,QAAQ;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;;;;;GAqD7D"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["utils.js"],"names":[],"mappings":"AAUO,mDAHI,KAAK,OAAO,cAAc,EAAE,SAAS,CAAC,SACtC,MAAM,EAAE,EAAE,kBA+BpB;AAMM,+CAHI,KAAK,OAAO,cAAc,EAAE,SAAS,CAAC,SACtC,MAAM,EAAE,kBAMhB;AAQI,8CALI,MAAM,uBACN,KAAK,OAAO,cAAc,EAAE,SAAS,CAAC,QACtC,MAAM,YACN,KAAK,OAAO,CAAC,EAAE,iBAuBzB;AA6BM,wCAPI;IACV,OAAW,EAAE,KAAK,OAAO,iCAAiC,EAAE,UAAU,CAAC,CAAC;CACrE;4BAEmB,MAAM,KAAK,QAAQ;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;;;;;GAqD7D;AAEM,iFACsC;AAEtC,6DAC+B"}
|
package/src/proposals/utils.js
CHANGED
|
@@ -156,3 +156,9 @@ export const makeInstallCache = async (
|
|
|
156
156
|
|
|
157
157
|
return { wrapInstall, saveCache };
|
|
158
158
|
};
|
|
159
|
+
|
|
160
|
+
export const oracleBrandFeedName = (inBrandName, outBrandName) =>
|
|
161
|
+
`${inBrandName}-${outBrandName} price feed`;
|
|
162
|
+
|
|
163
|
+
export const scaledPriceFeedName = issuerName =>
|
|
164
|
+
`scaledPriceAuthority-${issuerName}`;
|