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.
- package/package.json +19 -19
- 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-
|
|
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-
|
|
33
|
-
"@agoric/deploy-script-support": "0.10.4-dev-
|
|
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-
|
|
40
|
-
"@agoric/cache": "0.3.3-dev-
|
|
41
|
-
"@agoric/casting": "0.4.3-dev-
|
|
42
|
-
"@agoric/cosmic-proto": "0.4.1-dev-
|
|
43
|
-
"@agoric/ertp": "0.16.3-dev-
|
|
44
|
-
"@agoric/governance": "0.10.4-dev-
|
|
45
|
-
"@agoric/inter-protocol": "0.16.2-dev-
|
|
46
|
-
"@agoric/internal": "0.3.3-dev-
|
|
47
|
-
"@agoric/network": "0.1.1-dev-
|
|
48
|
-
"@agoric/smart-wallet": "0.5.4-dev-
|
|
49
|
-
"@agoric/store": "0.9.3-dev-
|
|
50
|
-
"@agoric/swingset-vat": "0.32.3-dev-
|
|
51
|
-
"@agoric/vats": "0.15.2-dev-
|
|
52
|
-
"@agoric/zoe": "0.26.3-dev-
|
|
53
|
-
"@agoric/zone": "0.2.3-dev-
|
|
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": "
|
|
104
|
+
"gitHead": "7ab749c3a91540b44a16bca75aa7d283d6e1521c"
|
|
105
105
|
}
|
package/src/commands/oracle.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
`
|
|
280
|
-
|
|
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
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
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
|
-
|
|
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
|
-
|
|
331
|
+
const instance = lookupPriceAggregatorInstance(pair);
|
|
332
|
+
const adminOfferIds = {};
|
|
328
333
|
for await (const from of keyOrder) {
|
|
329
|
-
|
|
334
|
+
adminOfferIds[from] = await findOracleCap(
|
|
330
335
|
instance,
|
|
331
336
|
from,
|
|
332
337
|
readLatestHead,
|
|
333
338
|
);
|
|
334
|
-
if (!
|
|
335
|
-
|
|
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(
|