wormhole-explorer/event-watcher/src/consts.ts

179 lines
9.0 KiB
TypeScript

import { ChainName, CONTRACTS } from '@certusone/wormhole-sdk/lib/cjs/utils/consts';
import { AxiosRequestConfig } from 'axios';
import { env } from './config';
export const NETWORK: 'mainnet' | 'testnet' = env.P2P_NETWORK === 'testnet' ? 'testnet' : 'mainnet';
export const TIMEOUT = 1000;
// Notes about RPCs
// Ethereum
// ethereum: "https://rpc.ankr.com/eth", // "finalized" does not work on Ankr as of 2022-12-16
// BSC
// https://docs.bscscan.com/misc-tools-and-utilities/public-rpc-nodes
// bsc: "https://bsc-dataseed1.binance.org", // Cannot read properties of undefined (reading 'error')
// 'https://rpc.ankr.com/bsc' has been very slow, trying a diff rpc
// Avalanche
// https://docs.avax.network/apis/avalanchego/public-api-server
// avalanche: "https://api.avax.network/ext/bc/C/rpc", // 500 error on batch request
// Fantom
// fantom: "https://rpc.ftm.tools", // Cannot read properties of null (reading 'timestamp')"
// Klaytn
// this one immediately 429s
// klaytn: 'https://public-node-api.klaytnapi.com/v1/cypress',
// Near
// archive node
// https://archival-rpc.mainnet.near.org
// Arbitrum
// This node didn't work: 'https://arb1.arbitrum.io/rpc',
export const RPCS_BY_CHAIN_MAINNET: { [key in ChainName]?: string } = {
acala: env.ACALA_RPC || 'https://eth-rpc-acala.aca-api.network',
algorand: env.ALGORAND_RPC || 'https://mainnet-api.algonode.cloud',
aptos: env.APTOS_RPC || 'https://fullnode.mainnet.aptoslabs.com',
arbitrum: env.ARBITRUM_RPC || 'https://arb1.arbitrum.io/rpc',
avalanche: env.AVALANCHE_RPC || 'https://rpc.ankr.com/avalanche',
base: env.BASE_RPC || 'https://mainnet.base.org',
bsc: env.BSC_RPC || 'https://rpc.ankr.com/bsc_testnet_chapel',
celo: env.CELO_RPC || 'https://forno.celo.org',
ethereum: env.ETHEREUM_RPC || 'https://eth.llamarpc.com', // 'https://svc.blockdaemon.com/ethereum/mainnet/native',
fantom: env.FANTOM_RPC || 'https://rpc.ankr.com/fantom',
injective: env.INJECTIVE_RPC || 'https://api.injective.network',
karura: env.KARURA_RPC || 'https://eth-rpc-karura.aca-api.network',
klaytn: env.KLAYTN_RPC || 'https://public-en-cypress.klaytn.net', // 'https://klaytn-mainnet-rpc.allthatnode.com:8551',
moonbeam: env.MOONBEAM_RPC || 'https://rpc.ankr.com/moonbeam',
near: env.NEAR_RPC || 'https://rpc.mainnet.near.org', // 'https://archival-rpc.mainnet.near.org' (older than 5 epochs or ~2.5 days) -> 'https://rpc.mainnet.near.org' [https://stackoverflow.com/questions/66839103/unable-to-get-near-protocol-transaction-status-via-rpc/67199078#67199078]
oasis: env.OASIS_RPC || 'https://emerald.oasis.dev',
optimism: env.OPTIMISM_RPC || 'https://rpc.ankr.com/optimism',
polygon: env.POLYGON_RPC || 'https://rpc.ankr.com/polygon',
sei: env.SEI_RPC || 'https://sei-rest.brocha.in', // https://docs.sei.io/develop/resources
solana: env.SOLANA_RPC || 'https://api.mainnet-beta.solana.com',
sui: env.SUI_RPC || 'https://rpc.mainnet.sui.io',
terra: env.TERRA_RPC || 'https://terra-classic-fcd.publicnode.com', // 'https://columbus-fcd.terra.dev',
terra2: env.TERRA2_RPC || 'https://phoenix-lcd.terra.dev',
wormchain: env.WORMCHAIN_RPC || 'https://wormchain.jumpisolated.com',
xpla: env.XPLA_RPC || 'https://dimension-lcd.xpla.dev',
} as const;
export const RPCS_BY_CHAIN_TESTNET: { [key in ChainName]?: string } = {
acala: env.ACALA_RPC || 'https://eth-rpc-acala-testnet.aca-staging.network',
algorand: env.ALGORAND_RPC || 'https://testnet-api.algonode.cloud',
aptos: env.APTOS_RPC || 'https://aptos-testnet-rpc.allthatnode.com/v1',
arbitrum: env.ARBITRUM_RPC || 'https://goerli-rollup.arbitrum.io/rpc',
avalanche: env.AVALANCHE_RPC || 'https://api.avax-test.network/ext/bc/C/rpc',
base: env.BASE_RPC || 'https://goerli.base.org',
bsc: env.BSC_RPC || 'https://rpc.ankr.com/bsc_testnet_chapel',
celo: env.CELO_RPC || 'https://alfajores-forno.celo-testnet.org',
ethereum: env.ETHEREUM_RPC || 'https://rpc.ankr.com/eth_goerli',
fantom: env.FANTOM_RPC || 'https://rpc.ankr.com/fantom_testnet',
injective: env.INJECTIVE_RPC || 'https://testnet.sentry.tm.injective.network:443',
karura: env.KARURA_RPC || 'https://eth-rpc-karura-testnet.aca-staging.network',
klaytn: env.KLAYTN_RPC || 'https://api.baobab.klaytn.net:8651',
moonbeam: env.MOONBEAM_RPC || 'https://rpc.api.moonbase.moonbeam.network',
near: env.NEAR_RPC || 'https://testnet.aurora.dev',
oasis: env.OASIS_RPC || 'https://testnet.emerald.oasis.dev',
optimism: env.OPTIMISM_RPC || 'https://optimism-goerli.publicnode.com',
polygon: env.POLYGON_RPC || 'https://rpc.ankr.com/polygon_mumbai',
sei: env.SEI_RPC || 'https://sei-atlantic-rpc.allthatnode.com:1317',
solana: env.SOLANA_RPC || 'https://api.devnet.solana.com', // https://api.testnet.solana.com (testnet = devnet for solana)
sui: env.SUI_RPC || 'https://sui-testnet-rpc.allthatnode.com',
terra: env.TERRA_RPC || 'https://bombay.stakesystems.io:2053',
terra2: env.TERRA2_RPC || 'https://pisco-lcd.terra.dev',
wormchain: env.WORMCHAIN_RPC || 'https://wormchain-testnet.jumpisolated.com',
xpla: env.XPLA_RPC || 'https://dimension-rpc.xpla.dev',
} as const;
export const NETWORK_CONTRACTS = NETWORK === 'testnet' ? CONTRACTS.TESTNET : CONTRACTS.MAINNET;
export const NETWORK_RPCS_BY_CHAIN =
NETWORK === 'testnet' ? RPCS_BY_CHAIN_TESTNET : RPCS_BY_CHAIN_MAINNET;
// Separating for now so if we max out infura we can keep Polygon going
export const POLYGON_ROOT_CHAIN_RPC = 'https://rpc.ankr.com/eth';
export const POLYGON_ROOT_CHAIN_ADDRESS = '0x86E4Dc95c7FBdBf52e33D563BbDB00823894C287';
// Optimism watcher relies on finalized calls which don't work right on Ankr
export const OPTIMISM_CTC_CHAIN_RPC = env.ETHEREUM_RPC;
export const OPTIMISM_CTC_CHAIN_ADDRESS = '0x5E4e65926BA27467555EB562121fac00D24E9dD2';
export const ALGORAND_INFO = {
appid: Number(NETWORK_CONTRACTS.algorand.core),
algodToken: '',
algodServer: NETWORK_RPCS_BY_CHAIN.algorand,
algodPort: 443,
server: 'https://mainnet-idx.algonode.cloud',
port: 443,
token: '',
} as const;
export const SEI_EXPLORER_GRAPHQL = 'https://pacific-1-graphql.alleslabs.dev/v1/graphql';
export const SEI_EXPLORER_TXS = 'https://celatone-api.alleslabs.dev/txs/sei/pacific-1/';
// without this, axios request will error `Z_BUF_ERROR`: https://github.com/axios/axios/issues/5346
export const AXIOS_CONFIG_JSON: AxiosRequestConfig = {
headers: {
'Accept-Encoding': 'application/json',
// Authorization: 'Bearer zpka_213d294a9a5a44619cd6a02e55a20417_5f43e4d0',
},
};
export const GUARDIAN_RPC_HOSTS = [
'https://wormhole-v2-mainnet-api.certus.one',
'https://wormhole.inotel.ro',
'https://wormhole-v2-mainnet-api.mcf.rocks',
'https://wormhole-v2-mainnet-api.chainlayer.network',
'https://wormhole-v2-mainnet-api.staking.fund',
];
export const DEFAULT_RPS = 30;
export const RPS_BY_CHAIN_MAINNET: { [key in ChainName]?: number } = {
acala: Number(env.ACALA_RPS) || DEFAULT_RPS,
algorand: Number(env.ALGORAND_RPS) || DEFAULT_RPS,
aptos: Number(env.APTOS_RPS) || DEFAULT_RPS,
arbitrum: Number(env.ARBITRUM_RPS) || DEFAULT_RPS,
avalanche: Number(env.AVALANCHE_RPS) || DEFAULT_RPS,
base: Number(env.BASE_RPS) || DEFAULT_RPS,
celo: Number(env.CELO_RPS) || DEFAULT_RPS,
ethereum: Number(env.CELO_RPS) || DEFAULT_RPS,
fantom: Number(env.FANTOM_RPS) || DEFAULT_RPS,
injective: Number(env.INJECTIVE_RPS) || DEFAULT_RPS,
klaytn: Number(env.KLAYTN_RPS) || DEFAULT_RPS,
moonbeam: Number(env.MOONBEAM_RPS) || DEFAULT_RPS,
near: Number(env.NEAR_RPS) || DEFAULT_RPS,
oasis: Number(env.OASIS_RPS) || DEFAULT_RPS,
polygon: Number(env.POLYGON_RPS) || DEFAULT_RPS,
sei: Number(env.SEI_RPS) || DEFAULT_RPS,
solana: Number(env.SOLANA_RPS) || DEFAULT_RPS,
sui: Number(env.SUI_RPS) || DEFAULT_RPS,
terra: Number(env.TERRA_RPS) || DEFAULT_RPS,
terra2: Number(env.TERRA2_RPS) || DEFAULT_RPS,
wormchain: Number(env.WORMCHAIN_RPS) || DEFAULT_RPS,
xpla: Number(env.XPLA_RPS) || DEFAULT_RPS,
} as const;
export const RPS_BY_CHAIN_TESTNET: { [key in ChainName]?: number } = {
acala: Number(env.ACALA_RPS) || DEFAULT_RPS,
algorand: Number(env.ALGORAND_RPS) || DEFAULT_RPS,
aptos: Number(env.APTOS_RPS) || DEFAULT_RPS,
arbitrum: Number(env.ARBITRUM_RPS) || DEFAULT_RPS,
avalanche: Number(env.AVALANCHE_RPS) || DEFAULT_RPS,
base: Number(env.BASE_RPS) || DEFAULT_RPS,
celo: Number(env.CELO_RPS) || DEFAULT_RPS,
ethereum: Number(env.CELO_RPS) || DEFAULT_RPS,
fantom: Number(env.FANTOM_RPS) || DEFAULT_RPS,
injective: Number(env.INJECTIVE_RPS) || DEFAULT_RPS,
klaytn: Number(env.KLAYTN_RPS) || DEFAULT_RPS,
moonbeam: Number(env.MOONBEAM_RPS) || DEFAULT_RPS,
near: Number(env.NEAR_RPS) || DEFAULT_RPS,
oasis: Number(env.OASIS_RPS) || DEFAULT_RPS,
polygon: Number(env.POLYGON_RPS) || DEFAULT_RPS,
sei: Number(env.SEI_RPS) || DEFAULT_RPS,
solana: Number(env.SOLANA_RPS) || DEFAULT_RPS,
sui: Number(env.SUI_RPS) || DEFAULT_RPS,
terra: Number(env.TERRA_RPS) || DEFAULT_RPS,
terra2: Number(env.TERRA2_RPS) || DEFAULT_RPS,
wormchain: Number(env.WORMCHAIN_RPS) || DEFAULT_RPS,
xpla: Number(env.XPLA_RPS) || DEFAULT_RPS,
} as const;
export const NETWORK_RPS_BY_CHAIN =
NETWORK === 'testnet' ? RPS_BY_CHAIN_TESTNET : RPS_BY_CHAIN_MAINNET;