Skip to content

Commit d61dca2

Browse files
authored
chore(contract-manager) Add custom fees for evm deployment (#2499)
1 parent e7db34b commit d61dca2

File tree

1 file changed

+52
-1
lines changed

1 file changed

+52
-1
lines changed

contract_manager/scripts/deploy_evm_pricefeed_contracts.ts

+52-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
getOrDeployWormholeContract,
1717
BaseDeployConfig,
1818
} from "./common";
19+
import { HermesClient } from "@pythnetwork/hermes-client";
1920

2021
interface DeploymentConfig extends BaseDeployConfig {
2122
type: DeploymentType;
@@ -45,6 +46,21 @@ const parser = yargs(hideBin(process.argv))
4546
default: 1,
4647
desc: "Single update fee in wei for the price feed",
4748
},
49+
"single-update-fee-in-usd": {
50+
type: "number",
51+
demandOption: false,
52+
desc: "Single update fee in USD for the price feed. (This overrides the single-update-fee-in-wei option) ",
53+
},
54+
"native-token-price-feed-id": {
55+
type: "string",
56+
demandOption: false,
57+
desc: "Pyth Price Feed ID to fetch the current price of the native token (This will be used to calculate the single-update-fee-in-usd)",
58+
},
59+
"native-token-decimals": {
60+
type: "number",
61+
demandOption: false,
62+
desc: "Number of decimals of the native token",
63+
},
4864
});
4965

5066
async function deployPriceFeedContracts(
@@ -92,11 +108,46 @@ async function deployPriceFeedContracts(
92108

93109
async function main() {
94110
const argv = await parser.argv;
111+
let singleUpdateFeeInWei = argv.singleUpdateFeeInWei;
112+
113+
const singleUpdateFeeInUsd = argv["single-update-fee-in-usd"];
114+
const nativeTokenPriceFeedId = argv["native-token-price-feed-id"];
115+
const nativeTokenDecimals = argv["native-token-decimals"];
116+
if (
117+
singleUpdateFeeInUsd &&
118+
(nativeTokenPriceFeedId == null || nativeTokenDecimals == null)
119+
) {
120+
throw new Error(
121+
"native-token-price-feed-id and native-token-decimals are required when single-update-fee-in-usd is provided",
122+
);
123+
}
124+
125+
if (nativeTokenPriceFeedId && singleUpdateFeeInUsd && nativeTokenDecimals) {
126+
const hermesClient = new HermesClient("https://hermes.pyth.network");
127+
const priceObject = await hermesClient.getLatestPriceUpdates(
128+
[nativeTokenPriceFeedId],
129+
{
130+
parsed: true,
131+
},
132+
);
133+
134+
const price = priceObject.parsed?.[0].price;
135+
if (price == null) {
136+
throw new Error("Failed to get price of the native token");
137+
}
138+
const priceInUsd = Number(price.price);
139+
const exponent = price.expo;
140+
singleUpdateFeeInWei = Math.round(
141+
Math.pow(10, nativeTokenDecimals) *
142+
(singleUpdateFeeInUsd / (priceInUsd * Math.pow(10, exponent))),
143+
);
144+
console.log(`Single update fee in wei: ${singleUpdateFeeInWei}`);
145+
}
95146

96147
const deploymentConfig: DeploymentConfig = {
97148
type: toDeploymentType(argv.deploymentType),
98149
validTimePeriodSeconds: argv.validTimePeriodSeconds,
99-
singleUpdateFeeInWei: argv.singleUpdateFeeInWei,
150+
singleUpdateFeeInWei: singleUpdateFeeInWei,
100151
gasMultiplier: argv.gasMultiplier,
101152
gasPriceMultiplier: argv.gasPriceMultiplier,
102153
privateKey: toPrivateKey(argv.privateKey),

0 commit comments

Comments
 (0)