1- import Web3 from 'web3' ;
21import evmChainsData from '../../store/chains/EvmChains.json' ;
32import evmPriceFeedContractsData from '../../store/contracts/EvmPriceFeedContracts.json' ;
43import evmWormholeContractsData from '../../store/contracts/EvmWormholeContracts.json' ;
54import * as chains from "viem/chains" ;
65
7- export const getEvmContractAddress = ( chainId : number , contractType : string ) : `0x${string } ` => {
6+ export const getEvmPriceFeedContractAddress = ( chainId : number ) : `0x${string } ` | undefined => {
87 const chain = evmChainsData . find ( ( c ) => c . networkId === chainId ) ;
98 if ( ! chain ) {
10- throw new Error ( `Chain with network ID ${ chainId } not found` ) ;
9+ return undefined ;
1110 }
12-
13- if ( contractType === 'priceFeed' ) {
14- const contract = evmPriceFeedContractsData . find ( ( c ) => c . chain === chain . id ) ;
15- if ( ! contract ) {
16- throw new Error ( `Price feed contract not found for chain ${ chainId } ` ) ;
17- }
18- return contract . address as `0x${string } `;
19- }
20-
21- if ( contractType === 'wormhole' ) {
22- const contract = evmWormholeContractsData . find ( ( c ) => c . chain === chain . id ) ;
23- if ( ! contract ) {
24- throw new Error ( `Wormhole contract not found for chain ${ chainId } ` ) ;
25- }
26- return contract . address as `0x${string } `;
11+ const contract = evmPriceFeedContractsData . find ( ( c ) => c . chain === chain . id ) ;
12+ if ( ! contract ?. address || ! contract . address . startsWith ( '0x' ) ) {
13+ return undefined ;
2714 }
28-
29- throw new Error ( `Unknown contract type: ${ contractType } ` ) ;
15+ return contract . address as `0x${string } `;
3016}
3117
32- export const getAllEvmChainsIds = ( ) => evmChainsData . map ( ( c ) => c . networkId ) ;
33-
34-
35- // TODO: The below method should be used to get the RPC URL for a chain, but it is not working as expecte
36- // export const getEvmChainRpcUrl = async (chainId: number) => {
37- // const chain = evmChainsData.find((c) => c.networkId === chainId);
38- // if (!chain) {
39- // throw new Error(`Chain with network ID ${chainId} not found`);
40- // }
41-
42- // // Try JSON RPC URL first
43- // if (await checkRpcUrl(chain.rpcUrl)) {
44- // return chain.rpcUrl;
45- // }
46-
47- // // Fallback to viem chains
48- // const viemChain = Object.values(chains).find((c: any) => c.id === chain.id);
49- // if (viemChain && viemChain.rpcUrls && viemChain.rpcUrls.default) {
50- // const viemRpcUrl = viemChain.rpcUrls.default.http[0];
51- // if (await checkRpcUrl(viemRpcUrl)) {
52- // return viemRpcUrl;
53- // }
54- // }
55-
56- // throw new Error(`No working RPC URL found for chain ${chainId}`);
57- // }
18+ export const getEvmWormholeContractAddress = ( chainId : number ) : `0x${string } ` | undefined => {
19+ const chain = evmChainsData . find ( ( c ) => c . networkId === chainId ) ;
20+ if ( ! chain ) {
21+ return undefined ;
22+ }
23+ const contract = evmWormholeContractsData . find ( ( c ) => c . chain === chain . id ) ;
24+ if ( ! contract ?. address || ! contract . address . startsWith ( '0x' ) ) {
25+ return undefined ;
26+ }
27+ return contract . address as `0x${string } `;
28+ }
5829
30+ export const getAllEvmChainsIds : number [ ] = evmChainsData . map ( ( c ) => c . networkId ) ;
5931
60- export const getEvmChainRpcUrl = ( chainId : number ) => {
32+ export const getEvmChainRpcUrl = ( chainId : number ) : string | undefined => {
6133 const chain = evmChainsData . find ( ( c ) => c . networkId === chainId ) ;
6234 if ( ! chain ) {
63- throw new Error ( `Chain with network ID ${ chainId } not found` ) ;
35+ return undefined ;
6436 }
6537
6638
6739 // Let's try to use the viem chains without checking if they are working
6840 const viemChain = Object . values ( chains ) . find ( ( c : any ) => c . id === chain . id ) ;
6941 if ( viemChain && viemChain . rpcUrls && viemChain . rpcUrls . default ) {
70- const viemRpcUrl = viemChain . rpcUrls . default . http [ 0 ] ;
71- return viemRpcUrl ;
42+ return viemChain . rpcUrls . default . http [ 0 ] ;
7243 }
7344
7445 // Now let's try to use the json rpc url
7546 if ( chain . rpcUrl ) {
7647 return chain . rpcUrl ;
7748 }
7849
79- throw new Error ( `No working RPC URL found for chain ${ chainId } ` ) ;
50+ return undefined ;
8051}
81-
82-
83- // const checkRpcUrl = (rpcUrl: string) => {
84- // const web3 = new Web3(rpcUrl);
85- // return web3.eth.getBlockNumber().then((blockNumber) => {
86- // return true;
87- // }).catch((error) => {
88- // console.error(`Error checking RPC URL ${rpcUrl}: ${error}`);
89- // return false;
90- // });
91- // }
0 commit comments