diff --git a/governance/xc_admin/packages/xc_admin_frontend/hooks/useMultisig.ts b/governance/xc_admin/packages/xc_admin_frontend/hooks/useMultisig.ts index 189688dd4d..1eaee83839 100644 --- a/governance/xc_admin/packages/xc_admin_frontend/hooks/useMultisig.ts +++ b/governance/xc_admin/packages/xc_admin_frontend/hooks/useMultisig.ts @@ -12,7 +12,7 @@ import { UPGRADE_MULTISIG, } from 'xc_admin_common' import { ClusterContext } from '../contexts/ClusterContext' -import { pythClusterApiUrls } from '../utils/pythClusterApiUrl' +import { deriveWsUrl, pythClusterApiUrls } from '../utils/pythClusterApiUrl' export interface MultisigHookData { isLoading: boolean @@ -69,9 +69,9 @@ export const useMultisig = (): MultisigHookData => { const connection = useMemo(() => { const urls = pythClusterApiUrls(multisigCluster) - return new Connection(urls[urlsIndex].rpcUrl, { + return new Connection(urls[urlsIndex], { commitment: 'confirmed', - wsEndpoint: urls[urlsIndex].wsUrl, + wsEndpoint: deriveWsUrl(urls[urlsIndex]), }) }, [urlsIndex, multisigCluster]) diff --git a/governance/xc_admin/packages/xc_admin_frontend/hooks/usePyth.ts b/governance/xc_admin/packages/xc_admin_frontend/hooks/usePyth.ts index e681a52e50..5859aa3f7e 100644 --- a/governance/xc_admin/packages/xc_admin_frontend/hooks/usePyth.ts +++ b/governance/xc_admin/packages/xc_admin_frontend/hooks/usePyth.ts @@ -13,7 +13,7 @@ import { Connection, PublicKey } from '@solana/web3.js' import assert from 'assert' import { useContext, useEffect, useRef, useState } from 'react' import { ClusterContext } from '../contexts/ClusterContext' -import { pythClusterApiUrls } from '../utils/pythClusterApiUrl' +import { deriveWsUrl, pythClusterApiUrls } from '../utils/pythClusterApiUrl' const ONES = '11111111111111111111111111111111' @@ -67,9 +67,9 @@ const usePyth = (): PythHookData => { useEffect(() => { let cancelled = false const urls = pythClusterApiUrls(cluster) - const connection = new Connection(urls[urlsIndex].rpcUrl, { + const connection = new Connection(urls[urlsIndex], { commitment: 'confirmed', - wsEndpoint: urls[urlsIndex].wsUrl, + wsEndpoint: deriveWsUrl(urls[urlsIndex]), }) connectionRef.current = connection diff --git a/governance/xc_admin/packages/xc_admin_frontend/utils/pythClusterApiUrl.ts b/governance/xc_admin/packages/xc_admin_frontend/utils/pythClusterApiUrl.ts index 184cd9c0b1..0006ae9a3b 100644 --- a/governance/xc_admin/packages/xc_admin_frontend/utils/pythClusterApiUrl.ts +++ b/governance/xc_admin/packages/xc_admin_frontend/utils/pythClusterApiUrl.ts @@ -1,88 +1,40 @@ -import { PythCluster } from '@pythnetwork/client/lib/cluster' +import { + PythCluster, + getPythClusterApiUrl, +} from '@pythnetwork/client/lib/cluster' -const CLUSTER_URLS: Record = { +const CLUSTER_URLS: Record = { 'mainnet-beta': [ - { - rpcUrl: 'http://mainnet.xyz.pyth.network', - wsUrl: 'ws://mainnet.xyz.pyth.network', - }, - { - rpcUrl: - 'https://pyth-network.rpcpool.com/' + - (process.env.NEXT_PUBLIC_RPC_POOL_TOKEN || ''), - wsUrl: - 'wss://pyth-network.rpcpool.com/' + - (process.env.NEXT_PUBLIC_RPC_POOL_TOKEN || ''), - }, - { - rpcUrl: 'http://pyth-rpc1.certus.one:8899/', - wsUrl: 'ws://pyth-rpc1.certus.one:8900/', - }, - { - rpcUrl: 'http://pyth-rpc2.certus.one:8899/', - wsUrl: 'ws://pyth-rpc2.certus.one:8900/', - }, - { - rpcUrl: 'https://api.mainnet-beta.solana.com/', - wsUrl: 'wss://api.mainnet-beta.solana.com/', - }, + process.env.NEXT_PUBLIC_MAINNET_RPC || getPythClusterApiUrl('mainnet-beta'), + 'https://pyth-network.rpcpool.com/' + + (process.env.NEXT_PUBLIC_RPC_POOL_TOKEN || ''), + 'http://pyth-rpc1.certus.one:8899/', + 'http://pyth-rpc2.certus.one:8899/', + 'https://api.mainnet-beta.solana.com/', ], devnet: [ - { - rpcUrl: 'http://devnet.xyz.pyth.network', - wsUrl: 'ws://devnet.xyz.pyth.network', - }, - { - rpcUrl: 'https://api.devnet.solana.com/', - wsUrl: 'wss://api.devnet.solana.com/', - }, + process.env.NEXT_PUBLIC_DEVNET_RPC || getPythClusterApiUrl('devnet'), + 'https://api.devnet.solana.com/', ], testnet: [ - { - rpcUrl: 'http://testnet.xyz.pyth.network', - wsUrl: 'ws://testnet.xyz.pyth.network', - }, - { - rpcUrl: 'https://api.testnet.solana.com/', - wsUrl: 'wss://api.testnet.solana.com/', - }, + process.env.NEXT_PUBLIC_TESTNET_RPC || getPythClusterApiUrl('testnet'), + 'https://api.testnet.solana.com/', ], 'pythtest-conformance': [ - { - rpcUrl: 'http://pythtest.xyz.pyth.network', - wsUrl: 'ws://pythtest.xyz.pyth.network', - }, - { - rpcUrl: 'https://api.pythtest.pyth.network/', - wsUrl: 'wss://api.pythtest.pyth.network/', - }, + process.env.NEXT_PUBLIC_PYTHTEST_RPC || + getPythClusterApiUrl('pythtest-conformance'), + 'https://api.pythtest.pyth.network/', ], 'pythtest-crosschain': [ - { - rpcUrl: 'http://pythtest.xyz.pyth.network', - wsUrl: 'ws://pythtest.xyz.pyth.network', - }, - { - rpcUrl: 'https://api.pythtest.pyth.network/', - wsUrl: 'wss://api.pythtest.pyth.network/', - }, + process.env.NEXT_PUBLIC_PYTHTEST_RPC || + getPythClusterApiUrl('pythtest-crosschain'), + 'https://api.pythtest.pyth.network/', ], pythnet: [ - { - rpcUrl: 'http://pythnet.xyz.pyth.network', - wsUrl: 'ws://pythnet.xyz.pyth.network', - }, - { - rpcUrl: 'https://pythnet.rpcpool.com/', - wsUrl: 'wss://pythnet.rpcpool.com/', - }, - ], - localnet: [ - { - rpcUrl: 'http://localhost:8899/', - wsUrl: 'ws://localhost:8900/', - }, + process.env.NEXT_PUBLIC_PYTHNET_RPC || getPythClusterApiUrl('pythnet'), + 'https://pythnet.rpcpool.com/', ], + localnet: ['http://localhost:8899/'], } export function pythClusterApiUrls(cluster: PythCluster) { @@ -92,3 +44,11 @@ export function pythClusterApiUrls(cluster: PythCluster) { return [] } } + +export function deriveWsUrl(httpUrl: string) { + if (httpUrl.startsWith('https://')) { + return 'wss://' + httpUrl.slice(8) + } else { + return 'ws://' + httpUrl.slice(7) + } +}