agoric 0.21.2-dev-2c51185.0 → 0.21.2-dev-7ab749c.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.
Files changed (2) hide show
  1. package/package.json +19 -19
  2. package/src/commands/oracle.js +52 -33
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agoric",
3
- "version": "0.21.2-dev-2c51185.0+2c51185",
3
+ "version": "0.21.2-dev-7ab749c.0+7ab749c",
4
4
  "description": "Manage the Agoric Javascript smart contract platform",
5
5
  "type": "module",
6
6
  "main": "src/main.js",
@@ -29,28 +29,28 @@
29
29
  "lint:eslint": "eslint ."
30
30
  },
31
31
  "devDependencies": {
32
- "@agoric/cosmic-swingset": "0.41.4-dev-2c51185.0+2c51185",
33
- "@agoric/deploy-script-support": "0.10.4-dev-2c51185.0+2c51185",
32
+ "@agoric/cosmic-swingset": "0.41.4-dev-7ab749c.0+7ab749c",
33
+ "@agoric/deploy-script-support": "0.10.4-dev-7ab749c.0+7ab749c",
34
34
  "ava": "^5.3.0",
35
35
  "c8": "^9.1.0",
36
36
  "dd-trace": "^4.11.1"
37
37
  },
38
38
  "dependencies": {
39
- "@agoric/access-token": "0.4.22-dev-2c51185.0+2c51185",
40
- "@agoric/cache": "0.3.3-dev-2c51185.0+2c51185",
41
- "@agoric/casting": "0.4.3-dev-2c51185.0+2c51185",
42
- "@agoric/cosmic-proto": "0.4.1-dev-2c51185.0+2c51185",
43
- "@agoric/ertp": "0.16.3-dev-2c51185.0+2c51185",
44
- "@agoric/governance": "0.10.4-dev-2c51185.0+2c51185",
45
- "@agoric/inter-protocol": "0.16.2-dev-2c51185.0+2c51185",
46
- "@agoric/internal": "0.3.3-dev-2c51185.0+2c51185",
47
- "@agoric/network": "0.1.1-dev-2c51185.0+2c51185",
48
- "@agoric/smart-wallet": "0.5.4-dev-2c51185.0+2c51185",
49
- "@agoric/store": "0.9.3-dev-2c51185.0+2c51185",
50
- "@agoric/swingset-vat": "0.32.3-dev-2c51185.0+2c51185",
51
- "@agoric/vats": "0.15.2-dev-2c51185.0+2c51185",
52
- "@agoric/zoe": "0.26.3-dev-2c51185.0+2c51185",
53
- "@agoric/zone": "0.2.3-dev-2c51185.0+2c51185",
39
+ "@agoric/access-token": "0.4.22-dev-7ab749c.0+7ab749c",
40
+ "@agoric/cache": "0.3.3-dev-7ab749c.0+7ab749c",
41
+ "@agoric/casting": "0.4.3-dev-7ab749c.0+7ab749c",
42
+ "@agoric/cosmic-proto": "0.4.1-dev-7ab749c.0+7ab749c",
43
+ "@agoric/ertp": "0.16.3-dev-7ab749c.0+7ab749c",
44
+ "@agoric/governance": "0.10.4-dev-7ab749c.0+7ab749c",
45
+ "@agoric/inter-protocol": "0.16.2-dev-7ab749c.0+7ab749c",
46
+ "@agoric/internal": "0.3.3-dev-7ab749c.0+7ab749c",
47
+ "@agoric/network": "0.1.1-dev-7ab749c.0+7ab749c",
48
+ "@agoric/smart-wallet": "0.5.4-dev-7ab749c.0+7ab749c",
49
+ "@agoric/store": "0.9.3-dev-7ab749c.0+7ab749c",
50
+ "@agoric/swingset-vat": "0.32.3-dev-7ab749c.0+7ab749c",
51
+ "@agoric/vats": "0.15.2-dev-7ab749c.0+7ab749c",
52
+ "@agoric/zoe": "0.26.3-dev-7ab749c.0+7ab749c",
53
+ "@agoric/zone": "0.2.3-dev-7ab749c.0+7ab749c",
54
54
  "@confio/relayer": "^0.11.3",
55
55
  "@cosmjs/crypto": "^0.32.3",
56
56
  "@cosmjs/encoding": "^0.32.3",
@@ -101,5 +101,5 @@
101
101
  "typeCoverage": {
102
102
  "atLeast": 77.36
103
103
  },
104
- "gitHead": "2c5118522c4cde94897aaeac98f6e61beac3a1be"
104
+ "gitHead": "7ab749c3a91540b44a16bca75aa7d283d6e1521c"
105
105
  }
@@ -26,6 +26,8 @@ const COSMOS_UNIT = 1_000_000n;
26
26
  const scaleDecimals = num => BigInt(num * Number(COSMOS_UNIT));
27
27
 
