Skip to content

Commit 325a916

Browse files
committed
update
1 parent d9793c4 commit 325a916

File tree

2 files changed

+32
-36
lines changed
  • apps/api-reference/src/components/EvmProvider
  • contract_manager/src/utils

2 files changed

+32
-36
lines changed

apps/api-reference/src/components/EvmProvider/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import {
44
getEvmChainRpcUrl,
5-
getAllEvmChainsIds,
5+
allEvmChainIds,
66
} from "@pythnetwork/contract-manager/utils/utils";
77
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
88
import { ConnectKitProvider, getDefaultConfig } from "connectkit";
@@ -13,7 +13,7 @@ import { WagmiProvider, createConfig, http, useChainId } from "wagmi";
1313

1414
import { metadata } from "../../metadata";
1515

16-
const CHAINS = getAllEvmChainsIds
16+
const CHAINS = allEvmChainIds
1717
.map((id) => Object.values(chains).find((chain) => chain.id === id))
1818
.filter((chain) => chain !== undefined) as unknown as readonly [
1919
chains.Chain,

contract_manager/src/utils/utils.ts

Lines changed: 30 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,56 +3,52 @@ import evmPriceFeedContractsData from "../../store/contracts/EvmPriceFeedContrac
33
import evmWormholeContractsData from "../../store/contracts/EvmWormholeContracts.json";
44
import * as chains from "viem/chains";
55

6+
export const allEvmChainIds: number[] = evmChainsData.map((c) => c.networkId);
7+
68
export const getEvmPriceFeedContractAddress = (
79
chainId: number,
810
): `0x${string}` | undefined => {
9-
const chain = evmChainsData.find((c) => c.networkId === chainId);
10-
if (!chain) {
11-
return undefined;
12-
}
13-
const contract = evmPriceFeedContractsData.find((c) => c.chain === chain.id);
14-
if (!contract?.address || !contract.address.startsWith("0x")) {
15-
return undefined;
16-
}
17-
return contract.address as `0x${string}`;
11+
return getContractAddress(chainId, evmPriceFeedContractsData);
1812
};
1913

2014
export const getEvmWormholeContractAddress = (
2115
chainId: number,
16+
): `0x${string}` | undefined => {
17+
return getContractAddress(chainId, evmWormholeContractsData);
18+
};
19+
20+
const getContractAddress = (
21+
chainId: number,
22+
contractsData: { chain: string; address: string }[],
2223
): `0x${string}` | undefined => {
2324
const chain = evmChainsData.find((c) => c.networkId === chainId);
24-
if (!chain) {
25-
return undefined;
26-
}
27-
const contract = evmWormholeContractsData.find((c) => c.chain === chain.id);
28-
if (!contract?.address || !contract.address.startsWith("0x")) {
25+
if (chain === undefined) {
2926
return undefined;
27+
} else {
28+
const contract = contractsData.find((c) => c.chain === chain.id);
29+
if (contract?.address === undefined) {
30+
return undefined;
31+
} else if (isZeroXString(contract.address)) {
32+
return contract.address as `0x${string}`;
33+
} else {
34+
throw new Error(
35+
`Invariant failed: invalid contract address ${contract.address} for chain ${contract.chain}`,
36+
);
37+
}
3038
}
31-
return contract.address as `0x${string}`;
3239
};
3340

34-
export const getAllEvmChainsIds: number[] = evmChainsData.map(
35-
(c) => c.networkId,
36-
);
41+
const isZeroXString = (str: string): str is `0x${string}` =>
42+
str.startsWith("0x") && str.length === 42;
3743

3844
export const getEvmChainRpcUrl = (chainId: number): string | undefined => {
3945
const chain = evmChainsData.find((c) => c.networkId === chainId);
40-
if (!chain) {
46+
if (chain === undefined) {
4147
return undefined;
48+
} else {
49+
const viemChain = Object.values(chains).find(
50+
(c) => c.id === Number.parseInt(chain.id, 10),
51+
);
52+
return viemChain?.rpcUrls.default.http[0] ?? chain.rpcUrl;
4253
}
43-
44-
// Let's try to use the viem chains without checking if they are working
45-
const viemChain = Object.values(chains).find(
46-
(c) => c.id === Number(chain.id),
47-
);
48-
if (viemChain && viemChain.rpcUrls && viemChain.rpcUrls.default) {
49-
return viemChain.rpcUrls.default.http[0];
50-
}
51-
52-
// Now let's try to use the json rpc url
53-
if (chain.rpcUrl) {
54-
return chain.rpcUrl;
55-
}
56-
57-
return undefined;
5854
};

0 commit comments

Comments
 (0)