Skip to content

Commit 820d2e2

Browse files
committed
update
1 parent 90e22b0 commit 820d2e2

File tree

14 files changed

+202
-104
lines changed

14 files changed

+202
-104
lines changed

apps/price_pusher/config.aptos.testnet.sample.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"endpoint": "https://fullnode.testnet.aptoslabs.com/v1",
2+
"endpoint": "https://api.testnet.aptoslabs.com/v1",
33
"pyth-contract-address": "0x7e783b349d3e89cf5931af376ebeadbfab855b3fa239b7ada8f5a92fbea6b387",
44
"price-service-endpoint": "https://hermes-beta.pyth.network",
55
"mnemonic-file": "./mnemonic",

apps/price_pusher/gg.txt

Whitespace-only changes.

apps/price_pusher/src/aptos/command.ts

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212
} from "./aptos";
1313
import { AptosAccount } from "aptos";
1414
import pino from "pino";
15-
15+
import { filterInvalidPriceItems } from "../utils";
1616
export default {
1717
command: "aptos",
1818
describe: "run price pusher for aptos",
@@ -33,20 +33,20 @@ export default {
3333
default: 2,
3434
} as Options,
3535
...options.priceConfigFile,
36-
...options.hermesEndpoint,
36+
...options.priceServiceEndpoint,
3737
...options.mnemonicFile,
3838
...options.pythContractAddress,
3939
...options.pollingFrequency,
4040
...options.pushingFrequency,
4141
...options.logLevel,
4242
...options.controllerLogLevel,
4343
},
44-
handler: function (argv: any) {
44+
handler: async function (argv: any) {
4545
// FIXME: type checks for this
4646
const {
4747
endpoint,
4848
priceConfigFile,
49-
hermesEndpoint,
49+
priceServiceEndpoint,
5050
mnemonicFile,
5151
pythContractAddress,
5252
pushingFrequency,
@@ -59,7 +59,7 @@ export default {
5959
const logger = pino({ level: logLevel });
6060

6161
const priceConfigs = readPriceConfigFile(priceConfigFile);
62-
const hermesClient = new HermesClient(hermesEndpoint);
62+
const hermesClient = new HermesClient(priceServiceEndpoint);
6363

6464
const mnemonic = fs.readFileSync(mnemonicFile, "utf-8").trim();
6565
const account = AptosAccount.fromDerivePath(
@@ -68,7 +68,21 @@ export default {
6868
);
6969
logger.info(`Pushing from account address: ${account.address()}`);
7070

71-
const priceItems = priceConfigs.map(({ id, alias }) => ({ id, alias }));
71+
let priceItems = priceConfigs.map(({ id, alias }) => ({ id, alias }));
72+
73+
// Better to filter out invalid price items before creating the pyth listener
74+
const { existingPriceItems, invalidPriceItems } =
75+
await filterInvalidPriceItems(hermesClient, priceItems);
76+
77+
if (invalidPriceItems.length > 0) {
78+
logger.error(
79+
`Invalid price id submitted for: ${invalidPriceItems
80+
.map(({ alias }) => alias)
81+
.join(", ")}`
82+
);
83+
}
84+
85+
priceItems = existingPriceItems;
7286

7387
const pythListener = new PythPriceListener(
7488
hermesClient,

apps/price_pusher/src/evm/command.ts

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { getCustomGasStation } from "./custom-gas-station";
1010
import pino from "pino";
1111
import { createClient } from "./super-wallet";
1212
import { createPythContract } from "./pyth-contract";
13-
import { isWsEndpoint } from "../utils";
13+
import { isWsEndpoint, filterInvalidPriceItems } from "../utils";
1414

1515
export default {
1616
command: "evm",
@@ -71,7 +71,7 @@ export default {
7171
default: 1,
7272
} as Options,
7373
...options.priceConfigFile,
74-
...options.hermesEndpoint,
74+
...options.priceServiceEndpoint,
7575
...options.mnemonicFile,
7676
...options.pythContractAddress,
7777
...options.pollingFrequency,
@@ -84,7 +84,7 @@ export default {
8484
const {
8585
endpoint,
8686
priceConfigFile,
87-
hermesEndpoint,
87+
priceServiceEndpoint,
8888
mnemonicFile,
8989
pythContractAddress,
9090
pushingFrequency,
@@ -98,15 +98,32 @@ export default {
9898
logLevel,
9999
controllerLogLevel,
100100
} = argv;
101+
console.log("***** priceServiceEndpoint *****", priceServiceEndpoint);
101102

102-
const logger = pino({ level: logLevel });
103+
const logger = pino({
104+
level: logLevel,
105+
});
103106

104107
const priceConfigs = readPriceConfigFile(priceConfigFile);
105-
const hermesClient = new HermesClient(hermesEndpoint);
108+
const hermesClient = new HermesClient(priceServiceEndpoint);
106109

107110
const mnemonic = fs.readFileSync(mnemonicFile, "utf-8").trim();
108111

109-
const priceItems = priceConfigs.map(({ id, alias }) => ({ id, alias }));
112+
let priceItems = priceConfigs.map(({ id, alias }) => ({ id, alias }));
113+
114+
// Better to filter out invalid price items before creating the pyth listener
115+
const { existingPriceItems, invalidPriceItems } =
116+
await filterInvalidPriceItems(hermesClient, priceItems);
117+
118+
if (invalidPriceItems.length > 0) {
119+
logger.error(
120+
`Invalid price id submitted for: ${invalidPriceItems
121+
.map(({ alias }) => alias)
122+
.join(", ")}`
123+
);
124+
}
125+
126+
priceItems = existingPriceItems;
110127

111128
const pythListener = new PythPriceListener(
112129
hermesClient,

apps/price_pusher/src/evm/evm.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,11 +160,15 @@ export class EvmPricePusher implements IPricePusher {
160160
priceIds
161161
)) as `0x${string}`[];
162162

163+
const priceFeedUpdateDataWith0x = priceFeedUpdateData.map((data) =>
164+
addLeading0x(data)
165+
);
166+
163167
let updateFee;
164168

165169
try {
166170
updateFee = await this.pythContract.read.getUpdateFee([
167-
priceFeedUpdateData.map((data) => addLeading0x(data)),
171+
priceFeedUpdateDataWith0x,
168172
]);
169173
updateFee = BigInt(
170174
Math.round(Number(updateFee) * (this.updateFeeMultiplier || 1))
@@ -230,7 +234,7 @@ export class EvmPricePusher implements IPricePusher {
230234
try {
231235
const { request } =
232236
await this.pythContract.simulate.updatePriceFeedsIfNecessary(
233-
[priceFeedUpdateData, priceIdsWith0x, pubTimesToPushParam],
237+
[priceFeedUpdateDataWith0x, priceIdsWith0x, pubTimesToPushParam],
234238
{
235239
value: updateFee,
236240
gasPrice: BigInt(Math.ceil(gasPrice)),

apps/price_pusher/src/fuel/command.ts

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { Controller } from "../controller";
88
import { Provider, Wallet } from "fuels";
99
import fs from "fs";
1010
import pino from "pino";
11-
11+
import { filterInvalidPriceItems } from "../utils";
1212
export default {
1313
command: "fuel",
1414
describe: "run price pusher for Fuel",
@@ -29,7 +29,7 @@ export default {
2929
required: true,
3030
} as Options,
3131
...options.priceConfigFile,
32-
...options.hermesEndpoint,
32+
...options.priceServiceEndpoint,
3333
...options.pushingFrequency,
3434
...options.pollingFrequency,
3535
...options.logLevel,
@@ -41,7 +41,7 @@ export default {
4141
privateKeyFile,
4242
pythContractAddress,
4343
priceConfigFile,
44-
hermesEndpoint,
44+
priceServiceEndpoint,
4545
pushingFrequency,
4646
pollingFrequency,
4747
logLevel,
@@ -52,9 +52,23 @@ export default {
5252

5353
const priceConfigs = readPriceConfigFile(priceConfigFile);
5454

55-
const hermesClient = new HermesClient(hermesEndpoint);
55+
const hermesClient = new HermesClient(priceServiceEndpoint);
56+
57+
let priceItems = priceConfigs.map(({ id, alias }) => ({ id, alias }));
58+
59+
// Better to filter out invalid price items before creating the pyth listener
60+
const { existingPriceItems, invalidPriceItems } =
61+
await filterInvalidPriceItems(hermesClient, priceItems);
62+
63+
if (invalidPriceItems.length > 0) {
64+
logger.error(
65+
`Invalid price id submitted for: ${invalidPriceItems
66+
.map(({ alias }) => alias)
67+
.join(", ")}`
68+
);
69+
}
5670

57-
const priceItems = priceConfigs.map(({ id, alias }) => ({ id, alias }));
71+
priceItems = existingPriceItems;
5872

5973
const pythListener = new PythPriceListener(
6074
hermesClient,

apps/price_pusher/src/injective/command.ts

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { Controller } from "../controller";
88
import { Options } from "yargs";
99
import { getNetworkInfo } from "@injectivelabs/networks";
1010
import pino from "pino";
11-
11+
import { filterInvalidPriceItems } from "../utils";
1212
export default {
1313
command: "injective",
1414
describe: "run price pusher for injective",
@@ -35,22 +35,22 @@ export default {
3535
type: "number",
3636
} as Options,
3737
...options.priceConfigFile,
38-
...options.hermesEndpoint,
38+
...options.priceServiceEndpoint,
3939
...options.mnemonicFile,
4040
...options.pythContractAddress,
4141
...options.pollingFrequency,
4242
...options.pushingFrequency,
4343
...options.logLevel,
4444
...options.controllerLogLevel,
4545
},
46-
handler: function (argv: any) {
46+
handler: async function (argv: any) {
4747
// FIXME: type checks for this
4848
const {
4949
gasPrice,
5050
gasMultiplier,
5151
grpcEndpoint,
5252
priceConfigFile,
53-
hermesEndpoint,
53+
priceServiceEndpoint,
5454
mnemonicFile,
5555
pythContractAddress,
5656
pushingFrequency,
@@ -67,10 +67,24 @@ export default {
6767
}
6868

6969
const priceConfigs = readPriceConfigFile(priceConfigFile);
70-
const hermesClient = new HermesClient(hermesEndpoint);
70+
const hermesClient = new HermesClient(priceServiceEndpoint);
7171
const mnemonic = fs.readFileSync(mnemonicFile, "utf-8").trim();
7272

73-
const priceItems = priceConfigs.map(({ id, alias }) => ({ id, alias }));
73+
let priceItems = priceConfigs.map(({ id, alias }) => ({ id, alias }));
74+
75+
// Better to filter out invalid price items before creating the pyth listener
76+
const { existingPriceItems, invalidPriceItems } =
77+
await filterInvalidPriceItems(hermesClient, priceItems);
78+
79+
if (invalidPriceItems.length > 0) {
80+
logger.error(
81+
`Invalid price id submitted for: ${invalidPriceItems
82+
.map(({ alias }) => alias)
83+
.join(", ")}`
84+
);
85+
}
86+
87+
priceItems = existingPriceItems;
7488

7589
const pythListener = new PythPriceListener(
7690
hermesClient,

apps/price_pusher/src/near/command.ts

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { Controller } from "../controller";
66
import { Options } from "yargs";
77
import { NearAccount, NearPriceListener, NearPricePusher } from "./near";
88
import pino from "pino";
9+
import { filterInvalidPriceItems } from "../utils";
910

1011
export default {
1112
command: "near",
@@ -33,22 +34,22 @@ export default {
3334
required: false,
3435
} as Options,
3536
...options.priceConfigFile,
36-
...options.hermesEndpoint,
37+
...options.priceServiceEndpoint,
3738
...options.pythContractAddress,
3839
...options.pollingFrequency,
3940
...options.pushingFrequency,
4041
...options.logLevel,
4142
...options.controllerLogLevel,
4243
},
43-
handler: function (argv: any) {
44+
handler: async function (argv: any) {
4445
// FIXME: type checks for this
4546
const {
4647
nodeUrl,
4748
network,
4849
accountId,
4950
privateKeyPath,
5051
priceConfigFile,
51-
hermesEndpoint,
52+
priceServiceEndpoint,
5253
pythContractAddress,
5354
pushingFrequency,
5455
pollingFrequency,
@@ -59,9 +60,23 @@ export default {
5960
const logger = pino({ level: logLevel });
6061

6162
const priceConfigs = readPriceConfigFile(priceConfigFile);
62-
const hermesClient = new HermesClient(hermesEndpoint);
63+
const hermesClient = new HermesClient(priceServiceEndpoint);
6364

64-
const priceItems = priceConfigs.map(({ id, alias }) => ({ id, alias }));
65+
let priceItems = priceConfigs.map(({ id, alias }) => ({ id, alias }));
66+
67+
// Better to filter out invalid price items before creating the pyth listener
68+
const { existingPriceItems, invalidPriceItems } =
69+
await filterInvalidPriceItems(hermesClient, priceItems);
70+
71+
if (invalidPriceItems.length > 0) {
72+
logger.error(
73+
`Invalid price id submitted for: ${invalidPriceItems
74+
.map(({ alias }) => alias)
75+
.join(", ")}`
76+
);
77+
}
78+
79+
priceItems = existingPriceItems;
6580

6681
const pythListener = new PythPriceListener(
6782
hermesClient,

apps/price_pusher/src/options.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Options } from "yargs";
22

3-
export const hermesEndpoint = {
4-
"hermes-endpoint": {
3+
export const priceServiceEndpoint = {
4+
"price-service-endpoint": {
55
description:
66
"Endpoint URL for the hermes client. e.g: https://endpoint/example",
77
type: "string",

0 commit comments

Comments
 (0)