28
28
  /**
29
+ * Prints JSON output to stdout and diagnostic info (like logs) to stderr
30
+ *
29
31
  * @param {import('anylogger').Logger} logger
30
32
  * @param {{
31
33
  * delay?: (ms: number) => Promise<void>,
@@ -271,14 +273,13 @@ export const makeOracleCommand = (logger, io = {}) => {
271
273
  );
272
274
  const unitPrice = scaleDecimals(price);
273
275
 
274
- console.error(`${pair[0]}-${pair[1]}_price_feed: before setPrice`);
276
+ const feedPath = `published.priceFeed.${pair[0]}-${pair[1]}_price_feed`;
275
277
 
276
278
  const readPrice = () =>
277
279
  /** @type {Promise<PriceDescription>} */ (
278
- readLatestHead(
279
- `published.priceFeed.${pair[0]}-${pair[1]}_price_feed`,
280
- ).catch(err => {
281
- console.warn(`cannot get ${pair[0]}-${pair[1]}_price_feed`, err);
280
+ readLatestHead(feedPath).catch(() => {
281
+ const viewer = `https://vstorage.agoric.net/#${networkConfig.rpcAddrs[0]}|published,published.priceFeed|${feedPath}`;
282
+ console.warn(`no existing price data; see ${viewer}`);
282
283
  return undefined;
283
284
  })
284
285
  );
@@ -297,43 +298,61 @@ export const makeOracleCommand = (logger, io = {}) => {
297
298
  show(fmtFeed(before));
298
299
  }
299
300
 
300
- console.error(
301
- 'Choose lead oracle operator order based on latestRound...',
302
- );
303
301
  const keyOrder = keys.map(normalizeAddress);
304
- const latestRoundP = readLatestHead(
305
- `published.priceFeed.${pair[0]}-${pair[1]}_price_feed.latestRound`,
306
- );
307
- await Promise.race([
308
- delay(5000),
309
- latestRoundP.then(round => {
310
- // @ts-expect-error XXX get type from contract
311
- const { roundId, startedAt, startedBy } = round;
312
- show({
313
- startedAt: fmtSecs(startedAt.absValue),
314
- roundId,
315
- startedBy,
316
- });
317
- if (startedBy === keyOrder[0]) {
318
- keyOrder.reverse();
319
- }
320
- }),
321
- ]).catch(err => {
322
- console.warn(err);
323
- });
302
+ if (before) {
303
+ console.error(
304
+ 'Choose lead oracle operator order based on latestRound...',
305
+ );
324
306
 
325
- const instance = lookupPriceAggregatorInstance(pair);
307
+ const latestRoundP =
308
+ /** @type {Promise<{roundId: number, startedAt: import('@agoric/time').TimestampRecord, startedBy: string}>} */ (
309
+ readLatestHead(
310
+ `published.priceFeed.${pair[0]}-${pair[1]}_price_feed.latestRound`,
311
+ )
312
+ );
313
+ await Promise.race([
314
+ delay(5000),
315
+ latestRoundP.then(round => {
316
+ const { roundId, startedAt, startedBy } = round;
317
+ show({
318
+ startedAt: fmtSecs(startedAt.absValue),
319
+ roundId,
320
+ startedBy,
321
+ });
322
+ if (startedBy === keyOrder[0]) {
323
+ keyOrder.reverse();
324
+ }
325
+ }),
326
+ ]).catch(err => {
327
+ console.warn(err);
328
+ });
329
+ }
326
330
 
327
- console.error('pushPrice from each:', keyOrder);
331
+ const instance = lookupPriceAggregatorInstance(pair);
332
+ const adminOfferIds = {};
328
333
  for await (const from of keyOrder) {
329
- const oracleAdminAcceptOfferId = await findOracleCap(
334
+ adminOfferIds[from] = await findOracleCap(
330
335
  instance,
331
336
  from,
332
337
  readLatestHead,
333
338
  );
334
- if (!oracleAdminAcceptOfferId) {
335
- throw Error(`no oracle invitation found: ${from}`);
339
+ if (!adminOfferIds[from]) {
340
+ console.error(
341
+ `Failed to find an offer accepting oracle invitation for ${from}. Accept and try again:`,
342
+ );
343
+ console.error(
344
+ ` agops oracle accept > accept.json; agoric wallet send --from ${from} --offer accept.json`,
345
+ );
336
346
  }
347
+ }
348
+ assert(
349
+ Object.values(adminOfferIds).every(x => x),
350
+ 'Missing oracle admin offer ids',
351
+ );
352
+
353
+ console.error('pushPrice from each:', keyOrder);
354
+ for await (const from of keyOrder) {
355
+ const oracleAdminAcceptOfferId = adminOfferIds[from];
337
356
  show({ from, oracleAdminAcceptOfferId });
338
357
  const offerId = `pushPrice-${Date.now()}`;
339
358
  const offer = Offers.fluxAggregator.PushPrice(