@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agoric/inter-protocol",
3
- "version": "0.16.2-dev-a9d113a.0+a9d113a",
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-a9d113a.0+a9d113a",
35
- "@agoric/ertp": "0.16.3-dev-a9d113a.0+a9d113a",
36
- "@agoric/governance": "0.10.4-dev-a9d113a.0+a9d113a",
37
- "@agoric/internal": "0.3.3-dev-a9d113a.0+a9d113a",
38
- "@agoric/notifier": "0.6.3-dev-a9d113a.0+a9d113a",
39
- "@agoric/store": "0.9.3-dev-a9d113a.0+a9d113a",
40
- "@agoric/time": "0.3.3-dev-a9d113a.0+a9d113a",
41
- "@agoric/vat-data": "0.5.3-dev-a9d113a.0+a9d113a",
42
- "@agoric/vats": "0.15.2-dev-a9d113a.0+a9d113a",
43
- "@agoric/zoe": "0.26.3-dev-a9d113a.0+a9d113a",
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-a9d113a.0+a9d113a",
54
- "@agoric/swingset-liveslots": "0.10.3-dev-a9d113a.0+a9d113a",
55
- "@agoric/swingset-vat": "0.32.3-dev-a9d113a.0+a9d113a",
56
- "@agoric/zone": "0.2.3-dev-a9d113a.0+a9d113a",
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": "a9d113a09dfd93889ae985533535df53fdc771e7"
88
+ "gitHead": "13a758d01ee151552e5d9af8b7d3fc2cb9d4961f"
89
89
  }
@@ -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
- produce: {
90
- scaledPriceAuthorityKits: boolean;
91
- bankMints?: undefined;
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":";AA0CO,4FALI,eAAe;IAEA,OAAO;QACiB,sBAAsB,EAA7D,sBAAsB;;0BAuBhC;AAQM,yKALI,sBAAsB;IAEP,OAAO;QACiB,sBAAsB,EAA7D,sBAAsB;;kBAoDhC;AAQM,wIALI,eAAe;IAEA,OAAO;QACiB,sBAAsB,EAA7D,sBAAsB;;kBAmGhC;AA+EM,mNAPI,sBAAsB;IAEP,OAAO;QACiB,sBAAsB,EAA7D,sBAAsB;QACmB,cAAc,EAAvD,MAAM,GAAG,MAAM,GAAG,MAAM;QACD,iBAAiB,EAAxC,MAAM;;kBAwEhB;AAEM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8EN;;;;;;;;aA7aa,MAAM;;;;;;;;;;;;;;;;qCAQN,OAAO,qBAAqB,EAAE,sBAAsB;uBAxB3C,gCAAgC"}
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 { instanceNameFor } from './price-feed-proposal.js';
16
- import { reserveThenGetNames } from './utils.js';
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: `scaledPriceAuthority-${issuerName}`,
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[oracleInstanceName];
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
- produce: {
424
- scaledPriceAuthorityKits: true,
436
+ instance: {
437
+ produce: true,
425
438
  },
426
439
  installation: {
427
440
  consume: { scaledPriceAuthority: true },
@@ -1,4 +1,4 @@
1
- export function instanceNameFor(inBrandName: any, outBrandName: any): string;
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":"AAoBO,6EACsC;AAoBtC,+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"}
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 { reserveThenDeposit, reserveThenGetNames } from './utils.js';
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: instanceNameFor(inBrandName, outBrandName),
341
+ AGORIC_INSTANCE_NAME: oracleBrandFeedName(inBrandName, outBrandName),
338
342
  contractTerms: {
339
343
  minSubmissionCount: 2,
340
344
  minSubmissionValue: 1,
@@ -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"}
@@ -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}`;