import { JsonRpcProvider, WebSocketProvider } from "ethers"; import { ETHEREUM_NETWORK } from "../constants/constants"; const isLocal = false; const INFURA_API = process.env.EXPO_PUBLIC_INFURA_API!; const INFURA_API_SECRET_KEY = process.env.EXPO_PUBLIC_INFURA_API_SECRET_KEY!; const NETWORK = process.env.EXPO_PUBLIC_NETWORK!; const ETHERSCAN_API_KEY = process.env.EXPO_PUBLIC_ETHERSCAN_API_KEY!; const requiredVars = [ INFURA_API, INFURA_API_SECRET_KEY, NETWORK, ETHERSCAN_API_KEY, ]; const missingVar = requiredVars.find((v) => !v); if (missingVar) { throw new Error( "Missing required environment variables. Check your .env file.", ); } export const WEBSOCKET_URL = `wss://${NETWORK}.infura.io/ws/v3/${INFURA_API}`; export const PROVIDER_URL = isLocal ? "http://localhost:8545" : `https://${NETWORK}.infura.io/v3/${INFURA_API}`; export const MAINNET_PROVIDER_URL = `https://mainnet.infura.io/v3/${INFURA_API}`; export const getEtherscanBaseUrl = () => { console.log("NETWORK", NETWORK); return NETWORK === ETHEREUM_NETWORK.MAINNET ? "https://api.etherscan.io/api" : `https://api-${NETWORK}.etherscan.io/api`; }; export const httpProvider = new JsonRpcProvider( `https://${NETWORK}.infura.io/v3/${INFURA_API}`, ); export const wsProvider = new WebSocketProvider(WEBSOCKET_URL); export const getEthTxUrl = ( walletAddress: string, page: number = 1, pageSize: number = 20, ) => `${getEtherscanBaseUrl()}?module=account&action=txlist&address=${walletAddress}&startblock=0&endblock=99999999&page=${page}&offset=${pageSize}&sort=desc&apikey=${ETHERSCAN_API_KEY}`; export const getTokenTxUrl = ( walletAddress: string, page: number = 1, pageSize: number = 20, ) => `${getEtherscanBaseUrl()}?module=account&action=tokentx&address=${walletAddress}&startblock=0&endblock=99999999&page=${page}&offset=${pageSize}&sort=desc&apikey=${ETHERSCAN_API_KEY}`; export const getTokenIcon = (address: string) => `https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/${address}/logo.png`; export const getInternalTxUrl = ( walletAddress: string, page: number = 1, pageSize: number = 20, ) => `${getEtherscanBaseUrl()}?module=account&action=txlistinternal&address=${walletAddress}&startblock=0&endblock=99999999&page=${page}&offset=${pageSize}&sort=desc&apikey=${ETHERSCAN_API_KEY}`;