@covalenthq/goldrush-cli 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../package.json","../src/config.ts","../src/auth.ts","../src/ui/boxes.ts","../src/ui/spinner.ts","../src/ui/theme.ts","../src/commands/auth.ts","../src/client.ts","../src/api/balances.ts","../src/utils/format.ts","../src/ui/tables.ts","../src/commands/balances.ts","../../../data/dato-chains.json","../../../data/streaming-chains-dexes.json","../src/utils/chains.ts","../src/commands/chains.ts","../src/commands/config.ts","../src/api/gas.ts","../src/commands/gas.ts","../src/commands/install.ts","../src/commands/logout.ts","../src/mcp/bridge.ts","../src/commands/mcp.ts","../src/api/streaming.ts","../src/commands/newpairs.ts","../src/ui/charts.ts","../src/commands/ohlcv.ts","../src/ui/logo.ts","../src/ui/logger.ts","../src/proxy/handlers.ts","../src/proxy/middleware.ts","../src/proxy/server.ts","../src/commands/proxy.ts","../src/api/search.ts","../src/commands/search.ts","../src/commands/status.ts","../src/api/traders.ts","../src/commands/traders.ts","../src/api/transfers.ts","../src/commands/transfers.ts","../src/commands/watch.ts","../src/index.ts"],"sourcesContent":["{\n \"name\": \"@covalenthq/goldrush-cli\",\n \"version\": \"3.0.0\",\n \"description\": \"Terminal-first blockchain data & algorithmic trading CLI powered by GoldRush API\",\n \"type\": \"module\",\n \"bin\": {\n \"goldrush\": \"./dist/index.js\"\n },\n \"main\": \"./dist/index.js\",\n \"scripts\": {\n \"format\": \"prettier --write .\",\n \"format:check\": \"prettier --check .\",\n \"lint\": \"eslint \\\"src/**/*.{ts,tsx,js,jsx}\\\"\",\n \"lint:fix\": \"eslint \\\"src/**/*.{ts,tsx,js,jsx}\\\" --fix\",\n \"build\": \"tsup\",\n \"dev\": \"pnpm --filter @covalenthq/client-sdk build && tsx src/index.ts\",\n \"clean\": \"rimraf dist\",\n \"prepublishOnly\": \"pnpm run clean && pnpm run build\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"test:coverage\": \"vitest run --coverage\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"keywords\": [\n \"goldrush\",\n \"covalent\",\n \"blockchain\",\n \"crypto\",\n \"cli\",\n \"mcp\",\n \"trading\"\n ],\n \"files\": [\n \"dist\",\n \"README.md\"\n ],\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"license\": \"MIT\",\n \"author\": \"covalenthq\",\n \"homepage\": \"https://goldrush.dev/docs/\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/covalenthq/covalent-api-sdk-ts.git\",\n \"directory\": \"services/mcp-server\"\n },\n \"dependencies\": {\n \"@covalenthq/client-sdk\": \"workspace:^\",\n \"@inquirer/prompts\": \"^7.0.0\",\n \"asciichart\": \"^1.5.25\",\n \"boxen\": \"^8.0.1\",\n \"chalk\": \"^5.4.1\",\n \"cli-table3\": \"^0.6.5\",\n \"commander\": \"^13.1.0\",\n \"conf\": \"^13.1.0\",\n \"express\": \"^5.1.0\",\n \"keytar\": \"^7.9.0\",\n \"ora\": \"^8.2.0\",\n \"ws\": \"^8.18.0\"\n },\n \"devDependencies\": {\n \"@types/asciichart\": \"^1.5.8\",\n \"@types/express\": \"^5.0.0\",\n \"@types/node\": \"^22.13.0\",\n \"@types/ws\": \"^8.5.14\",\n \"rimraf\": \"^6.1.3\",\n \"ts-morph\": \"^25.0.0\",\n \"tsup\": \"^8.4.0\",\n \"tsx\": \"^4.19.0\",\n \"typescript\": \"^5.7.0\",\n \"vitest\": \"^1.1.0\"\n },\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"packageManager\": \"pnpm@10.28.0+sha512.05df71d1421f21399e053fde567cea34d446fa02c76571441bfc1c7956e98e363088982d940465fd34480d4d90a0668bc12362f8aa88000a64e83d0b0e47be48\"\n}\n","import Conf from \"conf\";\n\nconst SERVICE_NAME = \"goldrush-cli\";\nconst ACCOUNT_API_KEY = \"api-key\";\nconst ACCOUNT_SESSION_TOKEN = \"session-token\";\n\ninterface GoldRushConfig {\n port: number;\n defaultChain: string;\n quoteCurrency: string;\n _fallbackApiKey?: string;\n _fallbackSessionToken?: string;\n}\n\nconst config = new Conf<GoldRushConfig>({\n projectName: \"goldrush-cli\",\n defaults: {\n port: 4888,\n defaultChain: \"eth-mainnet\",\n quoteCurrency: \"USD\",\n },\n});\n\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nasync function getKeytar(): Promise<typeof import(\"keytar\") | null> {\n try {\n return await import(\"keytar\");\n } catch {\n return null;\n }\n}\n\nexport async function getApiKey(): Promise<string | null> {\n const keytar = await getKeytar();\n if (keytar) {\n const secret = await keytar.getPassword(SERVICE_NAME, ACCOUNT_API_KEY);\n if (secret) return secret;\n }\n if (process.env.GOLDRUSH_API_KEY) {\n return process.env.GOLDRUSH_API_KEY;\n }\n return config.get(\"_fallbackApiKey\") ?? null;\n}\n\nexport async function setApiKey(key: string): Promise<void> {\n const keytar = await getKeytar();\n if (keytar) {\n await keytar.setPassword(SERVICE_NAME, ACCOUNT_API_KEY, key);\n } else {\n config.set(\"_fallbackApiKey\", key);\n }\n}\n\nexport async function deleteApiKey(): Promise<void> {\n const keytar = await getKeytar();\n if (keytar) {\n await keytar.deletePassword(SERVICE_NAME, ACCOUNT_API_KEY);\n }\n config.delete(\"_fallbackApiKey\");\n}\n\nexport async function getSessionToken(): Promise<string | null> {\n const keytar = await getKeytar();\n if (keytar) {\n const token = await keytar.getPassword(\n SERVICE_NAME,\n ACCOUNT_SESSION_TOKEN\n );\n if (token) return token;\n }\n return config.get(\"_fallbackSessionToken\") ?? null;\n}\n\nexport async function setSessionToken(token: string): Promise<void> {\n const keytar = await getKeytar();\n if (keytar) {\n await keytar.setPassword(SERVICE_NAME, ACCOUNT_SESSION_TOKEN, token);\n } else {\n config.set(\"_fallbackSessionToken\", token);\n }\n}\n\nexport async function deleteSessionToken(): Promise<void> {\n const keytar = await getKeytar();\n if (keytar) {\n await keytar.deletePassword(SERVICE_NAME, ACCOUNT_SESSION_TOKEN);\n }\n config.delete(\"_fallbackSessionToken\");\n}\n\nexport function getPort(): number {\n return config.get(\"port\");\n}\n\nexport function setPort(port: number): void {\n config.set(\"port\", port);\n}\n\nexport function getDefaultChain(): string {\n return config.get(\"defaultChain\");\n}\n\nexport function setDefaultChain(chain: string): void {\n config.set(\"defaultChain\", chain);\n}\n\nexport function getQuoteCurrency(): string {\n return config.get(\"quoteCurrency\");\n}\n\nexport function setQuoteCurrency(currency: string): void {\n config.set(\"quoteCurrency\", currency);\n}\n\nexport function getMcpUrl(): string {\n return \"http://localhost:4888\";\n // return (\n // process.env.GOLDRUSH_MCP_URL ?? \"https://goldrush-mcp.vercel.app\"\n // );\n}\n\nexport function getAllConfig(): GoldRushConfig {\n return {\n port: config.get(\"port\"),\n defaultChain: config.get(\"defaultChain\"),\n quoteCurrency: config.get(\"quoteCurrency\"),\n };\n}\n","import { getApiKey } from \"./config.js\";\nimport { GoldRushClient } from \"@covalenthq/client-sdk\";\n\nexport async function validateApiKey(key: string): Promise<boolean> {\n try {\n const client = new GoldRushClient(key);\n const response =\n await client.BalanceService.getTokenBalancesForWalletAddress(\n \"eth-mainnet\",\n \"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\"\n );\n return !response.error;\n } catch {\n return false;\n }\n}\n\nexport async function getMaskedApiKey(): Promise<string> {\n const key = await getApiKey();\n if (!key) return \"Not set\";\n if (key.length <= 10) return \"***\";\n return `${key.slice(0, 6)}...${key.slice(-4)}`;\n}\n\nexport async function isAuthenticated(): Promise<boolean> {\n const key = await getApiKey();\n return key !== null;\n}\n","import boxen from \"boxen\";\nimport chalk from \"chalk\";\n\nexport function successBox(title: string, message: string): string {\n return boxen(message, {\n title: chalk.hex(\"#50FA7B\").bold(title),\n borderColor: \"green\",\n padding: 1,\n borderStyle: \"round\",\n });\n}\n\nexport function errorBox(title: string, message: string): string {\n return boxen(message, {\n title: chalk.hex(\"#FF6B6B\").bold(title),\n borderColor: \"red\",\n padding: 1,\n borderStyle: \"round\",\n });\n}\n\nexport function infoBox(title: string, message: string): string {\n return boxen(message, {\n title: chalk.hex(\"#00D8D5\").bold(title),\n borderColor: \"cyan\",\n padding: 1,\n borderStyle: \"round\",\n });\n}\n\nexport function warningBox(title: string, message: string): string {\n return boxen(message, {\n title: chalk.hex(\"#FFE66D\").bold(title),\n borderColor: \"yellow\",\n padding: 1,\n borderStyle: \"round\",\n });\n}\n","import ora, { type Ora } from \"ora\";\n\nexport function createSpinner(text: string): Ora {\n return ora({\n text,\n color: \"yellow\",\n });\n}\n\nexport async function withSpinner<T>(\n text: string,\n fn: () => Promise<T>\n): Promise<T> {\n const spinner = createSpinner(text);\n spinner.start();\n\n try {\n const result = await fn();\n spinner.succeed();\n return result;\n } catch (err: any) {\n spinner.fail(err.message ?? \"Failed\");\n throw err;\n }\n}\n","import chalk from \"chalk\";\n\nexport const colors = {\n primary: (text: string) => chalk.hex(\"#FF4C8B\")(text),\n accent: (text: string) => chalk.hex(\"#00D8D5\")(text),\n gold: (text: string) => chalk.hex(\"#FFD700\")(text),\n success: (text: string) => chalk.hex(\"#50FA7B\")(text),\n error: (text: string) => chalk.hex(\"#FF6B6B\")(text),\n warning: (text: string) => chalk.hex(\"#FFE66D\")(text),\n dim: (text: string) => chalk.hex(\"#868E96\")(text),\n foreground: (text: string) => chalk.hex(\"#FFFFFF\")(text),\n} as const;\n\nexport const title = (text: string): string => chalk.bold.hex(\"#FF4C8B\")(text);\n\nexport const success = (text: string): string => chalk.hex(\"#50FA7B\")(text);\nexport const error = (text: string): string => chalk.hex(\"#FF6B6B\")(text);\nexport const gold = (text: string): string => chalk.hex(\"#FFD700\")(text);\nexport const dim = (text: string): string => chalk.hex(\"#868E96\")(text);\nexport const accent = (text: string): string => chalk.hex(\"#00D8D5\")(text);\nexport const primary = (text: string): string => chalk.hex(\"#FF4C8B\")(text);\nexport const warning = (text: string): string => chalk.hex(\"#FFE66D\")(text);\n\nexport const categoryColors: Record<string, string> = {\n BALANCE: \"#FFD700\",\n STREAM: \"#00D8D5\",\n TRADE: \"#FF4C8B\",\n CONFIG: \"#868E96\",\n};\n\nexport const categoryTag = (category: string): string =>\n chalk.bold.hex(categoryColors[category] ?? \"#868E96\")(`[${category}]`);\n","import { validateApiKey, getMaskedApiKey } from \"../auth.js\";\nimport { setApiKey, getApiKey } from \"../config.js\";\nimport { successBox, errorBox, infoBox } from \"../ui/boxes.js\";\nimport { createSpinner } from \"../ui/spinner.js\";\nimport { colors } from \"../ui/theme.js\";\nimport { password } from \"@inquirer/prompts\";\nimport { Command } from \"commander\";\n\nexport const authCommand = new Command(\"auth\")\n .description(\"Set up your GoldRush API key\")\n .action(async () => {\n const existingKey = await getApiKey();\n if (existingKey) {\n const masked = await getMaskedApiKey();\n console.log(\n infoBox(\n \"Existing Key\",\n `Current API key: ${colors.gold(masked)}`\n )\n );\n }\n\n const apiKey = await password({\n message: \"Enter your GoldRush API key:\",\n mask: \"*\",\n });\n\n if (!apiKey.trim()) {\n console.log(errorBox(\"Error\", \"API key cannot be empty\"));\n return;\n }\n\n const spinner = createSpinner(\"Validating API key...\");\n spinner.start();\n\n const isValid = await validateApiKey(apiKey.trim());\n\n if (isValid) {\n await setApiKey(apiKey.trim());\n spinner.succeed(\"API key validated and stored securely\");\n console.log(\n successBox(\n \"Authentication Complete\",\n `API key stored in OS keychain\\nKey: ${colors.gold(apiKey.trim().slice(0, 6) + \"...\" + apiKey.trim().slice(-4))}`\n )\n );\n } else {\n spinner.fail(\"Invalid API key\");\n console.log(\n errorBox(\n \"Authentication Failed\",\n \"The API key could not be validated.\\nGet a key at https://goldrush.dev/platform/apikey/\"\n )\n );\n }\n });\n","import { getApiKey } from \"./config.js\";\nimport { GoldRushClient } from \"@covalenthq/client-sdk\";\n\nlet clientInstance: GoldRushClient | null = null;\n\nexport async function getClient(): Promise<GoldRushClient> {\n if (clientInstance) return clientInstance;\n\n const apiKey = await getApiKey();\n if (!apiKey) {\n throw new Error(\n \"No API key configured. Run `goldrush auth` to set up.\"\n );\n }\n\n clientInstance = new GoldRushClient(apiKey);\n return clientInstance;\n}\n\nexport function resetClient(): void {\n clientInstance = null;\n}\n","import { getClient } from \"../client.js\";\nimport type { TokenBalance, BalanceQueryOptions } from \"./types.js\";\nimport type { Chain, Quote } from \"@covalenthq/client-sdk\";\n\nexport async function getTokenBalances(\n chainName: string,\n walletAddress: string,\n options: BalanceQueryOptions = {}\n): Promise<TokenBalance[]> {\n const client = await getClient();\n const { noSpam = true, quoteCurrency = \"USD\" } = options;\n\n const response =\n await client.BalanceService.getTokenBalancesForWalletAddress(\n chainName as Chain,\n walletAddress,\n {\n noSpam,\n quoteCurrency: quoteCurrency as Quote,\n }\n );\n\n if (response.error) {\n throw new Error(`GoldRush API error: ${response.error_message}`);\n }\n\n const items = response.data?.items ?? [];\n\n return items.map((item: any) => ({\n symbol: item.contract_ticker_symbol ?? \"???\",\n name: item.contract_name ?? \"Unknown\",\n contractAddress: item.contract_address ?? \"\",\n balance: item.balance?.toString() ?? \"0\",\n decimals: item.contract_decimals ?? 18,\n quote: item.quote ?? 0,\n quoteRate: item.quote_rate ?? 0,\n change24h:\n item.quote_rate_24h != null\n ? ((item.quote_rate - item.quote_rate_24h) /\n item.quote_rate_24h) *\n 100\n : null,\n logoUrl: item.logo_url ?? null,\n isSpam: item.is_spam ?? false,\n isNft: item.nft_data != null,\n }));\n}\n\nexport async function getNativeBalance(\n chainName: string,\n walletAddress: string\n): Promise<TokenBalance | null> {\n const balances = await getTokenBalances(chainName, walletAddress, {\n noSpam: true,\n });\n return (\n balances.find(\n (b) =>\n b.contractAddress ===\n \"0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee\"\n ) ??\n balances[0] ??\n null\n );\n}\n\nexport async function getHistoricalPortfolio(\n chainName: string,\n walletAddress: string\n): Promise<any> {\n const client = await getClient();\n const response =\n await client.BalanceService.getHistoricalPortfolioForWalletAddress(\n chainName as Chain,\n walletAddress\n );\n\n if (response.error) {\n throw new Error(`GoldRush API error: ${response.error_message}`);\n }\n\n return response.data;\n}\n","export function formatUSD(value: number): string {\n return new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n }).format(value);\n}\n\nexport function formatBalance(balance: string, decimals: number): string {\n if (!balance || balance === \"0\") return \"0\";\n const raw = balance.padStart(decimals + 1, \"0\");\n const integerPart = raw.slice(0, raw.length - decimals) || \"0\";\n const fractionalPart = raw.slice(raw.length - decimals);\n const trimmed = fractionalPart.replace(/0+$/, \"\");\n if (!trimmed) return formatNumber(Number(integerPart));\n return formatNumber(Number(integerPart)) + \".\" + trimmed.slice(0, 6);\n}\n\nexport function formatAddress(address: string): string {\n if (address.length <= 10) return address;\n return address.slice(0, 6) + \"...\" + address.slice(-4);\n}\n\nexport function formatPercent(value: number): string {\n const sign = value >= 0 ? \"+\" : \"\";\n return sign + value.toFixed(2) + \"%\";\n}\n\nexport function formatNumber(value: number): string {\n return new Intl.NumberFormat(\"en-US\").format(value);\n}\n\nexport function formatTimestamp(date: Date): string {\n const h = String(date.getHours()).padStart(2, \"0\");\n const m = String(date.getMinutes()).padStart(2, \"0\");\n const s = String(date.getSeconds()).padStart(2, \"0\");\n return `${h}:${m}:${s}`;\n}\n\nexport function formatAge(date: Date): string {\n const seconds = Math.floor((Date.now() - date.getTime()) / 1000);\n if (seconds < 60) return `${seconds}s`;\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return `${minutes}m`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}h`;\n const days = Math.floor(hours / 24);\n return `${days}d`;\n}\n\nexport function formatGasCostUSD(value: number): string {\n if (value === 0) return \"$0.00\";\n if (value < 0.01) return `$${value.toFixed(6)}`;\n return formatUSD(value);\n}\n\nexport function formatPriceUSD(value: number): string {\n if (value === 0) return \"$0\";\n if (value < 0.0001) {\n const str = value.toFixed(20).replace(/0+$/, \"\");\n const match = str.match(/^0\\.(0+)/);\n if (match) {\n const zeroCount = match[1].length;\n const significant = str.slice(2 + zeroCount, 2 + zeroCount + 4);\n return `$0.0${subscriptDigit(zeroCount)}${significant}`;\n }\n }\n if (value < 0.01) return `$${value.toFixed(6)}`;\n return formatUSD(value);\n}\n\nfunction subscriptDigit(n: number): string {\n const subscripts = \"₀₁₂₃₄₅₆₇₈₉\";\n return String(n)\n .split(\"\")\n .map((d) => subscripts[Number(d)])\n .join(\"\");\n}\n\nconst SPARK_BLOCKS = \"▁▂▃▄▅▆▇█\";\n\nexport function sparkline(values: number[]): string {\n if (values.length < 2) return \"\";\n const min = Math.min(...values);\n const max = Math.max(...values);\n const range = max - min;\n if (range === 0) return SPARK_BLOCKS[3].repeat(values.length);\n return values\n .map((v) => {\n const idx = Math.round(\n ((v - min) / range) * (SPARK_BLOCKS.length - 1)\n );\n return SPARK_BLOCKS[idx];\n })\n .join(\"\");\n}\n","import type {\n GasPrice,\n NewPair,\n TokenBalance,\n TokenSearchResult,\n TopTrader,\n TransferItem,\n WalletActivity,\n} from \"../api/types.js\";\nimport {\n formatAddress,\n formatAge,\n formatBalance,\n formatGasCostUSD,\n formatPriceUSD,\n formatUSD,\n formatPercent,\n formatTimestamp,\n sparkline,\n} from \"../utils/format.js\";\nimport chalk from \"chalk\";\nimport Table from \"cli-table3\";\n\nexport function renderTable(\n headers: string[],\n rows: string[][],\n options?: { colAligns?: Array<\"left\" | \"center\" | \"right\"> }\n): void {\n const table = new Table({\n head: headers.map((h) => chalk.hex(\"#FF4C8B\").bold(h)),\n style: { head: [], border: [\"gray\"] },\n ...(options?.colAligns ? { colAligns: options.colAligns } : {}),\n });\n\n for (const row of rows) {\n table.push(row);\n }\n\n console.log(table.toString());\n}\n\nexport function renderBalanceTable(balances: TokenBalance[]): void {\n if (balances.length === 0) {\n console.log(chalk.hex(\"#868E96\")(\" No tokens found.\"));\n return;\n }\n\n const sorted = [...balances].sort((a, b) => b.quote - a.quote);\n const totalValue = sorted.reduce((sum, b) => sum + b.quote, 0);\n\n const headers = [\"Token\", \"Balance\", \"Value (USD)\", \"24h\", \"Alloc\"];\n const rows: string[][] = sorted.map((b) => {\n const balance = formatBalance(b.balance, b.decimals);\n const value = formatUSD(b.quote);\n const change =\n b.change24h != null\n ? b.change24h >= 0\n ? chalk.hex(\"#50FA7B\")(formatPercent(b.change24h))\n : chalk.hex(\"#FF6B6B\")(formatPercent(b.change24h))\n : chalk.hex(\"#868E96\")(\"—\");\n const alloc =\n totalValue > 0\n ? renderBar(b.quote / totalValue)\n : chalk.hex(\"#868E96\")(\"—\");\n\n return [\n chalk.hex(\"#FFD700\")(b.symbol) +\n chalk.hex(\"#868E96\")(` ${b.name.slice(0, 20)}`),\n balance.length > 12 ? balance.slice(0, 12) + \"…\" : balance,\n chalk.hex(\"#FFD700\")(value),\n change,\n alloc,\n ];\n });\n\n renderTable(headers, rows, {\n colAligns: [\"left\", \"right\", \"right\", \"right\", \"left\"],\n });\n}\n\nexport function renderTransferTable(\n transfers: TransferItem[],\n walletAddress: string\n): void {\n if (transfers.length === 0) {\n console.log(chalk.hex(\"#868E96\")(\" No transfers found.\"));\n return;\n }\n\n const headers = [\n \"Time\",\n \"Tx Hash\",\n \"Direction\",\n \"From / To\",\n \"Value (USD)\",\n \"Gas\",\n \"Status\",\n ];\n const lowerWallet = walletAddress.toLowerCase();\n const rows: string[][] = transfers.map((t) => {\n const isIncoming = t.toAddress.toLowerCase() === lowerWallet;\n const direction = isIncoming\n ? chalk.hex(\"#50FA7B\")(\"IN\")\n : chalk.hex(\"#FF6B6B\")(\"OUT\");\n const counterparty = isIncoming ? t.fromAddress : t.toAddress;\n const counterLabel = isIncoming ? t.fromLabel : t.toLabel;\n const counterDisplay = counterLabel\n ? chalk.hex(\"#868E96\")(counterLabel)\n : formatAddress(counterparty);\n const status = t.successful\n ? chalk.hex(\"#50FA7B\")(\"OK\")\n : chalk.hex(\"#FF6B6B\")(\"FAIL\");\n\n return [\n chalk.hex(\"#868E96\")(formatTimestamp(t.blockSignedAt)),\n chalk.hex(\"#868E96\")(formatAddress(t.txHash)),\n direction,\n counterDisplay,\n t.valueQuote > 0\n ? chalk.hex(\"#FFD700\")(formatUSD(t.valueQuote))\n : chalk.hex(\"#868E96\")(\"$0.00\"),\n chalk.hex(\"#868E96\")(formatUSD(t.gasQuote)),\n status,\n ];\n });\n\n renderTable(headers, rows, {\n colAligns: [\n \"left\",\n \"left\",\n \"center\",\n \"left\",\n \"right\",\n \"right\",\n \"center\",\n ],\n });\n}\n\nexport function renderSearchResultsTable(results: TokenSearchResult[]): void {\n if (results.length === 0) {\n console.log(chalk.hex(\"#868E96\")(\" No results found.\"));\n return;\n }\n\n const headers = [\n \"Token\",\n \"Pair\",\n \"Chain\",\n \"Price (USD)\",\n \"Volume (USD)\",\n \"Market Cap\",\n ];\n const rows: string[][] = results.map((r) => {\n const priceStr =\n r.quoteRateUsd < 0.01\n ? `$${r.quoteRateUsd.toFixed(8)}`\n : formatUSD(r.quoteRateUsd);\n\n return [\n chalk.hex(\"#FFD700\")(r.baseToken.symbol) +\n chalk.hex(\"#868E96\")(` / ${r.quoteToken.symbol}`),\n chalk.hex(\"#868E96\")(formatAddress(r.pairAddress)),\n chalk.hex(\"#6C8EBF\")(r.chain),\n chalk.hex(\"#FFD700\")(priceStr),\n r.volumeUsd > 0\n ? formatUSD(r.volumeUsd)\n : chalk.hex(\"#868E96\")(\"—\"),\n r.marketCap > 0\n ? formatUSD(r.marketCap)\n : chalk.hex(\"#868E96\")(\"—\"),\n ];\n });\n\n renderTable(headers, rows, {\n colAligns: [\"left\", \"left\", \"left\", \"right\", \"right\", \"right\"],\n });\n}\n\nexport function renderTopTradersTable(traders: TopTrader[]): void {\n if (traders.length === 0) {\n console.log(chalk.hex(\"#868E96\")(\" No traders found.\"));\n return;\n }\n\n const headers = [\n \"#\",\n \"Address\",\n \"Token\",\n \"Balance\",\n \"Volume\",\n \"Txns\",\n \"Realized PnL\",\n \"Unrealized PnL\",\n ];\n const rows: string[][] = traders.map((t, i) => {\n const pnlRealized =\n t.pnlRealizedUsd >= 0\n ? chalk.hex(\"#50FA7B\")(formatUSD(t.pnlRealizedUsd))\n : chalk.hex(\"#FF6B6B\")(formatUSD(t.pnlRealizedUsd));\n const pnlUnrealized =\n t.pnlUnrealizedUsd >= 0\n ? chalk.hex(\"#50FA7B\")(formatUSD(t.pnlUnrealizedUsd))\n : chalk.hex(\"#FF6B6B\")(formatUSD(t.pnlUnrealizedUsd));\n\n return [\n chalk.hex(\"#868E96\")(String(i + 1)),\n formatAddress(t.address),\n chalk.hex(\"#FFD700\")(t.tokenSymbol),\n t.balancePretty,\n chalk.hex(\"#FFD700\")(t.volume),\n chalk.hex(\"#868E96\")(String(t.transactionsCount)),\n pnlRealized,\n pnlUnrealized,\n ];\n });\n\n renderTable(headers, rows, {\n colAligns: [\n \"right\",\n \"left\",\n \"left\",\n \"right\",\n \"right\",\n \"right\",\n \"right\",\n \"right\",\n ],\n });\n}\n\nexport interface PairLiveData {\n lastUpdatedAt?: Date;\n priceHistory?: number[];\n}\n\nconst FLASH_DURATION_MS = 3000;\n\nexport function buildNewPairsTable(\n pairs: NewPair[],\n liveData?: Map<string, PairLiveData>,\n selectedIndex?: number\n): string {\n if (pairs.length === 0) {\n return chalk.hex(\"#868E96\")(\" No new pairs found.\");\n }\n\n const headers = [\n \" \",\n \"Pair\",\n \"Address\",\n \"Age\",\n \"Protocol\",\n \"Liq\",\n \"MCap\",\n \"Price\",\n \"Trend\",\n ];\n const rows: string[][] = pairs.map((p, i) => {\n const live = liveData?.get(p.pairAddress);\n const isFlashing =\n live?.lastUpdatedAt != null &&\n Date.now() - live.lastUpdatedAt.getTime() < FLASH_DURATION_MS;\n const flashColor = isFlashing ? \"#50FA7B\" : null;\n const isSelected = selectedIndex != null && i === selectedIndex;\n\n const marker = isSelected\n ? chalk.hex(\"#FF4C8B\").bold(\">\")\n : chalk.hex(\"#868E96\")(\" \");\n const pair =\n chalk.hex(\"#FFD700\")(p.token0.symbol) +\n chalk.hex(\"#868E96\")(\"/\") +\n chalk.hex(\"#FFD700\")(p.token1.symbol);\n const address = chalk.hex(isSelected ? \"#FFFFFF\" : \"#868E96\")(\n formatAddress(p.pairAddress)\n );\n const age = chalk.hex(\"#868E96\")(formatAge(p.createdAt));\n const protocol = chalk.hex(\"#6C8EBF\")(p.dexName);\n\n const hasLiq = p.initialLiquidity != null && p.initialLiquidity > 0;\n const liq = hasLiq\n ? chalk.hex(flashColor ?? \"#FFFFFF\")(formatUSD(p.initialLiquidity!))\n : chalk.hex(\"#868E96\")(\"—\");\n\n const hasMcap = p.marketCap != null && p.marketCap > 0;\n const mcap = hasMcap\n ? chalk.hex(flashColor ?? \"#FFFFFF\")(formatUSD(p.marketCap!))\n : chalk.hex(\"#868E96\")(\"PENDING\");\n\n const hasPrice = p.priceUsd != null && p.priceUsd > 0;\n const priceStr = hasPrice ? formatPriceUSD(p.priceUsd!) : \"$0\";\n const price = hasPrice\n ? chalk.hex(flashColor ?? \"#FFFFFF\")(priceStr)\n : chalk.hex(\"#868E96\")(priceStr);\n\n const spark =\n live?.priceHistory && live.priceHistory.length >= 2\n ? chalk.hex(\"#6C8EBF\")(sparkline(live.priceHistory))\n : chalk.hex(\"#868E96\")(\"—\");\n\n return [marker, pair, address, age, protocol, liq, mcap, price, spark];\n });\n\n const table = new Table({\n head: headers.map((h) => chalk.hex(\"#FF4C8B\").bold(h)),\n style: { head: [], border: [\"gray\"] },\n colAligns: [\n \"center\",\n \"left\",\n \"left\",\n \"right\",\n \"left\",\n \"right\",\n \"right\",\n \"right\",\n \"left\",\n ] as Array<\"left\" | \"center\" | \"right\">,\n });\n\n for (const row of rows) {\n table.push(row);\n }\n\n return table.toString();\n}\n\nexport function renderNewPairsTable(pairs: NewPair[]): void {\n console.log(buildNewPairsTable(pairs));\n}\n\nconst TYPE_COLORS: Record<string, string> = {\n transfer: \"#6C8EBF\",\n swap: \"#FFD700\",\n bridge: \"#FF4C8B\",\n deposit: \"#50FA7B\",\n withdraw: \"#FF6B6B\",\n approve: \"#868E96\",\n unknown: \"#868E96\",\n};\n\nexport function buildWatchTable(\n activities: WalletActivity[],\n watchedAddress: string,\n selectedIndex?: number\n): string {\n if (activities.length === 0) {\n return chalk.hex(\"#868E96\")(\" Waiting for transactions...\");\n }\n\n const lowerWatched = watchedAddress.toLowerCase();\n const headers = [\n \" \",\n \"Time\",\n \"Tx Hash\",\n \"Type\",\n \"Dir\",\n \"Details\",\n \"Value (USD)\",\n \"Status\",\n ];\n const rows: string[][] = activities.map((a, i) => {\n const isSelected = selectedIndex != null && i === selectedIndex;\n\n const marker = isSelected\n ? chalk.hex(\"#FF4C8B\").bold(\">\")\n : chalk.hex(\"#868E96\")(\" \");\n\n const time = chalk.hex(\"#868E96\")(formatTimestamp(a.blockSignedAt));\n const txHash = chalk.hex(isSelected ? \"#FFFFFF\" : \"#868E96\")(\n formatAddress(a.txHash)\n );\n\n const typeColor = TYPE_COLORS[a.decodedType] ?? \"#868E96\";\n const type = chalk.hex(typeColor)(a.decodedType.toUpperCase());\n\n const isIncoming = a.toAddress.toLowerCase() === lowerWatched;\n const dir = isIncoming\n ? chalk.hex(\"#50FA7B\")(\"IN\")\n : chalk.hex(\"#FF6B6B\")(\"OUT\");\n\n const details = a.detailsSummary\n ? chalk.hex(\"#FFFFFF\")(\n a.detailsSummary.length > 30\n ? a.detailsSummary.slice(0, 27) + \"...\"\n : a.detailsSummary\n )\n : chalk.hex(\"#868E96\")(\"—\");\n\n const value =\n a.quoteUsd > 0\n ? chalk.hex(\"#FFD700\")(formatUSD(a.quoteUsd))\n : chalk.hex(\"#868E96\")(\"—\");\n\n const status = a.successful\n ? chalk.hex(\"#50FA7B\")(\"OK\")\n : chalk.hex(\"#FF6B6B\")(\"FAIL\");\n\n return [marker, time, txHash, type, dir, details, value, status];\n });\n\n const table = new Table({\n head: headers.map((h) => chalk.hex(\"#FF4C8B\").bold(h)),\n style: { head: [], border: [\"gray\"] },\n colAligns: [\n \"center\",\n \"left\",\n \"left\",\n \"left\",\n \"center\",\n \"left\",\n \"right\",\n \"center\",\n ] as Array<\"left\" | \"center\" | \"right\">,\n });\n\n for (const row of rows) {\n table.push(row);\n }\n\n return table.toString();\n}\n\nexport function renderGasTable(items: GasPrice[]): void {\n if (items.length === 0) {\n console.log(chalk.hex(\"#868E96\")(\" No gas data found.\"));\n return;\n }\n\n const headers = [\"Interval\", \"Gas Price (Gwei)\", \"Cost (USD)\"];\n const rows: string[][] = items.map((item) => {\n const gasPriceGwei = (Number(item.gasPrice) / 1_000_000_000).toFixed(2);\n const l1Note =\n item.l1GasQuote != null && item.l1GasQuote > 0\n ? chalk.hex(\"#868E96\")(` +L1`)\n : \"\";\n\n return [\n chalk.hex(\"#6C8EBF\")(item.interval),\n chalk.hex(\"#FFD700\")(gasPriceGwei),\n chalk.hex(\"#FFFFFF\")(formatGasCostUSD(item.totalGasQuote)) + l1Note,\n ];\n });\n\n renderTable(headers, rows, {\n colAligns: [\"left\", \"right\", \"right\"],\n });\n}\n\nfunction renderBar(ratio: number): string {\n const width = 12;\n const filled = Math.round(ratio * width);\n const bar =\n chalk.hex(\"#FF4C8B\")(\"█\".repeat(filled)) +\n chalk.hex(\"#868E96\")(\"░\".repeat(width - filled));\n return bar + chalk.hex(\"#868E96\")(` ${(ratio * 100).toFixed(1)}%`);\n}\n","import { getTokenBalances } from \"../api/balances.js\";\nimport { isAuthenticated } from \"../auth.js\";\nimport { getDefaultChain } from \"../config.js\";\nimport { errorBox, successBox } from \"../ui/boxes.js\";\nimport { createSpinner } from \"../ui/spinner.js\";\nimport { renderBalanceTable } from \"../ui/tables.js\";\nimport { colors } from \"../ui/theme.js\";\nimport { formatAddress, formatUSD } from \"../utils/format.js\";\nimport { input } from \"@inquirer/prompts\";\nimport { Command } from \"commander\";\n\nexport const balancesCommand = new Command(\"balances\")\n .description(\"Fetch token balances for a wallet address\")\n .argument(\"[address]\", \"Wallet address (0x format or ENS)\")\n .argument(\"[chain]\", \"Blockchain name (e.g. eth-mainnet)\")\n .option(\"--no-spam\", \"Filter spam tokens\", true)\n .option(\"--no-nft\", \"Exclude NFTs\", true)\n .option(\"--quote-currency <currency>\", \"Quote currency\", \"USD\")\n .action(\n async (\n address: string | undefined,\n chain: string | undefined,\n options: any\n ) => {\n if (!(await isAuthenticated())) {\n console.log(\n errorBox(\n \"Not Authenticated\",\n \"Run `goldrush auth` to set up your API key\"\n )\n );\n return;\n }\n\n const chainName = chain ?? getDefaultChain();\n\n if (!address) {\n address = await input({\n message: colors.primary(\n `Enter wallet address ${colors.dim(`(chain: ${chainName})`)}:`\n ),\n });\n } else if (!chain) {\n console.log(colors.dim(` Using default chain: ${chainName}`));\n }\n\n if (!address?.trim()) {\n console.log(\n errorBox(\n \"Missing Address\",\n \"Please provide a wallet address.\"\n )\n );\n return;\n }\n\n const spinner = createSpinner(\n `Fetching balances for ${colors.accent(formatAddress(address))} on ${colors.accent(chainName)}`\n );\n spinner.start();\n\n try {\n const balances = await getTokenBalances(chainName, address, {\n noSpam: options.spam === false ? false : true,\n quoteCurrency: options.quoteCurrency,\n });\n\n spinner.succeed(`Found ${balances.length} tokens`);\n\n const totalValue = balances.reduce(\n (sum, b) => sum + b.quote,\n 0\n );\n console.log(\n successBox(\n `Portfolio — ${chainName}`,\n `Address: ${colors.accent(address)}\\nTotal Value: ${colors.gold(formatUSD(totalValue))}`\n )\n );\n\n renderBalanceTable(balances);\n } catch (err: any) {\n spinner.fail(\"Failed to fetch balances\");\n console.log(errorBox(\"Error\", err.message));\n }\n }\n );\n","{\n \"data\": {\n \"allBlockchains\": [\n {\n \"id\": \"194520637\",\n \"_status\": \"published\",\n \"updatedAt\": \"2026-02-24T20:48:16+00:00\",\n \"displayname\": \"Gnosis\",\n \"chainname\": \"gnosis-mainnet\",\n \"chainid\": \"100\",\n \"description\": \"Discover Gnosis Chain - a community-run Ethereum sidechain for decentralized prediction, governance, and efficient dApps.\",\n \"weight\": null,\n \"url\": \"https://docs.gnosischain.com/\",\n \"support\": \"foundational\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1695328167-gnosis-chain-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1695328162-gnosis-chain-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1695328138-gnosis-chain-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://gnosis.blockscout.com/\",\n \"blockexplorerlabel\": \"Gnosis Blockscout\",\n \"blocktime\": 5,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"xDAI\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#3E6857\",\n \"cssRgb\": \"rgb(62 104 87)\"\n }\n },\n {\n \"id\": \"S-aT0gT1RKKclh_nSvEGlQ\",\n \"_status\": \"published\",\n \"updatedAt\": \"2026-02-24T20:45:50+00:00\",\n \"displayname\": \"MegaETH\",\n \"chainname\": \"megaeth-mainnet\",\n \"chainid\": \"4326\",\n \"description\": \"MegaETH is real-time Ethereum, streaming transactions at lightning speed: sub-millisecond latency and over 100,000 transactions per second.\",\n \"weight\": null,\n \"url\": \"https://www.megaeth.com/\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1764723640-megaeth-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1764723640-megaeth-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1764723640-megaeth-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://megaeth.blockscout.com/\",\n \"blockexplorerlabel\": \"MEGA Mainnet Explorer\",\n \"blocktime\": 1,\n \"foundationalapi\": true,\n \"streamingapi\": true,\n \"nativegastoken\": \"ETH\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"This chain leverages major token prices (BTC, ETH, SOL) powered by Redstone Bolt, offering ultra-low-latency CEX price feeds updated every 2.4ms (~400 updates/sec), sourced from Binance, Coinbase, OKX, Bitget, and Kraken via co-located Bolt nodes. These price feeds are incorporated into the [OHLCV Tokens Stream](/api-reference/streaming-api/subscriptions/ohlcv-tokens-stream#supported-token-price-feeds). \"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"info\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": true,\n \"chainthemecolor\": {\n \"hex\": \"#0154FA\",\n \"cssRgb\": \"rgb(1 84 250)\"\n }\n },\n {\n \"id\": \"68416472\",\n \"_status\": \"published\",\n \"updatedAt\": \"2026-02-24T19:05:04+00:00\",\n \"displayname\": \"Solana\",\n \"chainname\": \"solana-mainnet\",\n \"chainid\": \"1399811149\",\n \"description\": \"Solana delivers 400ms block times and sub-cent transaction fees, making it the chain of choice for high-frequency trading, gaming, and consumer applications at scale.\",\n \"weight\": null,\n \"url\": \"https://solana.com/\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1670614895-solana-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1670614899-solana-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1670614903-solana-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://explorer.solana.com/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 1,\n \"foundationalapi\": true,\n \"streamingapi\": true,\n \"nativegastoken\": \"SOL\",\n \"suspended\": null,\n \"notes\": null,\n \"noteType\": \"\",\n \"docsException\": null,\n \"historicalBalances\": null,\n \"popular\": true,\n \"chainthemecolor\": {\n \"hex\": \"#A75BE8\",\n \"cssRgb\": \"rgb(167 91 232)\"\n }\n },\n {\n \"id\": \"VZREirjHQ-2SKdf-wi39DQ\",\n \"_status\": \"published\",\n \"updatedAt\": \"2026-02-24T19:04:01+00:00\",\n \"displayname\": \"Base Sepolia Testnet\",\n \"chainname\": \"base-sepolia-testnet\",\n \"chainid\": \"84532\",\n \"description\": \"Base is Coinbase's secure, low-cost L2 built on the OP Stack. With native Coinbase integrations and a thriving developer ecosystem, Base is bringing the next billion users onchain.\",\n \"weight\": null,\n \"url\": \"https://docs.base.org/base-contracts/#base-testnet-goerli--sepolia\",\n \"support\": \"foundational\",\n \"testnet\": true,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1756321884-base-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1756321900-base-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1756321919-base-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": {\n \"chainname\": \"base-mainnet\",\n \"displayname\": \"Base\"\n },\n \"blockexplorer\": \"https://base-sepolia.blockscout.com/\",\n \"blockexplorerlabel\": \"Base Sepolia Explorer\",\n \"blocktime\": 2,\n \"foundationalapi\": false,\n \"streamingapi\": true,\n \"nativegastoken\": \"ETH\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#3673F5\",\n \"cssRgb\": \"rgb(54 115 245)\"\n }\n },\n {\n \"id\": \"174236625\",\n \"_status\": \"published\",\n \"updatedAt\": \"2026-02-24T19:03:42+00:00\",\n \"displayname\": \"Base\",\n \"chainname\": \"base-mainnet\",\n \"chainid\": \"8453\",\n \"description\": \"Base is Coinbase's secure, low-cost L2 built on the OP Stack. With native Coinbase integrations and a thriving developer ecosystem, Base is bringing the next billion users onchain.\",\n \"weight\": null,\n \"url\": \"https://base.org/\",\n \"support\": \"foundational\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1756321884-base-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1756321900-base-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1756321919-base-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://basescan.org/\",\n \"blockexplorerlabel\": \"Base Explorer\",\n \"blocktime\": 2,\n \"foundationalapi\": true,\n \"streamingapi\": true,\n \"nativegastoken\": \"ETH\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": null,\n \"popular\": true,\n \"chainthemecolor\": {\n \"hex\": \"#0F5BE4\",\n \"cssRgb\": \"rgb(15 91 228)\"\n }\n },\n {\n \"id\": \"63788492\",\n \"_status\": \"published\",\n \"updatedAt\": \"2026-02-24T19:03:00+00:00\",\n \"displayname\": \"BNB Smart Chain (BSC)\",\n \"chainname\": \"bsc-mainnet\",\n \"chainid\": \"56\",\n \"description\": \"BNB Smart Chain (BSC) combines fast block times with low transaction costs, making it one of the most active chains for DeFi and token launches. Full EVM compatibility for easy deployment.\",\n \"weight\": 4,\n \"url\": \"https://www.bnbchain.org/en\",\n \"support\": \"foundational\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1670003808-binance-smart-chain-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1670003837-biance-smart-chain-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1670003836-biance-smart-chain-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://bscscan.com/\",\n \"blockexplorerlabel\": \"BscScan\",\n \"blocktime\": 5,\n \"foundationalapi\": true,\n \"streamingapi\": true,\n \"nativegastoken\": \"BNB\",\n \"suspended\": null,\n \"notes\": null,\n \"noteType\": \"\",\n \"docsException\": null,\n \"historicalBalances\": true,\n \"popular\": true,\n \"chainthemecolor\": {\n \"hex\": \"#F1B90A\",\n \"cssRgb\": \"rgb(241 185 10)\"\n }\n },\n {\n \"id\": \"fEx0pv2mROygBIHnx6fgPw\",\n \"_status\": \"published\",\n \"updatedAt\": \"2026-02-24T19:02:15+00:00\",\n \"displayname\": \"Arbitrum Sepolia Testnet\",\n \"chainname\": \"arbitrum-sepolia\",\n \"chainid\": \"421614\",\n \"description\": \"Arbitrum is Ethereum's leading L2 rollup, combining full EVM equivalence with dramatically lower fees. Trusted by major DeFi protocols for secure, scalable smart contract execution.\",\n \"weight\": null,\n \"url\": \"https://docs.arbitrum.io/for-devs/concepts/public-chains#arbitrum-sepolia\",\n \"support\": \"frontier\",\n \"testnet\": true,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1686072650-arbitrum-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669925028-arbitrum.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669925049-arbitrum-1.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": {\n \"chainname\": \"arbitrum-mainnet\",\n \"displayname\": \"Arbitrum\"\n },\n \"blockexplorer\": \"https://sepolia.arbiscan.io/\",\n \"blockexplorerlabel\": \"Sepolia Arbiscan\",\n \"blocktime\": 1,\n \"foundationalapi\": false,\n \"streamingapi\": false,\n \"nativegastoken\": \"ETH\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#203147\",\n \"cssRgb\": \"rgb(32 49 71)\"\n }\n },\n {\n \"id\": \"63165315\",\n \"_status\": \"published\",\n \"updatedAt\": \"2026-02-24T19:02:02+00:00\",\n \"displayname\": \"Arbitrum\",\n \"chainname\": \"arbitrum-mainnet\",\n \"chainid\": \"42161\",\n \"description\": \"Arbitrum is Ethereum's leading L2 rollup, combining full EVM equivalence with dramatically lower fees. Trusted by major DeFi protocols for secure, scalable smart contract execution.\",\n \"weight\": null,\n \"url\": \"https://arbitrum.io/\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1686072650-arbitrum-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669925028-arbitrum.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669925049-arbitrum-1.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://arbiscan.io/\",\n \"blockexplorerlabel\": \"Arbiscan\",\n \"blocktime\": 1,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"ETH\",\n \"suspended\": null,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"marks\": [\n \"strong\"\n ],\n \"value\": \"Note about how we calculate transaction fees on Arbitrum:\"\n }\n ]\n },\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"Generally, the \"\n },\n {\n \"type\": \"span\",\n \"marks\": [\n \"code\"\n ],\n \"value\": \"fees_paid\"\n },\n {\n \"type\": \"span\",\n \"value\": \" in our transaction response is simply the product of \"\n },\n {\n \"type\": \"span\",\n \"marks\": [\n \"code\"\n ],\n \"value\": \"gas_price\"\n },\n {\n \"type\": \"span\",\n \"value\": \" and \"\n },\n {\n \"type\": \"span\",\n \"marks\": [\n \"code\"\n ],\n \"value\": \"gas_spent\"\n },\n {\n \"type\": \"span\",\n \"value\": \" .\"\n }\n ]\n },\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n },\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"However for Arbitrum, the \"\n },\n {\n \"type\": \"span\",\n \"marks\": [\n \"code\"\n ],\n \"value\": \"fees_paid\"\n },\n {\n \"type\": \"span\",\n \"value\": \" in our transaction response is the sum of multiple L1 and L2 fees associated with the function call, transaction execution and storage. \"\n }\n ]\n },\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n },\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"To calculate the same \"\n },\n {\n \"type\": \"span\",\n \"marks\": [\n \"code\"\n ],\n \"value\": \"fees_paid\"\n },\n {\n \"type\": \"span\",\n \"value\": \" provided in our transaction response from \"\n },\n {\n \"url\": \"https://arbiscan.io/tx/0x24ba19119fa5c10ef1e92cc3f02519c5bc675fc4f3dfb4c9c2ca7744070b9e3c\",\n \"type\": \"link\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"Arbiscan\"\n }\n ]\n },\n {\n \"type\": \"span\",\n \"value\": \" , take the product of their \"\n },\n {\n \"type\": \"span\",\n \"marks\": [\n \"emphasis\"\n ],\n \"value\": \"Gas Price Bid\"\n },\n {\n \"type\": \"span\",\n \"value\": \" and \"\n },\n {\n \"type\": \"span\",\n \"marks\": [\n \"emphasis\"\n ],\n \"value\": \"Gas Usage\"\n },\n {\n \"type\": \"span\",\n \"value\": \". \"\n }\n ]\n },\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"info\",\n \"docsException\": null,\n \"historicalBalances\": null,\n \"popular\": true,\n \"chainthemecolor\": {\n \"hex\": \"#96CFF3\",\n \"cssRgb\": \"rgb(150 207 243)\"\n }\n },\n {\n \"id\": \"101449710\",\n \"_status\": \"published\",\n \"updatedAt\": \"2026-02-24T19:01:38+00:00\",\n \"displayname\": \"Bitcoin\",\n \"chainname\": \"btc-mainnet\",\n \"chainid\": \"20090103\",\n \"description\": \"Bitcoin is the original blockchain and the world's largest cryptocurrency by market cap. GoldRush provides enhanced Bitcoin support including UTXO tracking and historical balances for HD and non-HD addresses.\",\n \"weight\": 1,\n \"url\": \"https://bitcoin.org/en/\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1674516372-property-1-bitcoin-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1674516379-property-1-bitcoin-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1674516385-property-1-bitcoin-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://blockstream.info/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 600,\n \"foundationalapi\": false,\n \"streamingapi\": false,\n \"nativegastoken\": \"BTC\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"info\",\n \"docsException\": null,\n \"historicalBalances\": true,\n \"popular\": true,\n \"chainthemecolor\": {\n \"hex\": \"#FFBB00\",\n \"cssRgb\": \"rgb(255 187 0)\"\n }\n },\n {\n \"id\": \"NebQuaY6QrShsKcNqIem4Q\",\n \"_status\": \"published\",\n \"updatedAt\": \"2026-02-24T19:01:10+00:00\",\n \"displayname\": \"Monad Testnet\",\n \"chainname\": \"monad-testnet\",\n \"chainid\": \"10143\",\n \"description\": \"Monad redefines L1 scalability with 10,000 TPS, 1-second finality, and near-zero gas fees while maintaining full EVM compatibility. The next generation of high-performance blockchains.\",\n \"weight\": null,\n \"url\": \"https://www.monad.xyz/\",\n \"support\": \"frontier\",\n \"testnet\": true,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1739233630-monad-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1739233630-monad-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1739233630-monad-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": {\n \"chainname\": \"monad-mainnet\",\n \"displayname\": \"Monad\"\n },\n \"blockexplorer\": \"https://testnet.monadexplorer.com/\",\n \"blockexplorerlabel\": \"Monad Blockchain Explorer\",\n \"blocktime\": 1,\n \"foundationalapi\": true,\n \"streamingapi\": true,\n \"nativegastoken\": \"MON\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#020202\",\n \"cssRgb\": \"rgb(2 2 2)\"\n }\n },\n {\n \"id\": \"NJu-6HxvQN-hk7TeyfJUtQ\",\n \"_status\": \"published\",\n \"updatedAt\": \"2026-02-24T19:01:03+00:00\",\n \"displayname\": \"Monad\",\n \"chainname\": \"monad-mainnet\",\n \"chainid\": \"143\",\n \"description\": \"Monad redefines L1 scalability with 10,000 TPS, 1-second finality, and near-zero gas fees while maintaining full EVM compatibility. The next generation of high-performance blockchains.\",\n \"weight\": null,\n \"url\": \"https://www.monad.xyz/\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1739233630-monad-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1739233630-monad-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1739233630-monad-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://monadexplorer.com/\",\n \"blockexplorerlabel\": \"Monad Blockchain Explorer\",\n \"blocktime\": 1,\n \"foundationalapi\": true,\n \"streamingapi\": true,\n \"nativegastoken\": \"MON\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": true,\n \"chainthemecolor\": {\n \"hex\": \"#020202\",\n \"cssRgb\": \"rgb(2 2 2)\"\n }\n },\n {\n \"id\": \"ahdk7Lw0TWmOwSkj3q65bQ\",\n \"_status\": \"published\",\n \"updatedAt\": \"2026-02-24T19:00:35+00:00\",\n \"displayname\": \"HyperEVM\",\n \"chainname\": \"hyperevm-mainnet\",\n \"chainid\": \"999\",\n \"description\": \"HyperEVM brings Solidity smart contracts to the Hyperliquid ecosystem. Deploy familiar EVM dApps on a blockchain built for institutional-grade trading performance.\",\n \"weight\": null,\n \"url\": \"https://hyperfoundation.org/\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1754500110-hyperevm-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1753380946-hyperevm-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1753380946-hyperevm-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://hyperevmscan.io/\",\n \"blockexplorerlabel\": \"HyperEVM Explorer\",\n \"blocktime\": 1,\n \"foundationalapi\": true,\n \"streamingapi\": true,\n \"nativegastoken\": \"HYPE\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": true,\n \"chainthemecolor\": {\n \"hex\": \"#0154FA\",\n \"cssRgb\": \"rgb(1 84 250)\"\n }\n },\n {\n \"id\": \"D_H1wCC-QcCihlBVqUzgfA\",\n \"_status\": \"published\",\n \"updatedAt\": \"2026-02-24T18:59:50+00:00\",\n \"displayname\": \"HyperCore\",\n \"chainname\": \"hypercore-mainnet\",\n \"chainid\": \"na\",\n \"description\": \"HyperCore powers fully onchain perpetual futures and spot order books with 200,000 orders/second throughput. The backbone of Hyperliquid's high-performance trading infrastructure.\",\n \"weight\": null,\n \"url\": \"https://hyperfoundation.org/\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1754500110-hyperevm-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1753208171-hyperliquid-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1753208171-hyperliquid-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://app.hyperliquid.xyz/explorer\",\n \"blockexplorerlabel\": \"Hyperliquid Explorer\",\n \"blocktime\": 1,\n \"foundationalapi\": false,\n \"streamingapi\": true,\n \"nativegastoken\": \"HYPE\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": true,\n \"chainthemecolor\": {\n \"hex\": \"#000000\",\n \"cssRgb\": \"rgb(0 0 0)\"\n }\n },\n {\n \"id\": \"60524883\",\n \"_status\": \"published\",\n \"updatedAt\": \"2026-02-24T18:58:37+00:00\",\n \"displayname\": \"Polygon\",\n \"chainname\": \"matic-mainnet\",\n \"chainid\": \"137\",\n \"description\": \"Polygon PoS is the most battle-tested Ethereum scaling solution with 1.3B+ transactions, 130M wallets, and 2.7M monthly active users. The proven choice for production-grade applications.\",\n \"weight\": 3,\n \"url\": \"https://polygon.technology/\",\n \"support\": \"foundational\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1677870347-property-1-polygon-zkevm-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1677870452-property-1-polygon-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1677870457-property-1-polygon-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://polygonscan.com/\",\n \"blockexplorerlabel\": \"PolygonScan\",\n \"blocktime\": 3,\n \"foundationalapi\": true,\n \"streamingapi\": true,\n \"nativegastoken\": \"MATIC\",\n \"suspended\": null,\n \"notes\": null,\n \"noteType\": \"\",\n \"docsException\": null,\n \"historicalBalances\": true,\n \"popular\": true,\n \"chainthemecolor\": {\n \"hex\": \"#8247E5\",\n \"cssRgb\": \"rgb(130 71 229)\"\n }\n },\n {\n \"id\": \"60524877\",\n \"_status\": \"published\",\n \"updatedAt\": \"2026-02-24T18:58:02+00:00\",\n \"displayname\": \"Ethereum\",\n \"chainname\": \"eth-mainnet\",\n \"chainid\": \"1\",\n \"description\": \"Ethereum is the foundational smart contract platform powering the majority of DeFi, NFTs, and Web3 innovation. The most secure and decentralized programmable blockchain.\",\n \"weight\": 2,\n \"url\": \"https://ethereum.org\",\n \"support\": \"foundational\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669653891-eth.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669619533-ethereum.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669619544-ethereum.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://etherscan.io/\",\n \"blockexplorerlabel\": \"Etherscan\",\n \"blocktime\": 12,\n \"foundationalapi\": true,\n \"streamingapi\": true,\n \"nativegastoken\": \"ETH\",\n \"suspended\": null,\n \"notes\": null,\n \"noteType\": \"\",\n \"docsException\": null,\n \"historicalBalances\": true,\n \"popular\": true,\n \"chainthemecolor\": {\n \"hex\": \"#5E798A\",\n \"cssRgb\": \"rgb(94 121 138)\"\n }\n },\n {\n \"id\": \"Ir44DPmHSZiGpkT9Dn1DWA\",\n \"_status\": \"published\",\n \"updatedAt\": \"2026-02-19T19:47:02+00:00\",\n \"displayname\": \"Plasma Testnet\",\n \"chainname\": \"plasma-testnet\",\n \"chainid\": \"9746\",\n \"description\": \"Plasma is a high-performance layer 1 blockchain purpose-built for stablecoins. It powers near instant, fee-free payments with institutional-grade security.\",\n \"weight\": null,\n \"url\": \"https://www.plasma.to/\",\n \"support\": \"frontier\",\n \"testnet\": true,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1761690226-plasma-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1761690226-plasma-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1761690226-plasma-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": {\n \"chainname\": \"plasma-mainnet\",\n \"displayname\": \"Plasma\"\n },\n \"blockexplorer\": \"https://testnet.plasmascan.to/\",\n \"blockexplorerlabel\": \"Plasma Testnet Explorer\",\n \"blocktime\": 1,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"XPL\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#020202\",\n \"cssRgb\": \"rgb(2 2 2)\"\n }\n },\n {\n \"id\": \"BLCTjreiTlquQDE5bO1CSw\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-12-04T21:09:22+00:00\",\n \"displayname\": \"Arc Testnet\",\n \"chainname\": \"arc-testnet\",\n \"chainid\": \"5042002\",\n \"description\": \"Arc is an open L1 blockchain purpose-built to unite programmable money and onchain innovation with real-world economic activity.\",\n \"weight\": null,\n \"url\": \"https://www.adi.foundation/\",\n \"support\": \"frontier\",\n \"testnet\": true,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1761667158-arc-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1761667158-arc-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1761667158-arc-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://testnet.arcscan.app/\",\n \"blockexplorerlabel\": \"Arc Testnet Explorer\",\n \"blocktime\": 1,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"USDC\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": true,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#020202\",\n \"cssRgb\": \"rgb(2 2 2)\"\n }\n },\n {\n \"id\": \"FWnygrkgRrGGWXL4BLBoAA\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-12-04T18:59:34+00:00\",\n \"displayname\": \"ADI Chain\",\n \"chainname\": \"adi-mainnet\",\n \"chainid\": \"36900\",\n \"description\": \"ADI Chain is a compliance-native L2 backed by UAE institutions, enabling governments and regulated institutions to launch stablecoins, health systems, land registries and payment rails without sacrificing speed, efficiency, security or regulatory compliance.\",\n \"weight\": null,\n \"url\": \"https://www.adi.foundation/\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1762381992-adi-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1762382057-adi-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1762382070-adi-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": true,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://explorer.adifoundation.ai/\",\n \"blockexplorerlabel\": \"ADI Block Explorer\",\n \"blocktime\": 1,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"ADI\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#020202\",\n \"cssRgb\": \"rgb(2 2 2)\"\n }\n },\n {\n \"id\": \"ey3DGCBKTIuPRbLuMT_sXQ\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-12-04T18:29:49+00:00\",\n \"displayname\": \"ADI Testnet\",\n \"chainname\": \"adi-testnet\",\n \"chainid\": \"99999\",\n \"description\": \"ADI Chain is a compliance-native L2 backed by UAE institutions, enabling governments and regulated institutions to launch stablecoins, health systems, land registries and payment rails without sacrificing speed, efficiency, security or regulatory compliance.\",\n \"weight\": null,\n \"url\": \"https://www.adi.foundation/\",\n \"support\": \"frontier\",\n \"testnet\": true,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1762381992-adi-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1762382057-adi-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1762382070-adi-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": {\n \"chainname\": \"adi-mainnet\",\n \"displayname\": \"ADI Chain\"\n },\n \"blockexplorer\": \"https://explorer.testnet.adifoundation.ai/\",\n \"blockexplorerlabel\": \"ADI Testnet Block Explorer\",\n \"blocktime\": 1,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"ADI\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#020202\",\n \"cssRgb\": \"rgb(2 2 2)\"\n }\n },\n {\n \"id\": \"63204207\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-11-22T00:23:38+00:00\",\n \"displayname\": \"Cronos\",\n \"chainname\": \"cronos-mainnet\",\n \"chainid\": \"25\",\n \"description\": \"Cronos is the first Ethereum-compatible blockchain network built on Cosmos SDK technology. An open-source and permission-less Layer 1 chain which runs in parallel to the Crypto.org Chain, Cronos aims to massively scale the DeFi, GameFi, and overall Web3 user community by providing builders with the ability to instantly port apps and crypto assets from other chains while benefiting from low transaction fees, high throughput, and fast finality.\",\n \"weight\": null,\n \"url\": \"https://cronos.org/\",\n \"support\": \"archived\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669933123-cronos.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669933104-cronos-1.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669933090-cronos.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://cronoscan.com/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 6,\n \"foundationalapi\": false,\n \"streamingapi\": false,\n \"nativegastoken\": \"CRO\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"Chain is archived. \"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": null,\n \"historicalBalances\": null,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#012D74\",\n \"cssRgb\": \"rgb(1 45 116)\"\n }\n },\n {\n \"id\": \"63839220\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-11-22T00:22:50+00:00\",\n \"displayname\": \"Harmony Testnet\",\n \"chainname\": \"harmony-testnet\",\n \"chainid\": \"1666700000\",\n \"description\": \"-\",\n \"weight\": null,\n \"url\": \"https://www.harmony.one/\",\n \"support\": \"archived\",\n \"testnet\": true,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669932573-harmony.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669932596-harmony.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669932617-harmony-1.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": {\n \"chainname\": \"harmony-mainnet\",\n \"displayname\": \"Harmony\"\n },\n \"blockexplorer\": \"https://explorer.testnet.harmony.one/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 2,\n \"foundationalapi\": false,\n \"streamingapi\": false,\n \"nativegastoken\": \"ONE\",\n \"suspended\": null,\n \"notes\": null,\n \"noteType\": \"\",\n \"docsException\": null,\n \"historicalBalances\": null,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#06B2E7\",\n \"cssRgb\": \"rgb(6 178 231)\"\n }\n },\n {\n \"id\": \"63204186\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-11-22T00:22:40+00:00\",\n \"displayname\": \"Harmony\",\n \"chainname\": \"harmony-mainnet\",\n \"chainid\": \"1666600000\",\n \"description\": \"Explore Harmony, the open blockchain with 2-second finality, low fees, and secure cross-chain bridges for Ethereum apps. Dive into historical data now!\",\n \"weight\": null,\n \"url\": \"https://www.harmony.one/\",\n \"support\": \"archived\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669932573-harmony.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669932596-harmony.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669932617-harmony-1.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://explorer.harmony.one/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 2,\n \"foundationalapi\": false,\n \"streamingapi\": false,\n \"nativegastoken\": \"ONE\",\n \"suspended\": null,\n \"notes\": null,\n \"noteType\": \"\",\n \"docsException\": null,\n \"historicalBalances\": null,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#28CAD9\",\n \"cssRgb\": \"rgb(40 202 217)\"\n }\n },\n {\n \"id\": \"63795333\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-11-22T00:20:08+00:00\",\n \"displayname\": \"Fantom Testnet\",\n \"chainname\": \"fantom-testnet\",\n \"chainid\": \"4002\",\n \"description\": \"-\",\n \"weight\": null,\n \"url\": \"\",\n \"support\": \"community\",\n \"testnet\": true,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669925386-fantom.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669925359-fantom-1.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669925336-fantom.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": {\n \"chainname\": \"fantom-mainnet\",\n \"displayname\": \"Fantom\"\n },\n \"blockexplorer\": \"https://testnet.ftmscan.com/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 2,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"gwei\",\n \"suspended\": null,\n \"notes\": null,\n \"noteType\": \"\",\n \"docsException\": null,\n \"historicalBalances\": null,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#1D6BFF\",\n \"cssRgb\": \"rgb(29 107 255)\"\n }\n },\n {\n \"id\": \"63200698\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-11-22T00:19:50+00:00\",\n \"displayname\": \"Fantom\",\n \"chainname\": \"fantom-mainnet\",\n \"chainid\": \"250\",\n \"description\": \"Fantom is a fast, high-throughput open-source smart contract platform for digital assets and dApps. Founded in 2018, Fantom is designed to overcome the limitations of previous-generation blockchain platforms. Fantom is permissionless, decentralized, and open-source while achieving fast finality (1-2 second transaction confirmation) and low fees ($0.00001). Furthermore, Fantom is EVM-compatible. Fantom code is completely open source. Anyone can read it, check on the progress, comment on it, and contribute. Fantom integrates industry-leaders oracle providers Chainlink and Band Protocol for maximum flexibility to access price feeds.\",\n \"weight\": 6,\n \"url\": \"https://fantom.foundation/\",\n \"support\": \"community\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669925386-fantom.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669925359-fantom-1.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669925336-fantom.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://ftmscan.com/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 2,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"FTM\",\n \"suspended\": null,\n \"notes\": null,\n \"noteType\": \"\",\n \"docsException\": null,\n \"historicalBalances\": null,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#1969FF\",\n \"cssRgb\": \"rgb(25 105 255)\"\n }\n },\n {\n \"id\": \"119080365\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-11-22T00:13:25+00:00\",\n \"displayname\": \"Canto\",\n \"chainname\": \"canto-mainnet\",\n \"chainid\": \"7700\",\n \"description\": \"Canto is a general-purpose blockchain running the Ethereum Virtual Machine (EVM). It is focused on DeFi, making new systems will be made accessible, transparent, decentralized, and free.\",\n \"weight\": null,\n \"url\": \"https://canto.io/\",\n \"support\": \"community\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1675984804-property-1-canto-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1675984808-property-1-canto-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1675984811-property-1-canto-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://evm.explorer.canto.io/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 7,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"Canto\",\n \"suspended\": false,\n \"notes\": null,\n \"noteType\": \"\",\n \"docsException\": null,\n \"historicalBalances\": null,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#0EFF9A\",\n \"cssRgb\": \"rgb(14 255 154)\"\n }\n },\n {\n \"id\": \"Q7EGxnVIRWyIfattVpCy7g\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-11-05T18:27:47+00:00\",\n \"displayname\": \"Sei\",\n \"chainname\": \"sei-mainnet\",\n \"chainid\": \"1329\",\n \"description\": \"Sei is the first parallelized EVM, known for being extremely fast and processing multiple transactions at the same time.\",\n \"weight\": null,\n \"url\": \"https://www.sei.io/\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1719366713-sei-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1719366706-sei-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1719366715-sei-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://seistream.app/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 1,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"SEI\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#9E1E1A\",\n \"cssRgb\": \"rgb(158 30 26)\"\n }\n },\n {\n \"id\": \"TIogqYiJQNmoDDJ-qOnfFA\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-11-05T18:26:15+00:00\",\n \"displayname\": \"Redstone\",\n \"chainname\": \"redstone-mainnet\",\n \"chainid\": \"690\",\n \"description\": \"Redstone is a blockchain built for onchain games and autonomous worlds.\",\n \"weight\": null,\n \"url\": \"https://redstone.xyz/\",\n \"support\": \"community\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1721059591-redstone-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1721059584-redstone-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1721060361-redstone-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://explorer.redstone.xyz/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 2,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"ETH\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#F34242\",\n \"cssRgb\": \"rgb(243 66 66)\"\n }\n },\n {\n \"id\": \"195943616\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-11-05T18:25:25+00:00\",\n \"displayname\": \"opBNB\",\n \"chainname\": \"bnb-opbnb-mainnet\",\n \"chainid\": \"204\",\n \"description\": \"opBNB is an optimized L2 solution that offers low fees and high throughput for BNB Chain.\",\n \"weight\": null,\n \"url\": \"https://opbnb.bnbchain.org/en\",\n \"support\": \"community\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1692813949-opbnb-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1692813943-opbnb-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1692813952-opbnb-white.png\"\n },\n \"appchainof\": {\n \"chainname\": \"bsc-mainnet\",\n \"displayname\": \"BNB Smart Chain (BSC)\"\n },\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://opbnbscan.com/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 1,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"BNB\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#000000\",\n \"cssRgb\": \"rgb(0 0 0)\"\n }\n },\n {\n \"id\": \"63204233\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-11-05T18:24:45+00:00\",\n \"displayname\": \"Oasis\",\n \"chainname\": \"emerald-paratime-mainnet\",\n \"chainid\": \"42262\",\n \"description\": \"The Oasis Emerald ParaTime is the official EVM compatible ParaTime providing smart contract environment with full EVM compatibility.\",\n \"weight\": null,\n \"url\": \"https://oasisprotocol.org/\",\n \"support\": \"community\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669933877-oasis.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669933835-oasis.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669933853-oasis-1.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://explorer.emerald.oasis.dev/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 20,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"ROSE\",\n \"suspended\": null,\n \"notes\": null,\n \"noteType\": \"\",\n \"docsException\": null,\n \"historicalBalances\": null,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#0092F6\",\n \"cssRgb\": \"rgb(0 146 246)\"\n }\n },\n {\n \"id\": \"62185812\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-11-05T18:23:31+00:00\",\n \"displayname\": \"Moonriver\",\n \"chainname\": \"moonbeam-moonriver\",\n \"chainid\": \"1285\",\n \"description\": \"Moonriver is an Ethereum-compatible Solidity Smart Contracts Parachain on Kusama. Moonriver is a companion network to Moonbeam and provides a permanently incentivized canary network. New code ships to Moonriver first, where it can be tested and verified under real economic conditions. Once proven, the same code ships to Moonbeam on Polkadot. Moonriver is a Community-Led Sister Parachain on Kusama.\",\n \"weight\": null,\n \"url\": \"https://moonbeam.network/networks/moonriver/\",\n \"support\": \"community\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669924101-moonriver.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669924155-moonriver-1.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669924133-moonriver.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://moonriver.moonscan.io/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 12,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"MOVR\",\n \"suspended\": null,\n \"notes\": null,\n \"noteType\": \"\",\n \"docsException\": null,\n \"historicalBalances\": null,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#FFB800\",\n \"cssRgb\": \"rgb(255 184 0)\"\n }\n },\n {\n \"id\": \"62185775\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-11-05T18:23:22+00:00\",\n \"displayname\": \"Moonbeam\",\n \"chainname\": \"moonbeam-mainnet\",\n \"chainid\": \"1284\",\n \"description\": \"Explore Moonbeam, an Ethereum-compatible parachain on Polkadot with enhanced governance, staking, and cross-chain integrations. Get started now!\",\n \"weight\": null,\n \"url\": \"https://moonbeam.network/\",\n \"support\": \"community\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669924204-moonbeam.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669924256-moonbeam-1.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669924233-moonbeam.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://moonscan.io/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 6,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"GLMR\",\n \"suspended\": null,\n \"notes\": null,\n \"noteType\": \"\",\n \"docsException\": null,\n \"historicalBalances\": null,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#54CBC8\",\n \"cssRgb\": \"rgb(84 203 200)\"\n }\n },\n {\n \"id\": \"HWrgDydRQvemf7DDPqGIXg\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-11-05T18:18:05+00:00\",\n \"displayname\": \"Cronos zkEVM\",\n \"chainname\": \"cronos-zkevm-mainnet\",\n \"chainid\": \"388\",\n \"description\": \"Cronos zkEVM Mainnet is a zero-knowledge layer 2 network that was launched in a partnership between Cronos Labs and Matter Labs (the team behind zkSync) and Crypto.com. \",\n \"weight\": null,\n \"url\": \"https://docs.cronos.org/cronos-zkevm/cronos-zkevm\",\n \"support\": \"community\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1710187386-cronos-zkevm-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1710187389-cronos-zkevm-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1710187381-cronos-zkevm-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://explorer.zkevm.cronos.org\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 5,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"zkCRO\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#022C70\",\n \"cssRgb\": \"rgb(2 44 112)\"\n }\n },\n {\n \"id\": \"eeIT4NrcQK-o0cmr-jiiKw\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-11-05T18:12:32+00:00\",\n \"displayname\": \"Celo\",\n \"chainname\": \"celo-mainnet\",\n \"chainid\": \"42220\",\n \"description\": \"Celo is an EVM-compatible Layer-1 protocol. The Celo platform offers a decentralized address-based identity layer that makes it easy to send payments.\",\n \"weight\": null,\n \"url\": \"https://docs.celo.org/\",\n \"support\": \"community\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1705948628-celo-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1705948621-celo-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1705948630-celo-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://explorer.celo.org/mainnet/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 5,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"CELO\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#FCFF53\",\n \"cssRgb\": \"rgb(252 255 83)\"\n }\n },\n {\n \"id\": \"Fws6s_agQZ61_R4rMOoZgw\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-11-05T02:38:05+00:00\",\n \"displayname\": \"Blast\",\n \"chainname\": \"blast-mainnet\",\n \"chainid\": \"81457\",\n \"description\": \"Blast is an Ethereum L2 with native yield for ETH and Stablecoins.\",\n \"weight\": null,\n \"url\": \"https://blast.io/en\",\n \"support\": \"community\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1710534544-blast-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1710534536-blast-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1710534546-blast-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://blastexplorer.io/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 2,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"ETH\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#FCFC05\",\n \"cssRgb\": \"rgb(252 252 5)\"\n }\n },\n {\n \"id\": \"ZD8V3y_eQveMncVH3thMGg\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-11-05T02:37:05+00:00\",\n \"displayname\": \"ZetaChain\",\n \"chainname\": \"zetachain-mainnet\",\n \"chainid\": \"7000\",\n \"description\": \"ZetaChain is an EVM-compatible L1 blockchain for cross-chain apps.\",\n \"weight\": null,\n \"url\": \"https://www.zetachain.com/\",\n \"support\": \"community\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1693503842-zetachain-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1693331953-zetachain-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1693331958-zetachain-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://explorer.zetachain.com/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 5,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"ZETA\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#004B39\",\n \"cssRgb\": \"rgb(0 75 57)\"\n }\n },\n {\n \"id\": \"EefsAUUkR6CuYYUN2YaoTg\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-10-28T22:39:44+00:00\",\n \"displayname\": \"Plasma\",\n \"chainname\": \"plasma-mainnet\",\n \"chainid\": \"9745\",\n \"description\": \"Plasma is a high-performance layer 1 blockchain purpose-built for stablecoins. It powers near instant, fee-free payments with institutional-grade security.\",\n \"weight\": null,\n \"url\": \"https://www.plasma.to/\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1761690226-plasma-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1761690226-plasma-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1761690226-plasma-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://plasmascan.to/\",\n \"blockexplorerlabel\": \"Plasma Explorer\",\n \"blocktime\": 1,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"XPL\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#020202\",\n \"cssRgb\": \"rgb(2 2 2)\"\n }\n },\n {\n \"id\": \"PMh8uFQ4TdK2-TGCKjTZgA\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-09-08T18:53:26+01:00\",\n \"displayname\": \"Sonic\",\n \"chainname\": \"sonic-mainnet\",\n \"chainid\": \"146\",\n \"description\": \"Sonic is the highest-performing EVM L1, combining speed, incentives, and world-class infrastructure for DeFi.\",\n \"weight\": null,\n \"url\": \"https://www.soniclabs.com/\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1754945861-sonic-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1754945861-sonic-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1754945861-sonic-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://sonicscan.org/\",\n \"blockexplorerlabel\": \"Sonic Explorer\",\n \"blocktime\": 1,\n \"foundationalapi\": true,\n \"streamingapi\": true,\n \"nativegastoken\": \"S\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#F5F5F5\",\n \"cssRgb\": \"rgb(245 245 245)\"\n }\n },\n {\n \"id\": \"IgY3XJ8fTZeVea6Xb8z_yA\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-07-28T20:30:30+01:00\",\n \"displayname\": \"Berachain\",\n \"chainname\": \"berachain-mainnet\",\n \"chainid\": \"80094\",\n \"description\": \"Berachain is a high-performance EVM-compatible blockchain built on Proof-of-Liquidity consensus.\",\n \"weight\": null,\n \"url\": \"https://www.berachain.com/\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1721060184-berachain-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1721060175-berachain-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1721060186-berachain-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://berascan.com/\",\n \"blockexplorerlabel\": \"Berachain Explorer\",\n \"blocktime\": 2,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"BERA\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#020202\",\n \"cssRgb\": \"rgb(2 2 2)\"\n }\n },\n {\n \"id\": \"cHBtCq1gRMK9dQD7GVmC-w\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-06-23T15:08:01+01:00\",\n \"displayname\": \"Viction\",\n \"chainname\": \"viction-mainnet\",\n \"chainid\": \"88\",\n \"description\": \"Viction, previously known as TomoChain, is a scalable, highly decentralized blockchain network that takes a community-driven approach to development and adoption.\",\n \"weight\": null,\n \"url\": \"https://viction.xyz/\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1698867827-viction-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1698867819-viction-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1698867829-viction-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://www.vicscan.xyz/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 2,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"TOMO\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#000000\",\n \"cssRgb\": \"rgb(0 0 0)\"\n }\n },\n {\n \"id\": \"HZGDDtelTYKvIJKuSxySdA\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-06-23T15:05:47+01:00\",\n \"displayname\": \"Taiko\",\n \"chainname\": \"taiko-mainnet\",\n \"chainid\": \"167000\",\n \"description\": \"Taiko is a Type 1 (Ethereum-equivalent) zkEVM that is open source and decentralized.\",\n \"weight\": null,\n \"url\": \"https://taiko.xyz/\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1695749616-taiko-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1695749551-taiko-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1695749621-taiko-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://taikoscan.network/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 22,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"ETH\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#E81899\",\n \"cssRgb\": \"rgb(232 24 153)\"\n }\n },\n {\n \"id\": \"62157781\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-06-23T15:05:15+01:00\",\n \"displayname\": \"Avalanche C-Chain\",\n \"chainname\": \"avalanche-mainnet\",\n \"chainid\": \"43114\",\n \"description\": \"Avalanche is an open-source platform for launching decentralized applications and enterprise blockchain deployments in one interoperable, highly scalable ecosystem. Avalanche is the first smart contracts platform that processes 4,500+ transactions/second and instantly confirms transactions. Ethereum developers can quickly build on Avalanche as Solidity works out-of-the-box. A key difference between Avalanche and other decentralized networks is the consensus protocol. Over time, people have come to a false understanding that blockchains have to be slow and not scalable. The Avalanche protocol employs a novel approach to consensus to achieve its strong safety guarantees, quick finality, and high-throughput, without compromising decentralization.\",\n \"weight\": 5,\n \"url\": \"https://www.avax.network/\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1686152918-avalanche-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1686152997-avalanche-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1686152986-avalanche-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://avascan.info/blockchain/c/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 3,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"AVAX\",\n \"suspended\": null,\n \"notes\": null,\n \"noteType\": \"\",\n \"docsException\": null,\n \"historicalBalances\": null,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#E84142\",\n \"cssRgb\": \"rgb(232 65 66)\"\n }\n },\n {\n \"id\": \"176496897\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-06-23T15:04:10+01:00\",\n \"displayname\": \"Mantle\",\n \"chainname\": \"mantle-mainnet\",\n \"chainid\": \"5000\",\n \"description\": \"Mantle is a high-performance Ethereum layer-2 network built with modular architecture delivering low fees and high security.\",\n \"weight\": null,\n \"url\": \"https://www.mantle.xyz/\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1677538585-property-1-mantle-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1677538588-mantle-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1677538591-property-1-mantle-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://explorer.mantle.xyz/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 15,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"MNT\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": null,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#259835\",\n \"cssRgb\": \"rgb(37 152 53)\"\n }\n },\n {\n \"id\": \"177243899\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-06-23T15:03:48+01:00\",\n \"displayname\": \"Linea\",\n \"chainname\": \"linea-mainnet\",\n \"chainid\": \"59144\",\n \"description\": \"Linea is a type 2 zero knowledge Ethereum Virtual Machine that replicates an Ethereum environment by using rollups.\",\n \"weight\": null,\n \"url\": \"https://linea.build/\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1679953835-property-1-linea-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1679953850-property-1-linea-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1679953847-property-1-linea-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://lineascan.build/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 10,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"ETH\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": null,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#000000\",\n \"cssRgb\": \"rgb(0 0 0)\"\n }\n },\n {\n \"id\": \"117808941\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-06-23T15:03:27+01:00\",\n \"displayname\": \"Arbitrum Nova\",\n \"chainname\": \"arbitrum-nova-mainnet\",\n \"chainid\": \"42170\",\n \"description\": \"Arbitrum Nova is a blockchain that features ultra-low transaction costs with high security.\",\n \"weight\": null,\n \"url\": \"https://nova.arbitrum.io/\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1675883705-property-1-nova-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1675883708-property-1-nova-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1675883711-property-1-nova-white.png\"\n },\n \"appchainof\": {\n \"chainname\": \"arbitrum-mainnet\",\n \"displayname\": \"Arbitrum\"\n },\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://nova.arbiscan.io/\",\n \"blockexplorerlabel\": \"Nova Arbiscan\",\n \"blocktime\": 5,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"ETH\",\n \"suspended\": false,\n \"notes\": null,\n \"noteType\": \"\",\n \"docsException\": null,\n \"historicalBalances\": null,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#F58027\",\n \"cssRgb\": \"rgb(245 128 39)\"\n }\n },\n {\n \"id\": \"133245649\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-06-23T15:01:41+01:00\",\n \"displayname\": \"Oasis Sapphire\",\n \"chainname\": \"oasis-sapphire-mainnet\",\n \"chainid\": \"23294\",\n \"description\": \"The Sapphire ParaTime is the official confidential EVM Compatible ParaTime providing a smart contract development environment with EVM compatibility. Oasis Sapphire allows for a confidential state, end-to-end encryption, and confidential randomness\",\n \"weight\": null,\n \"url\": \"https://docs.oasis.io/dapp/sapphire/\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669933877-oasis.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669933835-oasis.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669933853-oasis-1.png\"\n },\n \"appchainof\": {\n \"chainname\": \"emerald-paratime-mainnet\",\n \"displayname\": \"Oasis\"\n },\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://explorer.sapphire.oasis.io/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 24,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"ROSE\",\n \"suspended\": false,\n \"notes\": null,\n \"noteType\": \"\",\n \"docsException\": null,\n \"historicalBalances\": null,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#108ED0\",\n \"cssRgb\": \"rgb(16 142 208)\"\n }\n },\n {\n \"id\": \"183141762\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-06-23T15:01:03+01:00\",\n \"displayname\": \"zkSync Era\",\n \"chainname\": \"zksync-mainnet\",\n \"chainid\": \"324\",\n \"description\": \"zkSync Era is a Layer-2 protocol that scales Ethereum with cutting-edge ZK tech.\",\n \"weight\": null,\n \"url\": \"https://zksync.io/\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1691631490-zksync-era-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1691631514-zksync-era-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1691631503-zksync-era-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://explorer.zksync.io/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 10,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"ETH\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": null,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#000000\",\n \"cssRgb\": \"rgb(0 0 0)\"\n }\n },\n {\n \"id\": \"Uec-evh0S_aQAvtYPQmRIQ\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-06-23T14:51:06+01:00\",\n \"displayname\": \"World Chain\",\n \"chainname\": \"world-mainnet\",\n \"chainid\": \"480\",\n \"description\": \"World Chain is a blockchain designed for humans, offering features like free gas fees, native mobile distribution through mini-apps, simplified crypto transactions and Sybil resistance via World ID.\",\n \"weight\": null,\n \"url\": \"https://world.org/world-chain\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1731090239-world-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1731090239-world-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1731090239-world-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://worldscan.org/\",\n \"blockexplorerlabel\": \"World Chain Mainnet Explorer\",\n \"blocktime\": 2,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"ETH\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": null,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#000000\",\n \"cssRgb\": \"rgb(0 0 0)\"\n }\n },\n {\n \"id\": \"63204133\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-06-23T14:50:23+01:00\",\n \"displayname\": \"Axie/Ronin\",\n \"chainname\": \"axie-mainnet\",\n \"chainid\": \"2020\",\n \"description\": \"Discover Ronin, the Ethereum-linked side-chain for Axie Infinity. Earn tokens with skilled gameplay and community contributions. Get started today!\",\n \"weight\": null,\n \"url\": \"https://www.skymavis.com/products\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669931671-axie.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669931693-ronin.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669931714-ronin-1.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://explorer.roninchain.com/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 3,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"RON\",\n \"suspended\": null,\n \"notes\": null,\n \"noteType\": \"\",\n \"docsException\": null,\n \"historicalBalances\": null,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#388BE8\",\n \"cssRgb\": \"rgb(56 139 232)\"\n }\n },\n {\n \"id\": \"DwbM3jyURPWNhd7WqJGQrA\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-06-23T14:48:51+01:00\",\n \"displayname\": \"ApeChain\",\n \"chainname\": \"apechain-mainnet\",\n \"chainid\": \"33139\",\n \"description\": \"Discover ApeChain, an Arbitrum Orbit L3 by ApeCoin, Horizen Labs & Caldera. Explore chain details, API access, and robust support to kickstart your project now.\",\n \"weight\": null,\n \"url\": \"https://apechain.com/\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1721237126-apechain-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1721237118-apechain-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1721237129-apechain-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://apechain.calderaexplorer.xyz/\",\n \"blockexplorerlabel\": \"ApeChain Explorer\",\n \"blocktime\": 1,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"APE\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#0154FA\",\n \"cssRgb\": \"rgb(1 84 250)\"\n }\n },\n {\n \"id\": \"200072739\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-06-23T14:48:07+01:00\",\n \"displayname\": \"Scroll\",\n \"chainname\": \"scroll-mainnet\",\n \"chainid\": \"534352\",\n \"description\": \"Discover Scroll, an L2 solution extending Ethereum with zero knowledge tech and EVM equivalence. Sign up for a free Covalent API key and start building today!\",\n \"weight\": null,\n \"url\": \"https://scroll.io/\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1697057853-scroll-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1697057840-scroll-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1697057846-scroll-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://blockscout.scroll.io/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 3,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"ETH\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#EBC2AE\",\n \"cssRgb\": \"rgb(235 194 174)\"\n }\n },\n {\n \"id\": \"HjRzzQHlT8i-t9GDepzH8A\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-06-23T14:47:14+01:00\",\n \"displayname\": \"Unichain\",\n \"chainname\": \"unichain-mainnet\",\n \"chainid\": \"130\",\n \"description\": \"Unichain is a DeFi-native Ethereum L2, built to be the home for liquidity across chains.\",\n \"weight\": null,\n \"url\": \"https://www.unichain.org/\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1729276538-unichain-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1729276359-unichain-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1729276359-unichain-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://unichain.blockscout.com/\",\n \"blockexplorerlabel\": \"Unichain Explorer\",\n \"blocktime\": 1,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"ETH\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#020202\",\n \"cssRgb\": \"rgb(2 2 2)\"\n }\n },\n {\n \"id\": \"ZebEx1YLRUeeqAChTiXHwQ\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-06-23T14:46:53+01:00\",\n \"displayname\": \"Ink\",\n \"chainname\": \"ink-mainnet\",\n \"chainid\": \"57073\",\n \"description\": \"Ink is a cutting-edge L2 blockchain built on Optimism’s Superchain and released by Kraken.\",\n \"weight\": null,\n \"url\": \"https://inkonchain.com/\",\n \"support\": \"frontier\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1732899594-ink-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1732899594-ink-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1732899594-ink-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://explorer-sepolia.inkonchain.com/\",\n \"blockexplorerlabel\": \"Ink Explorer\",\n \"blocktime\": 1,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"ETH\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#020202\",\n \"cssRgb\": \"rgb(2 2 2)\"\n }\n },\n {\n \"id\": \"65823531\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-06-21T06:21:52+01:00\",\n \"displayname\": \"Optimism\",\n \"chainname\": \"optimism-mainnet\",\n \"chainid\": \"10\",\n \"description\": \"Optimism is a low-cost and lightning-fast Ethereum L2 blockchain. \",\n \"weight\": 5,\n \"url\": \"https://www.optimism.io/\",\n \"support\": \"foundational\",\n \"testnet\": false,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1670347457-optimism-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1670347461-optimisim-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1670347467-optimisim-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://optimistic.etherscan.io/\",\n \"blockexplorerlabel\": \"Optimistic Etherscan\",\n \"blocktime\": 2,\n \"foundationalapi\": true,\n \"streamingapi\": false,\n \"nativegastoken\": \"ETH\",\n \"suspended\": null,\n \"notes\": null,\n \"noteType\": \"\",\n \"docsException\": null,\n \"historicalBalances\": null,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#FF0421\",\n \"cssRgb\": \"rgb(255 4 33)\"\n }\n },\n {\n \"id\": \"K9NwwFuARlCdxSGT6vq4lw\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-02-19T17:33:32+00:00\",\n \"displayname\": \"Unichain Testnet\",\n \"chainname\": \"unichain-sepolia-testnet\",\n \"chainid\": \"1301\",\n \"description\": \"Unichain is a DeFi-native Ethereum L2, built to be the home for liquidity across chains.\",\n \"weight\": null,\n \"url\": \"https://www.unichain.org/\",\n \"support\": \"frontier\",\n \"testnet\": true,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1729276538-unichain-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1729276359-unichain-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1729276359-unichain-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": {\n \"chainname\": \"unichain-mainnet\",\n \"displayname\": \"Unichain\"\n },\n \"blockexplorer\": \"https://sepolia.uniscan.xyz/\",\n \"blockexplorerlabel\": \"Unichain Sepolia Testnet Explorer\",\n \"blocktime\": 1,\n \"foundationalapi\": false,\n \"streamingapi\": false,\n \"nativegastoken\": \"ETH\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#020202\",\n \"cssRgb\": \"rgb(2 2 2)\"\n }\n },\n {\n \"id\": \"aE75ytCAR2-zg97RrZncKg\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-02-14T17:49:03+00:00\",\n \"displayname\": \"Linea Sepolia Testnet\",\n \"chainname\": \"linea-sepolia-testnet\",\n \"chainid\": \"59141\",\n \"description\": \"Build innovative Linea Sepolia Testnet apps with our zero-knowledge Ethereum Virtual Machine using rollups. Get started with a free Covalent API key today!\",\n \"weight\": null,\n \"url\": \"https://linea.build/\",\n \"support\": \"frontier\",\n \"testnet\": true,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1679953835-property-1-linea-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1679953850-property-1-linea-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1679953847-property-1-linea-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": {\n \"chainname\": \"linea-mainnet\",\n \"displayname\": \"Linea\"\n },\n \"blockexplorer\": \"https://sepolia.lineascan.build/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 2,\n \"foundationalapi\": false,\n \"streamingapi\": false,\n \"nativegastoken\": \"ETH\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#62DFFF\",\n \"cssRgb\": \"rgb(98 223 255)\"\n }\n },\n {\n \"id\": \"c0O0lTqhS8iV6oK-AZMm6A\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-02-14T17:39:42+00:00\",\n \"displayname\": \"Polygon Amoy Testnet\",\n \"chainname\": \"polygon-amoy-testnet\",\n \"chainid\": \"80002\",\n \"description\": \"Develop apps on Polygon Amoy Testnet – an Ethereum Layer 2 with lightning-fast ZK-Rollups. Get your free API key and start building today!\",\n \"weight\": null,\n \"url\": \"https://polygon.technology/blog/introducing-the-amoy-testnet-for-polygon-pos\",\n \"support\": \"foundational\",\n \"testnet\": true,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1677870347-property-1-polygon-zkevm-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1677870452-property-1-polygon-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1677870457-property-1-polygon-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": {\n \"chainname\": \"matic-mainnet\",\n \"displayname\": \"Polygon\"\n },\n \"blockexplorer\": \"https://amoy.polygonscan.com/\",\n \"blockexplorerlabel\": \"Amoy PolygonScan\",\n \"blocktime\": 1,\n \"foundationalapi\": false,\n \"streamingapi\": false,\n \"nativegastoken\": \"gwei\",\n \"suspended\": false,\n \"notes\": null,\n \"noteType\": \"\",\n \"docsException\": null,\n \"historicalBalances\": null,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#823CFF\",\n \"cssRgb\": \"rgb(130 60 255)\"\n }\n },\n {\n \"id\": \"ZrDBq1MjTQqdqNmKQTW8Sw\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-02-10T22:30:17+00:00\",\n \"displayname\": \"Berachain Testnet\",\n \"chainname\": \"berachain-testnet\",\n \"chainid\": \"80084\",\n \"description\": \"Berachain is a high-performance EVM-compatible blockchain built on Proof-of-Liquidity consensus.\",\n \"weight\": null,\n \"url\": \"https://www.berachain.com/\",\n \"support\": \"frontier\",\n \"testnet\": true,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1721060184-berachain-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1721060175-berachain-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1721060186-berachain-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": {\n \"chainname\": \"berachain-mainnet\",\n \"displayname\": \"Berachain\"\n },\n \"blockexplorer\": \"https://bartio.beratrail.io/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 2,\n \"foundationalapi\": false,\n \"streamingapi\": false,\n \"nativegastoken\": \"BERA\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": true,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#020202\",\n \"cssRgb\": \"rgb(2 2 2)\"\n }\n },\n {\n \"id\": \"192949741\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-02-07T22:22:54+00:00\",\n \"displayname\": \"Manta Pacific Testnet\",\n \"chainname\": \"manta-sepolia-testnet\",\n \"chainid\": \"3441006\",\n \"description\": \"Manta Pacific is an EVM-native modular execution layer for zk applications, making zk accessible to everyone.\",\n \"weight\": null,\n \"url\": \"https://pacific-explorer.testnet.manta.network/\",\n \"support\": \"community\",\n \"testnet\": true,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1694716333-manta-pacific-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1694716347-manta-pacific-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1694716335-manta-pacific-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": null,\n \"blockexplorer\": \"https://pacific-explorer.manta.network/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 10,\n \"foundationalapi\": false,\n \"streamingapi\": false,\n \"nativegastoken\": \"ETH\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": true,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#DE6FC3\",\n \"cssRgb\": \"rgb(222 111 195)\"\n }\n },\n {\n \"id\": \"bLxdFoaCRm2qetFesvLCdg\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-01-22T22:28:28+00:00\",\n \"displayname\": \"World Chain Testnet \",\n \"chainname\": \"world-sepolia-testnet\",\n \"chainid\": \"4801\",\n \"description\": \"World Chain is a blockchain designed for humans, offering features like free gas fees, native mobile distribution through mini-apps, simplified crypto transactions and Sybil resistance via World ID.\",\n \"weight\": null,\n \"url\": \"https://world.org/world-chain\",\n \"support\": \"frontier\",\n \"testnet\": true,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1731090239-world-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1731090239-world-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1731090239-world-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": {\n \"chainname\": \"world-mainnet\",\n \"displayname\": \"World Chain\"\n },\n \"blockexplorer\": \"https://worldchain-sepolia.explorer.alchemy.com/\",\n \"blockexplorerlabel\": \"World Chain Sepolia Explorer\",\n \"blocktime\": 2,\n \"foundationalapi\": false,\n \"streamingapi\": false,\n \"nativegastoken\": \"ETH\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#020202\",\n \"cssRgb\": \"rgb(2 2 2)\"\n }\n },\n {\n \"id\": \"Wgf3ZnRaT560oPLiXgOSbA\",\n \"_status\": \"published\",\n \"updatedAt\": \"2025-01-22T22:27:09+00:00\",\n \"displayname\": \"Ink Testnet\",\n \"chainname\": \"ink-sepolia-testnet\",\n \"chainid\": \"763373\",\n \"description\": \"Ink is a cutting-edge L2 blockchain built on Optimism’s Superchain and released by Kraken.\",\n \"weight\": null,\n \"url\": \"https://inkonchain.com/\",\n \"support\": \"frontier\",\n \"testnet\": true,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1732899594-ink-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1732899594-ink-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1732899594-ink-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": {\n \"chainname\": \"ink-mainnet\",\n \"displayname\": \"Ink\"\n },\n \"blockexplorer\": \"https://explorer-sepolia.inkonchain.com/\",\n \"blockexplorerlabel\": \"Ink Sepolia Explorer\",\n \"blocktime\": 1,\n \"foundationalapi\": false,\n \"streamingapi\": false,\n \"nativegastoken\": \"ETH\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#020202\",\n \"cssRgb\": \"rgb(2 2 2)\"\n }\n },\n {\n \"id\": \"154314660\",\n \"_status\": \"published\",\n \"updatedAt\": \"2024-11-21T22:01:11+00:00\",\n \"displayname\": \"Ethereum Sepolia Testnet\",\n \"chainname\": \"eth-sepolia\",\n \"chainid\": \"11155111\",\n \"description\": \"Sepolia is Ethereum's recommended default testnet for application development.\",\n \"weight\": null,\n \"url\": \"https://ethereum.org/en/developers/docs/networks/#ethereum-testnets\",\n \"support\": \"foundational\",\n \"testnet\": true,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669653891-eth.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669619533-ethereum.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669619544-ethereum.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": {\n \"chainname\": \"eth-mainnet\",\n \"displayname\": \"Ethereum\"\n },\n \"blockexplorer\": \"https://sepolia.etherscan.io/\",\n \"blockexplorerlabel\": \"Sepolia Etherscan\",\n \"blocktime\": 8,\n \"foundationalapi\": false,\n \"streamingapi\": false,\n \"nativegastoken\": \"ETH\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": null,\n \"historicalBalances\": null,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#000000\",\n \"cssRgb\": \"rgb(0 0 0)\"\n }\n },\n {\n \"id\": \"63790000\",\n \"_status\": \"published\",\n \"updatedAt\": \"2024-10-19T05:24:49+01:00\",\n \"displayname\": \"Avalanche Fuji Testnet\",\n \"chainname\": \"avalanche-testnet\",\n \"chainid\": \"43113\",\n \"description\": \"-\",\n \"weight\": null,\n \"url\": \"\",\n \"support\": \"frontier\",\n \"testnet\": true,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1686152918-avalanche-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1686152997-avalanche-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1686152986-avalanche-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": {\n \"chainname\": \"avalanche-mainnet\",\n \"displayname\": \"Avalanche C-Chain\"\n },\n \"blockexplorer\": \"https://testnet.avascan.info/\",\n \"blockexplorerlabel\": \"\",\n \"blocktime\": 3,\n \"foundationalapi\": false,\n \"streamingapi\": false,\n \"nativegastoken\": \"AVAX\",\n \"suspended\": null,\n \"notes\": null,\n \"noteType\": \"\",\n \"docsException\": null,\n \"historicalBalances\": null,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#E84142\",\n \"cssRgb\": \"rgb(232 65 66)\"\n }\n },\n {\n \"id\": \"TAMs8c8STCe0eYbHFlIt5Q\",\n \"_status\": \"published\",\n \"updatedAt\": \"2024-10-19T05:15:17+01:00\",\n \"displayname\": \"Holesky Testnet\",\n \"chainname\": \"eth-holesky\",\n \"chainid\": \"17000\",\n \"description\": \"Holesky is the first long-standing, merged-from-genesis, public Ethereum testnet.\",\n \"weight\": null,\n \"url\": \"https://github.com/eth-clients/holesky\",\n \"support\": \"frontier\",\n \"testnet\": true,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669653891-eth.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669619533-ethereum.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1669619544-ethereum.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": {\n \"chainname\": \"eth-mainnet\",\n \"displayname\": \"Ethereum\"\n },\n \"blockexplorer\": \"https://holesky.etherscan.io/\",\n \"blockexplorerlabel\": \"Holesky Etherscan\",\n \"blocktime\": 12,\n \"foundationalapi\": false,\n \"streamingapi\": false,\n \"nativegastoken\": \"ETH\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#000000\",\n \"cssRgb\": \"rgb(0 0 0)\"\n }\n },\n {\n \"id\": \"195943613\",\n \"_status\": \"published\",\n \"updatedAt\": \"2024-10-16T00:43:14+01:00\",\n \"displayname\": \"Optimism Sepolia Testnet\",\n \"chainname\": \"optimism-sepolia\",\n \"chainid\": \"11155420\",\n \"description\": \"Optimism Sepolia Testnet (OP Sepolia) is the latest test network.\",\n \"weight\": null,\n \"url\": \"https://community.optimism.io/docs/useful-tools/networks/#parameters-for-node-operators-2\",\n \"support\": \"foundational\",\n \"testnet\": true,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1670347457-optimism-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1670347461-optimisim-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1670347467-optimisim-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": {\n \"chainname\": \"optimism-mainnet\",\n \"displayname\": \"Optimism\"\n },\n \"blockexplorer\": \"https://optimism-sepolia.blockscout.com/\",\n \"blockexplorerlabel\": \"OP Sepolia Explorer\",\n \"blocktime\": 2,\n \"foundationalapi\": false,\n \"streamingapi\": false,\n \"nativegastoken\": \"ETH\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#FF0420\",\n \"cssRgb\": \"rgb(255 4 32)\"\n }\n },\n {\n \"id\": \"194520650\",\n \"_status\": \"published\",\n \"updatedAt\": \"2024-10-16T00:42:28+01:00\",\n \"displayname\": \"Chiado Testnet\",\n \"chainname\": \"gnosis-testnet\",\n \"chainid\": \"10200\",\n \"description\": \"Chiado is a Gnosis testnet. Fun fact: it is named after the Chiado metro station in Lisbon, Portugal.\",\n \"weight\": null,\n \"url\": \"https://docs.gnosischain.com/about/networks/chiado\",\n \"support\": \"foundational\",\n \"testnet\": true,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1695328167-gnosis-chain-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1695328162-gnosis-chain-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1695328138-gnosis-chain-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": {\n \"chainname\": \"gnosis-mainnet\",\n \"displayname\": \"Gnosis\"\n },\n \"blockexplorer\": \"https://gnosis-chiado.blockscout.com/\",\n \"blockexplorerlabel\": \"Gnosis Chiado Blockscout\",\n \"blocktime\": 5,\n \"foundationalapi\": false,\n \"streamingapi\": false,\n \"nativegastoken\": \"xDAI\",\n \"suspended\": false,\n \"notes\": {\n \"blocks\": [],\n \"links\": [],\n \"value\": {\n \"schema\": \"dast\",\n \"document\": {\n \"type\": \"root\",\n \"children\": [\n {\n \"type\": \"paragraph\",\n \"children\": [\n {\n \"type\": \"span\",\n \"value\": \"\"\n }\n ]\n }\n ]\n }\n }\n },\n \"noteType\": \"\",\n \"docsException\": false,\n \"historicalBalances\": false,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#3E6857\",\n \"cssRgb\": \"rgb(62 104 87)\"\n }\n },\n {\n \"id\": \"63790006\",\n \"_status\": \"published\",\n \"updatedAt\": \"2024-10-16T00:41:14+01:00\",\n \"displayname\": \"BNB Smart Chain (BSC) Testnet\",\n \"chainname\": \"bsc-testnet\",\n \"chainid\": \"97\",\n \"description\": \"-\",\n \"weight\": null,\n \"url\": \"\",\n \"support\": \"foundational\",\n \"testnet\": true,\n \"imgsvg\": {\n \"url\": \"https://www.datocms-assets.com/86369/1670003808-binance-smart-chain-icon-white.svg\"\n },\n \"imgwhite\": {\n \"url\": \"https://www.datocms-assets.com/86369/1670003837-biance-smart-chain-colour.png\"\n },\n \"imgblack\": {\n \"url\": \"https://www.datocms-assets.com/86369/1670003836-biance-smart-chain-white.png\"\n },\n \"appchainof\": null,\n \"activecustomer\": false,\n \"testnetchainof\": {\n \"chainname\": \"bsc-mainnet\",\n \"displayname\": \"BNB Smart Chain (BSC)\"\n },\n \"blockexplorer\": \"https://testnet.bscscan.com/\",\n \"blockexplorerlabel\": \"Bsc Testnet Scan\",\n \"blocktime\": 5,\n \"foundationalapi\": false,\n \"streamingapi\": false,\n \"nativegastoken\": \"gwei\",\n \"suspended\": null,\n \"notes\": null,\n \"noteType\": \"\",\n \"docsException\": null,\n \"historicalBalances\": null,\n \"popular\": null,\n \"chainthemecolor\": {\n \"hex\": \"#F1B90A\",\n \"cssRgb\": \"rgb(241 185 10)\"\n }\n }\n ]\n }\n}","[\n {\n \"chain_name\": \"HYPEREVM_MAINNET\",\n \"protocols\": [\n \"PROJECT_X\"\n ]\n },\n {\n \"chain_name\": \"SONIC_MAINNET\",\n \"protocols\": [\n \"SHADOW_V2\",\n \"SHADOW_V3\"\n ]\n },\n {\n \"chain_name\": \"BSC_MAINNET\",\n \"protocols\": [\n \"PANCAKESWAP_V2\",\n \"PANCAKESWAP_V3\"\n ]\n },\n {\n \"chain_name\": \"ETH_MAINNET\",\n \"protocols\": [\n \"UNISWAP_V2\",\n \"UNISWAP_V3\"\n ]\n },\n {\n \"chain_name\": \"MEGAETH_MAINNET\",\n \"protocols\": [\n \"UNISWAP_V2\",\n \"UNISWAP_V3\",\n \"JOE_V2\",\n \"KUMBAYA_V1\",\n \"PRISM_V1\"\n ]\n },\n {\n \"chain_name\": \"SOLANA_MAINNET\",\n \"protocols\": [\n \"RAYDIUM_AMM\",\n \"RAYDIUM_CPMM\",\n \"RAYDIUM_CLMM\",\n \"PUMP_FUN\",\n \"PUMP_FUN_AMM\",\n \"MOONSHOT\",\n \"RAYDIUM_LAUNCH_LAB\",\n \"METEORA_DAMM\",\n \"METEORA_DLMM\",\n \"METEORA_DBC\",\n \"ORCA_WHIRLPOOL\"\n ]\n },\n {\n \"chain_name\": \"MONAD_MAINNET\",\n \"protocols\": [\n \"NAD_FUN\",\n \"UNISWAP_V2\",\n \"UNISWAP_V3\"\n ]\n },\n {\n \"chain_name\": \"BASE_MAINNET\",\n \"protocols\": [\n \"UNISWAP_V2\",\n \"UNISWAP_V3\",\n \"PANCAKESWAP_V2\",\n \"PANCAKESWAP_V3\",\n \"VIRTUALS_V2\",\n \"CLANKER_V3\"\n ]\n },\n {\n \"chain_name\": \"POLYGON_MAINNET\",\n \"protocols\": [\n \"QUICKSWAP_V2\",\n \"QUICKSWAP_V3\",\n \"SUSHISWAP_V2\"\n ]\n }\n]","import datoChains from \"../../../../data/dato-chains.json\" with { type: \"json\" };\nimport streamingChainsDexes from \"../../../../data/streaming-chains-dexes.json\" with { type: \"json\" };\n\nexport interface ChainInfo {\n name: string;\n displayName: string;\n foundational: boolean;\n streaming: boolean;\n}\n\ninterface StreamingChainDex {\n chain_name: string;\n protocols: string[];\n}\n\n/** Reverse map: streaming chain name (e.g. \"POLYGON_MAINNET\") -> dato chain name (e.g. \"matic-mainnet\") */\nconst STREAMING_TO_DATO: Record<string, string> = {\n POLYGON_MAINNET: \"matic-mainnet\",\n};\n\nfunction streamingToDatoName(streamingName: string): string {\n return (\n STREAMING_TO_DATO[streamingName] ??\n streamingName.toLowerCase().replace(/_/g, \"-\")\n );\n}\n\n/**\n * Maps dato chain names to the protocols supported on each chain.\n * Protocols are stored as lowercase-hyphenated (e.g. \"uniswap-v2\").\n * Built from data/streaming-chains-dexes.json.\n */\nexport const CHAIN_PROTOCOLS: Record<string, string[]> = Object.fromEntries(\n (streamingChainsDexes as StreamingChainDex[]).map((entry) => [\n streamingToDatoName(entry.chain_name),\n entry.protocols.map((p) => p.toLowerCase().replace(/_/g, \"-\")),\n ])\n);\n\ninterface DatoBlockchain {\n chainname: string;\n displayname: string;\n foundationalapi: boolean;\n streamingapi: boolean;\n testnet: boolean;\n suspended: boolean;\n _status: string;\n}\n\nexport const CHAINS: ChainInfo[] = (\n datoChains.data.allBlockchains as DatoBlockchain[]\n)\n .filter((c) => c._status === \"published\" && !c.testnet && !c.suspended)\n .map((c) => ({\n name: c.chainname,\n displayName: c.displayname,\n foundational: c.foundationalapi,\n streaming: c.streamingapi,\n }));\n\nexport const SUPPORTED_CHAINS = CHAINS.map((c) => c.name);\n\nexport const STREAMING_CHAINS = CHAINS.filter((c) => c.streaming).map(\n (c) => c.name\n);\n\nexport type SupportedChain = string;\n\nexport function getChainDisplayName(chainName: string): string {\n return CHAINS.find((c) => c.name === chainName)?.displayName ?? chainName;\n}\n\nexport function isValidChain(chainName: string): boolean {\n return SUPPORTED_CHAINS.includes(chainName);\n}\n\nexport function isStreamingChain(chainName: string): boolean {\n return STREAMING_CHAINS.includes(chainName);\n}\n\n// Maps from dato chain name (e.g. \"matic-mainnet\") to streaming API enum (e.g. \"POLYGON_MAINNET\")\nconst STREAMING_NAME_OVERRIDES: Record<string, string> = {\n \"matic-mainnet\": \"POLYGON_MAINNET\",\n};\n\nexport function toStreamingChainName(chainName: string): string | null {\n if (!isStreamingChain(chainName)) return null;\n return (\n STREAMING_NAME_OVERRIDES[chainName] ??\n chainName.toUpperCase().replace(/-/g, \"_\")\n );\n}\n\nexport function getProtocolsForChain(chainName: string): string[] {\n return CHAIN_PROTOCOLS[chainName] ?? [];\n}\n\nexport function isValidProtocol(chainName: string, protocol: string): boolean {\n const protocols = getProtocolsForChain(chainName);\n const normalized = protocol.toLowerCase().replace(/_/g, \"-\");\n return protocols.includes(normalized);\n}\n\n/** Normalize user input to lowercase-hyphenated (e.g. \"UNISWAP_V2\" -> \"uniswap-v2\") */\nexport function normalizeProtocol(input: string): string {\n return input.toLowerCase().replace(/_/g, \"-\");\n}\n\n/** Convert lowercase-hyphenated protocol to SDK enum value (e.g. \"uniswap-v2\" -> \"UNISWAP_V2\") */\nexport function protocolToSdkValue(protocol: string): string {\n return protocol.toUpperCase().replace(/-/g, \"_\");\n}\n\nexport function suggestChain(input: string): string | null {\n const lower = input.toLowerCase();\n // Try exact match first\n const exact = CHAINS.find((c) => c.name === lower);\n if (exact) return exact.name;\n // Try partial match on display name or chain name\n const partial = CHAINS.find(\n (c) =>\n c.name.includes(lower) ||\n c.displayName.toLowerCase().includes(lower)\n );\n return partial?.name ?? null;\n}\n","import { renderTable } from \"../ui/tables.js\";\nimport { colors } from \"../ui/theme.js\";\nimport { CHAINS } from \"../utils/chains.js\";\nimport chalk from \"chalk\";\nimport { Command } from \"commander\";\n\nexport const chainsCommand = new Command(\"chains\")\n .description(\"List available blockchain networks\")\n .action(() => {\n console.log(colors.dim(\"\\n Available chains:\\n\"));\n\n const headers = [\"Name\", \"Chain ID\", \"Foundational\", \"Streaming\"];\n const rows = CHAINS.map((chain) => [\n colors.accent(chain.displayName),\n chain.name,\n chain.foundational\n ? chalk.hex(\"#50FA7B\")(\"✓\")\n : chalk.hex(\"#868E96\")(\"—\"),\n chain.streaming\n ? chalk.hex(\"#50FA7B\")(\"✓\")\n : chalk.hex(\"#868E96\")(\"—\"),\n ]);\n\n renderTable(headers, rows);\n });\n","import {\n getPort,\n setPort,\n getDefaultChain,\n setDefaultChain,\n getQuoteCurrency,\n setQuoteCurrency,\n getAllConfig,\n} from \"../config.js\";\nimport { successBox, infoBox } from \"../ui/boxes.js\";\nimport { colors } from \"../ui/theme.js\";\nimport { SUPPORTED_CHAINS } from \"../utils/chains.js\";\nimport { select, input } from \"@inquirer/prompts\";\nimport { Command } from \"commander\";\n\nexport const configCommand = new Command(\"config\")\n .description(\"View or update GoldRush CLI settings\")\n .action(async () => {\n const config = getAllConfig();\n\n console.log(\n infoBox(\n \"Current Settings\",\n `Port: ${colors.gold(String(config.port))}\\n` +\n `Default Chain: ${colors.accent(config.defaultChain)}\\n` +\n `Quote Currency: ${colors.gold(config.quoteCurrency)}`\n )\n );\n\n const action = await select({\n message: \"What would you like to update?\",\n choices: [\n { name: `Port (${config.port})`, value: \"port\" },\n {\n name: `Default Chain (${config.defaultChain})`,\n value: \"chain\",\n },\n {\n name: `Quote Currency (${config.quoteCurrency})`,\n value: \"currency\",\n },\n { name: \"Done\", value: \"done\" },\n ],\n });\n\n switch (action) {\n case \"port\": {\n const port = await input({\n message: \"Enter proxy server port:\",\n default: String(getPort()),\n validate: (v) => {\n const n = parseInt(v, 10);\n return n > 0 && n < 65536\n ? true\n : \"Port must be between 1 and 65535\";\n },\n });\n setPort(parseInt(port, 10));\n console.log(\n successBox(\"Updated\", `Port set to ${colors.gold(port)}`)\n );\n break;\n }\n\n case \"chain\": {\n const chain = await select({\n message: \"Select default chain:\",\n choices: SUPPORTED_CHAINS.map((c) => ({\n name: c,\n value: c,\n })),\n default: getDefaultChain(),\n });\n setDefaultChain(chain);\n console.log(\n successBox(\n \"Updated\",\n `Default chain set to ${colors.accent(chain)}`\n )\n );\n break;\n }\n\n case \"currency\": {\n const currency = await input({\n message: \"Enter quote currency:\",\n default: getQuoteCurrency(),\n });\n setQuoteCurrency(currency.toUpperCase());\n console.log(\n successBox(\n \"Updated\",\n `Quote currency set to ${colors.gold(currency.toUpperCase())}`\n )\n );\n break;\n }\n\n case \"done\":\n break;\n }\n });\n","import { getClient } from \"../client.js\";\nimport type { GasPrice, GasPricesResult } from \"./types.js\";\nimport type { Chain, Quote } from \"@covalenthq/client-sdk\";\n\nexport type GasEventType = \"erc20\" | \"nativetokens\" | \"uniswapv3\";\n\nexport async function getGasPrices(\n chainName: string,\n eventType: GasEventType,\n quoteCurrency: string = \"USD\"\n): Promise<GasPricesResult> {\n const client = await getClient();\n\n const response = await client.BaseService.getGasPrices(\n chainName as Chain,\n eventType,\n { quoteCurrency: quoteCurrency as Quote }\n );\n\n if (response.error) {\n throw new Error(`GoldRush API error: ${response.error_message}`);\n }\n\n const data = response.data;\n const items: GasPrice[] = (data?.items ?? []).map((item: any) => ({\n interval: item.interval ?? \"\",\n gasPrice: item.gas_price ?? \"0\",\n gasSpent: item.gas_spent ?? \"0\",\n gasQuote: item.gas_quote ?? 0,\n totalGasQuote: item.total_gas_quote ?? 0,\n prettyTotalGasQuote: item.pretty_total_gas_quote ?? \"$0.00\",\n l1GasQuote: item.other_fees?.l1_gas_quote ?? null,\n }));\n\n return {\n chainName: data?.chain_name ?? chainName,\n eventType: data?.event_type ?? eventType,\n baseFee: data?.base_fee?.toString() ?? \"0\",\n gasQuoteRate: data?.gas_quote_rate ?? 0,\n quoteCurrency: data?.quote_currency ?? quoteCurrency,\n updatedAt: data?.updated_at ? new Date(data.updated_at) : new Date(),\n items,\n };\n}\n","import { getGasPrices, type GasEventType } from \"../api/gas.js\";\nimport { isAuthenticated } from \"../auth.js\";\nimport { getDefaultChain } from \"../config.js\";\nimport { errorBox, successBox } from \"../ui/boxes.js\";\nimport { createSpinner } from \"../ui/spinner.js\";\nimport { renderGasTable } from \"../ui/tables.js\";\nimport { colors } from \"../ui/theme.js\";\nimport { Command } from \"commander\";\n\nconst EVENT_TYPE_MAP: Record<string, GasEventType> = {\n erc20: \"erc20\",\n native: \"nativetokens\",\n swap: \"uniswapv3\",\n nativetokens: \"nativetokens\",\n uniswapv3: \"uniswapv3\",\n};\n\nexport const gasCommand = new Command(\"gas\")\n .description(\"Get real-time gas price estimates for a chain\")\n .argument(\"[chain]\", \"Blockchain name (e.g. eth-mainnet)\")\n .option(\n \"-t, --type <type>\",\n \"Transaction type: erc20, native, swap\",\n \"erc20\"\n )\n .option(\"--quote-currency <currency>\", \"Quote currency\", \"USD\")\n .action(async (chain: string | undefined, options: any) => {\n if (!(await isAuthenticated())) {\n console.log(\n errorBox(\n \"Not Authenticated\",\n \"Run `goldrush auth` to set up your API key\"\n )\n );\n return;\n }\n\n const chainName = chain ?? getDefaultChain();\n if (!chain) {\n console.log(colors.dim(` Using default chain: ${chainName}`));\n }\n\n const eventType = EVENT_TYPE_MAP[options.type];\n if (!eventType) {\n console.log(\n errorBox(\n \"Invalid Type\",\n `Unknown transaction type: ${options.type}\\nValid types: erc20, native, swap`\n )\n );\n return;\n }\n\n const spinner = createSpinner(\n `Fetching gas prices for ${colors.accent(chainName)} (${options.type})`\n );\n spinner.start();\n\n try {\n const result = await getGasPrices(\n chainName,\n eventType,\n options.quoteCurrency\n );\n\n spinner.succeed(`Gas prices for ${chainName}`);\n\n const baseFeeGwei = (\n Number(result.baseFee) / 1_000_000_000\n ).toFixed(2);\n const updatedStr = result.updatedAt.toLocaleTimeString();\n\n console.log(\n successBox(\n `Gas Prices — ${chainName}`,\n `Event Type: ${colors.accent(result.eventType)}\\nBase Fee: ${colors.gold(baseFeeGwei + \" Gwei\")}\\nLast Updated: ${colors.dim(updatedStr)}`\n )\n );\n\n renderGasTable(result.items);\n } catch (err: any) {\n spinner.fail(\"Failed to fetch gas prices\");\n console.log(errorBox(\"Error\", err.message));\n }\n });\n","import { getApiKey } from \"../config.js\";\nimport { successBox, errorBox, infoBox } from \"../ui/boxes.js\";\nimport { colors } from \"../ui/theme.js\";\nimport { select } from \"@inquirer/prompts\";\nimport { Command } from \"commander\";\nimport { existsSync } from \"node:fs\";\nimport { readFile, writeFile, mkdir } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst CLAUDE_DESKTOP_CONFIG_PATHS: Record<string, string> = {\n darwin: join(\n homedir(),\n \"Library\",\n \"Application Support\",\n \"Claude\",\n \"claude_desktop_config.json\"\n ),\n win32: join(\n homedir(),\n \"AppData\",\n \"Roaming\",\n \"Claude\",\n \"claude_desktop_config.json\"\n ),\n linux: join(homedir(), \".config\", \"Claude\", \"claude_desktop_config.json\"),\n};\n\nfunction getNpxConfig(apiKey: string) {\n return {\n command: \"npx\",\n args: [\"@covalenthq/goldrush-cli\", \"mcp\"],\n env: { GOLDRUSH_API_KEY: apiKey },\n };\n}\n\nfunction getLocalConfig(apiKey: string) {\n const entryPoint = resolve(\n fileURLToPath(import.meta.url),\n \"..\",\n \"..\",\n \"dist/index.js\"\n );\n return {\n command: \"node\",\n args: [entryPoint, \"mcp\"],\n env: { GOLDRUSH_API_KEY: apiKey },\n };\n}\n\nexport const installCommand = new Command(\"install\")\n .description(\"Configure Claude Desktop/Code MCP integration\")\n .action(async () => {\n const target = await select({\n message: \"Where would you like to install?\",\n choices: [\n { name: \"Claude Desktop\", value: \"desktop\" },\n { name: \"Claude Code (VS Code)\", value: \"code\" },\n { name: \"Show manual config\", value: \"manual\" },\n ],\n });\n\n const mode = await select({\n message: \"Installation mode:\",\n choices: [\n {\n name: \"npx (published package — recommended for most users)\",\n value: \"npx\",\n },\n {\n name: \"Local (use current build from this directory)\",\n value: \"local\",\n },\n ],\n });\n\n const apiKey = await getApiKey();\n if (!apiKey) {\n console.log(\n errorBox(\n \"No API Key\",\n \"Run `goldrush auth` to set your API key before installing.\"\n )\n );\n return;\n }\n\n const mcpConfig =\n mode === \"local\" ? getLocalConfig(apiKey) : getNpxConfig(apiKey);\n\n if (target === \"manual\") {\n console.log(\n infoBox(\n \"Manual MCP Configuration\",\n `Add this to your Claude MCP settings:\\n\\n${colors.accent(JSON.stringify({ goldrush: mcpConfig }, null, 2))}`\n )\n );\n return;\n }\n\n if (target === \"desktop\") {\n const configPath =\n CLAUDE_DESKTOP_CONFIG_PATHS[process.platform] ??\n CLAUDE_DESKTOP_CONFIG_PATHS.linux;\n\n try {\n const dir = join(configPath, \"..\");\n if (!existsSync(dir)) {\n await mkdir(dir, { recursive: true });\n }\n\n let config: any = {};\n if (existsSync(configPath)) {\n const content = await readFile(configPath, \"utf-8\");\n config = JSON.parse(content);\n }\n\n config.mcpServers = config.mcpServers ?? {};\n config.mcpServers.goldrush = mcpConfig;\n\n await writeFile(configPath, JSON.stringify(config, null, 2));\n\n console.log(\n successBox(\n \"Installed\",\n `MCP server configured in Claude Desktop\\nConfig: ${colors.dim(configPath)}\\nMode: ${colors.accent(mode)}\\n\\nRestart Claude Desktop to activate.`\n )\n );\n } catch (err: any) {\n console.log(\n errorBox(\"Error\", `Failed to update config: ${err.message}`)\n );\n }\n }\n\n if (target === \"code\") {\n const cmdArgs =\n mode === \"local\"\n ? `node ${mcpConfig.args.join(\" \")}`\n : `npx ${mcpConfig.args.join(\" \")}`;\n\n console.log(\n infoBox(\n \"Claude Code Setup\",\n `Run this command in your terminal:\\n\\n${colors.accent(`claude mcp add goldrush -- ${cmdArgs}`)}\\n\\nOr add to ${colors.dim(\".claude/settings.json\")}:\\n${colors.accent(JSON.stringify({ mcpServers: { goldrush: mcpConfig } }, null, 2))}`\n )\n );\n }\n });\n","import { deleteApiKey, deleteSessionToken } from \"../config.js\";\nimport { successBox } from \"../ui/boxes.js\";\nimport { colors } from \"../ui/theme.js\";\nimport { confirm } from \"@inquirer/prompts\";\nimport { Command } from \"commander\";\n\nexport const logoutCommand = new Command(\"logout\")\n .description(\"Clear API key and session token from OS keychain\")\n .action(async () => {\n const confirmed = await confirm({\n message: \"Remove API key and session token from keychain?\",\n default: false,\n });\n\n if (!confirmed) {\n console.log(colors.dim(\"Cancelled.\"));\n return;\n }\n\n await deleteApiKey();\n await deleteSessionToken();\n\n console.log(\n successBox(\n \"Logged Out\",\n \"API key and session token removed from OS keychain.\\nRun `goldrush auth` to set up a new key.\"\n )\n );\n });\n","import packageJson from \"../../package.json\" with { type: \"json\" };\nimport { getPort, getSessionToken } from \"../config.js\";\nimport { SUPPORTED_CHAINS, getChainDisplayName } from \"../utils/chains.js\";\n\nconst SERVER_INFO = {\n name: \"goldrush-mcp\",\n version: packageJson.version,\n};\n\nconst CAPABILITIES = {\n tools: {},\n resources: {},\n};\n\nconst resources = [\n {\n uri: \"goldrush://supported-chains\",\n name: \"Supported Chains\",\n description:\n \"List of all blockchain networks supported by GoldRush API\",\n mimeType: \"application/json\",\n contents: JSON.stringify(\n SUPPORTED_CHAINS.map((chain) => ({\n name: chain,\n displayName: getChainDisplayName(chain),\n })),\n null,\n 2\n ),\n },\n];\n\nfunction getResource(uri: string) {\n return resources.find((r) => r.uri === uri);\n}\n\nasync function makeProxyRequest(\n path: string,\n method: string = \"GET\",\n body?: unknown\n): Promise<any> {\n const port = getPort();\n const sessionToken = await getSessionToken();\n\n const url = `http://localhost:${port}${path}`;\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n\n if (sessionToken) {\n headers[\"Authorization\"] = `Bearer ${sessionToken}`;\n }\n\n const response = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n throw new Error(\n `Proxy request failed: ${response.status} ${response.statusText}`\n );\n }\n\n return response.json();\n}\n\nasync function handleRequest(request: any): Promise<any> {\n const { id, method, params } = request;\n\n switch (method) {\n case \"initialize\":\n return {\n jsonrpc: \"2.0\",\n id,\n result: {\n protocolVersion: \"2024-11-05\",\n serverInfo: SERVER_INFO,\n capabilities: CAPABILITIES,\n },\n };\n\n case \"notifications/initialized\":\n return null; // No response for notifications\n\n case \"tools/list\": {\n try {\n const proxyResult = await makeProxyRequest(\"/tools\");\n return {\n jsonrpc: \"2.0\",\n id,\n result: {\n tools: proxyResult.tools,\n },\n };\n } catch (err: any) {\n return {\n jsonrpc: \"2.0\",\n id,\n error: {\n code: -32603,\n message: `Failed to fetch tools: ${err.message}`,\n },\n };\n }\n }\n\n case \"tools/call\": {\n const { name, arguments: args } = params;\n\n try {\n const proxyResult = await makeProxyRequest(\"/call\", \"POST\", {\n name,\n arguments: args,\n });\n\n return {\n jsonrpc: \"2.0\",\n id,\n result: {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(\n proxyResult.result,\n null,\n 2\n ),\n },\n ],\n },\n };\n } catch (err: any) {\n return {\n jsonrpc: \"2.0\",\n id,\n result: {\n content: [\n {\n type: \"text\",\n text: `Error: ${err.message}`,\n },\n ],\n isError: true,\n },\n };\n }\n }\n\n case \"resources/list\":\n return {\n jsonrpc: \"2.0\",\n id,\n result: {\n resources: resources.map((r) => ({\n uri: r.uri,\n name: r.name,\n description: r.description,\n mimeType: r.mimeType,\n })),\n },\n };\n\n case \"resources/read\": {\n const resource = getResource(params.uri);\n if (!resource) {\n return {\n jsonrpc: \"2.0\",\n id,\n error: {\n code: -32602,\n message: `Resource not found: ${params.uri}`,\n },\n };\n }\n return {\n jsonrpc: \"2.0\",\n id,\n result: {\n contents: [\n {\n uri: resource.uri,\n mimeType: resource.mimeType,\n text: resource.contents,\n },\n ],\n },\n };\n }\n\n default:\n return {\n jsonrpc: \"2.0\",\n id,\n error: { code: -32601, message: `Method not found: ${method}` },\n };\n }\n}\n\nexport async function startMcpBridge(): Promise<void> {\n // Read from stdin, write to stdout — NEVER console.log\n let buffer = \"\";\n\n process.stdin.setEncoding(\"utf-8\");\n process.stdin.on(\"data\", async (chunk: string) => {\n buffer += chunk;\n\n // Process complete JSON-RPC messages (newline-delimited)\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n\n try {\n const request = JSON.parse(trimmed);\n const response = await handleRequest(request);\n\n if (response) {\n process.stdout.write(JSON.stringify(response) + \"\\n\");\n }\n } catch (err: any) {\n process.stderr.write(`MCP Bridge error: ${err.message}\\n`);\n }\n }\n });\n\n process.stdin.on(\"end\", () => {\n process.exit(0);\n });\n}\n","import { startMcpBridge } from \"../mcp/bridge.js\";\nimport { Command } from \"commander\";\n\nexport const mcpCommand = new Command(\"mcp\")\n .description(\"Start MCP stdio bridge (invoked by Claude, not user)\")\n .action(async () => {\n await startMcpBridge();\n });\n","import { getClient } from \"../client.js\";\nimport { infoBox } from \"../ui/boxes.js\";\nimport { toStreamingChainName } from \"../utils/chains.js\";\nimport type {\n NewPair,\n OHLCVCandle,\n PairUpdate,\n WalletActivity,\n WalletActivityDecodedType,\n} from \"./types.js\";\n\nexport type NewPairCallback = (pair: NewPair) => void;\nexport type OHLCVCallback = (candle: OHLCVCandle) => void;\nexport type PairUpdateCallback = (update: PairUpdate) => void;\nexport type WalletActivityCallback = (activity: WalletActivity) => void;\n\nexport async function subscribeToNewPairs(\n chainName: string,\n callback: NewPairCallback,\n protocols?: string[]\n): Promise<() => void> {\n const client = await getClient();\n const streamingChain = toStreamingChainName(chainName);\n if (!streamingChain) {\n throw new Error(`Chain \"${chainName}\" is not supported for streaming.`);\n }\n\n const unsubscribe = client.StreamingService.subscribeToNewPairs(\n {\n chain_name: streamingChain as any,\n protocols: (protocols ?? []) as any,\n },\n {\n next: (events: any[]) => {\n for (const event of events) {\n const pair: NewPair = {\n pairAddress: event.pair_address ?? \"\",\n token0: {\n address: event.base_token?.contract_address ?? \"\",\n symbol:\n event.base_token?.contract_ticker_symbol ??\n \"???\",\n name: event.base_token?.contract_name ?? \"Unknown\",\n },\n token1: {\n address: event.quote_token?.contract_address ?? \"\",\n symbol:\n event.quote_token?.contract_ticker_symbol ??\n \"???\",\n name: event.quote_token?.contract_name ?? \"Unknown\",\n },\n dexName: event.protocol ?? \"Unknown DEX\",\n chainName: event.chain_name ?? \"\",\n createdAt: new Date(\n event.block_signed_at ?? Date.now()\n ),\n initialLiquidity: event.liquidity ?? undefined,\n marketCap: event.market_cap ?? undefined,\n priceUsd: event.quote_rate_usd ?? undefined,\n };\n callback(pair);\n }\n },\n error: (err: unknown) => {\n console.error(\"Streaming error:\", err);\n },\n }\n );\n\n return unsubscribe;\n}\n\nexport interface OHLCVOptions {\n interval?: string;\n timeframe?: string;\n}\n\nconst INTERVAL_MAP: Record<string, string> = {\n \"1s\": \"ONE_SECOND\",\n \"5s\": \"FIVE_SECONDS\",\n \"15s\": \"FIFTEEN_SECONDS\",\n \"1m\": \"ONE_MINUTE\",\n \"5m\": \"FIVE_MINUTES\",\n \"15m\": \"FIFTEEN_MINUTES\",\n \"1h\": \"ONE_HOUR\",\n \"4h\": \"FOUR_HOURS\",\n \"1d\": \"ONE_DAY\",\n};\n\nconst TIMEFRAME_MAP: Record<string, string> = {\n \"1m\": \"ONE_MINUTE\",\n \"5m\": \"FIVE_MINUTES\",\n \"15m\": \"FIFTEEN_MINUTES\",\n \"1h\": \"ONE_HOUR\",\n \"4h\": \"FOUR_HOURS\",\n \"1d\": \"ONE_DAY\",\n \"7d\": \"SEVEN_DAYS\",\n};\n\nexport const VALID_INTERVALS = Object.keys(INTERVAL_MAP);\nexport const VALID_TIMEFRAMES = Object.keys(TIMEFRAME_MAP);\n\nexport async function subscribeToOHLCVPairs(\n chainName: string,\n pairAddress: string,\n callback: OHLCVCallback,\n options?: OHLCVOptions\n): Promise<() => void> {\n const client = await getClient();\n const streamingChain = toStreamingChainName(chainName);\n if (!streamingChain) {\n throw new Error(`Chain \"${chainName}\" is not supported for streaming.`);\n }\n\n const interval = INTERVAL_MAP[options?.interval ?? \"1m\"] ?? \"ONE_MINUTE\";\n const timeframe = TIMEFRAME_MAP[options?.timeframe ?? \"1h\"] ?? \"ONE_HOUR\";\n\n const unsubscribe = client.StreamingService.subscribeToOHLCVPairs(\n {\n chain_name: streamingChain as any,\n pair_addresses: [pairAddress],\n interval: interval as any,\n timeframe: timeframe as any,\n },\n {\n next: (events: any[]) => {\n for (const event of events) {\n const candle: OHLCVCandle = {\n timestamp: new Date(event.timestamp ?? Date.now()),\n open: event.open ?? 0,\n high: event.high ?? 0,\n low: event.low ?? 0,\n close: event.close ?? 0,\n volume: event.volume ?? 0,\n volumeUsd: event.volume_usd ?? 0,\n quoteRate: event.quote_rate ?? 0,\n baseToken: {\n symbol:\n event.base_token?.contract_ticker_symbol ??\n \"???\",\n name: event.base_token?.contract_name ?? \"Unknown\",\n address: event.base_token?.contract_address ?? \"\",\n },\n quoteToken: {\n symbol:\n event.quote_token?.contract_ticker_symbol ??\n \"???\",\n name: event.quote_token?.contract_name ?? \"Unknown\",\n address: event.quote_token?.contract_address ?? \"\",\n },\n };\n callback(candle);\n }\n },\n error: (err: unknown) => {\n console.error(\"OHLCV streaming error:\", err);\n },\n }\n );\n\n return unsubscribe;\n}\n\nexport async function subscribeToUpdatePairs(\n chainName: string,\n pairAddresses: string[],\n callback: PairUpdateCallback\n): Promise<() => void> {\n const client = await getClient();\n const streamingChain = toStreamingChainName(chainName);\n if (!streamingChain) {\n throw new Error(`Chain \"${chainName}\" is not supported for streaming.`);\n }\n\n const unsubscribe = client.StreamingService.subscribeToUpdatePairs(\n {\n chain_name: streamingChain as any,\n pair_addresses: pairAddresses,\n },\n {\n next: (event: any) => {\n const update: PairUpdate = {\n pairAddress: event.pair_address ?? \"\",\n liquidity: event.liquidity ?? 0,\n marketCap: event.market_cap ?? 0,\n priceUsd: event.quote_rate_usd ?? 0,\n };\n callback(update);\n },\n error: (err: unknown) => {\n console.error(\"Update pairs streaming error:\", err);\n },\n }\n );\n\n return unsubscribe;\n}\n\nfunction parseDecodedType(raw: string): WalletActivityDecodedType {\n const lower = (raw ?? \"\").toLowerCase();\n if (lower === \"transfer\") return \"transfer\";\n if (lower === \"swap\") return \"swap\";\n if (lower === \"bridge\") return \"bridge\";\n if (lower === \"deposit\") return \"deposit\";\n if (lower === \"withdraw\") return \"withdraw\";\n if (lower === \"approve\") return \"approve\";\n return \"unknown\";\n}\n\nfunction buildDetailsSummary(\n decodedType: WalletActivityDecodedType,\n details: any\n): { summary: string; quoteUsd: number; tokenSymbol: string | null } {\n if (!details) {\n return { summary: \"\", quoteUsd: 0, tokenSymbol: null };\n }\n\n const symbol = details.contract_metadata?.contract_ticker_symbol ?? null;\n\n switch (decodedType) {\n case \"transfer\":\n return {\n summary: `${symbol ?? \"Token\"} transfer`,\n quoteUsd: details.quote_usd ?? 0,\n tokenSymbol: symbol,\n };\n case \"swap\": {\n const tokenIn =\n typeof details.token_in === \"object\" && details.token_in\n ? (details.token_in.contract_ticker_symbol ??\n details.token_in.contract_name ??\n \"?\")\n : (details.token_in ?? \"?\");\n const tokenOut =\n typeof details.token_out === \"object\" && details.token_out\n ? (details.token_out.contract_ticker_symbol ??\n details.token_out.contract_name ??\n \"?\")\n : (details.token_out ?? \"?\");\n return {\n summary: `${tokenIn} → ${tokenOut}`,\n quoteUsd: 0,\n tokenSymbol: null,\n };\n }\n case \"bridge\":\n return {\n summary:\n `Bridge ${details.typeString ?? \"\"} ${symbol ?? \"\"}`.trim(),\n quoteUsd: details.quote_usd ?? 0,\n tokenSymbol: symbol,\n };\n case \"deposit\":\n return {\n summary: `Deposit ${symbol ?? \"\"}`.trim(),\n quoteUsd: details.quote_usd ?? 0,\n tokenSymbol: symbol,\n };\n case \"withdraw\":\n return {\n summary: `Withdraw ${symbol ?? \"\"}`.trim(),\n quoteUsd: details.quote_usd ?? 0,\n tokenSymbol: symbol,\n };\n case \"approve\":\n return {\n summary: `Approve ${symbol ?? \"\"}`.trim(),\n quoteUsd: details.quote_usd ?? 0,\n tokenSymbol: symbol,\n };\n default:\n return {\n summary: details.message ?? \"\",\n quoteUsd: 0,\n tokenSymbol: null,\n };\n }\n}\n\nexport async function subscribeToWalletActivity(\n chainName: string,\n walletAddresses: string[],\n callback: WalletActivityCallback\n): Promise<() => void> {\n const client = await getClient();\n const streamingChain = toStreamingChainName(chainName);\n if (!streamingChain) {\n throw new Error(`Chain \"${chainName}\" is not supported for streaming.`);\n }\n\n const unsubscribe = client.StreamingService.subscribeToWalletActivity(\n {\n chain_name: streamingChain as any,\n wallet_addresses: walletAddresses,\n },\n {\n next: (events: any[]) => {\n infoBox(JSON.stringify(events, null, 2), \"Wallet Activity\");\n for (const event of events) {\n const decodedType = parseDecodedType(event.decoded_type);\n const { summary, quoteUsd, tokenSymbol } =\n buildDetailsSummary(decodedType, event.decoded_details);\n\n const activity: WalletActivity = {\n txHash: event.tx_hash ?? \"\",\n fromAddress: event.from_address ?? \"\",\n toAddress: event.to_address ?? \"\",\n value: event.value ?? 0,\n chainName: event.chain_name ?? \"\",\n blockSignedAt: new Date(\n event.block_signed_at ?? Date.now()\n ),\n blockHeight: event.block_height ?? 0,\n gasUsed: event.gas_used ?? 0,\n successful: event.successful ?? true,\n decodedType,\n detailsSummary: summary,\n quoteUsd,\n tokenSymbol,\n };\n callback(activity);\n }\n },\n error: (err: unknown) => {\n console.error(\n \"Wallet activity streaming error:\",\n JSON.stringify(err, null, 2)\n );\n },\n }\n );\n\n return unsubscribe;\n}\n","import {\n subscribeToNewPairs,\n subscribeToUpdatePairs,\n} from \"../api/streaming.js\";\nimport type { NewPair } from \"../api/types.js\";\nimport { isAuthenticated } from \"../auth.js\";\nimport { getDefaultChain } from \"../config.js\";\nimport { errorBox } from \"../ui/boxes.js\";\nimport { createSpinner } from \"../ui/spinner.js\";\nimport { buildNewPairsTable, type PairLiveData } from \"../ui/tables.js\";\nimport { colors } from \"../ui/theme.js\";\nimport {\n isValidChain,\n isStreamingChain,\n suggestChain,\n STREAMING_CHAINS,\n isValidProtocol,\n normalizeProtocol,\n protocolToSdkValue,\n getProtocolsForChain,\n} from \"../utils/chains.js\";\nimport { formatTimestamp } from \"../utils/format.js\";\nimport { Command } from \"commander\";\nimport { execSync } from \"node:child_process\";\n\nexport const newpairsCommand = new Command(\"new_pairs\")\n .description(\"Fetch the latest new DEX liquidity pairs\")\n .argument(\"[chain]\", \"Blockchain name (e.g. eth-mainnet)\")\n .argument(\n \"[protocols...]\",\n \"Filter by DEX protocol(s) (e.g. uniswap-v2 raydium-amm)\"\n )\n .option(\"-l, --limit <number>\", \"Max number of pairs to display\", \"10\")\n .action(\n async (\n chain: string | undefined,\n protocolArgs: string[],\n opts: { limit: string }\n ) => {\n if (!(await isAuthenticated())) {\n console.log(\n errorBox(\n \"Not Authenticated\",\n \"Run `goldrush auth` to set up your API key\"\n )\n );\n return;\n }\n\n const chainName = chain ?? getDefaultChain();\n\n if (!chain) {\n console.log(colors.dim(` Using default chain: ${chainName}`));\n }\n\n // Validate chain name\n if (!isValidChain(chainName)) {\n const suggestion = suggestChain(chainName);\n let msg = `\"${chainName}\" is not a recognized chain.`;\n if (suggestion) {\n msg += `\\n\\nDid you mean ${colors.accent(suggestion)}?`;\n }\n msg += `\\n\\nRun ${colors.accent(\"goldrush chains\")} to see all available chains.`;\n console.log(errorBox(\"Unknown Chain\", msg));\n return;\n }\n\n // Validate streaming support\n if (!isStreamingChain(chainName)) {\n console.log(\n errorBox(\n \"Streaming Not Supported\",\n `${colors.accent(chainName)} does not support new pairs streaming.\\n\\n` +\n `Supported chains:\\n` +\n STREAMING_CHAINS.map(\n (c) => ` ${colors.gold(\"•\")} ${c}`\n ).join(\"\\n\") +\n `\\n\\nRun ${colors.accent(\"goldrush chains\")} for details.`\n )\n );\n return;\n }\n\n // Validate protocols if provided\n const protocols: string[] = [];\n for (const arg of protocolArgs) {\n const normalized = normalizeProtocol(arg);\n if (!isValidProtocol(chainName, normalized)) {\n const supported = getProtocolsForChain(chainName);\n console.log(\n errorBox(\n \"Unsupported Protocol\",\n `${colors.accent(normalized)} is not supported on ${colors.accent(chainName)}.\\n\\n` +\n `Supported protocols:\\n` +\n supported\n .map((p) => ` ${colors.gold(\"•\")} ${p}`)\n .join(\"\\n\")\n )\n );\n return;\n }\n protocols.push(protocolToSdkValue(normalized));\n }\n\n const limit = parseInt(opts.limit, 10);\n if (isNaN(limit) || limit < 1) {\n console.log(\n errorBox(\n \"Invalid Limit\",\n \"Limit must be a positive number.\"\n )\n );\n return;\n }\n\n const spinner = createSpinner(\n `Connecting to ${colors.accent(chainName)} pair stream...`\n );\n spinner.start();\n\n // Shared state: map of pairAddress -> NewPair\n const pairMap = new Map<string, NewPair>();\n const liveDataMap = new Map<string, PairLiveData>();\n const MAX_SPARKLINE_POINTS = 20;\n let initialBatchRendered = false;\n let debounceTimer: ReturnType<typeof setTimeout> | null = null;\n let lastRenderedLines = 0;\n let unsubscribeUpdates: (() => void) | null = null;\n let renderDebounce: ReturnType<typeof setTimeout> | null = null;\n let lastUpdateTime: Date | null = null;\n let ageInterval: ReturnType<typeof setInterval> | null = null;\n let selectedRow = 0;\n let copiedMessage: string | null = null;\n let copiedTimer: ReturnType<typeof setTimeout> | null = null;\n let updateCount = 0;\n\n function getPairsArray(): NewPair[] {\n return [...pairMap.values()].reverse().slice(0, limit);\n }\n\n function copyToClipboard(text: string): boolean {\n try {\n execSync(\"pbcopy\", { input: text });\n return true;\n } catch {\n return false;\n }\n }\n\n function rerender(): void {\n const pairs = getPairsArray();\n // Clamp selection to current pair count\n if (selectedRow >= pairs.length) {\n selectedRow = Math.max(0, pairs.length - 1);\n }\n\n const tableStr = buildNewPairsTable(\n pairs,\n liveDataMap,\n selectedRow\n );\n const updatedAt = lastUpdateTime\n ? ` | updated ${formatTimestamp(lastUpdateTime)}`\n : \"\";\n const copyHint = copiedMessage ? ` | ${copiedMessage}` : \"\";\n const updates = ` | ${updateCount} updates`;\n const statusLine = colors.dim(\n ` Live updating ${pairMap.size} pairs${updates}${updatedAt} | ↑↓ select, Enter to copy address${copyHint} (Ctrl+C to stop)`\n );\n const output = tableStr + \"\\n\" + statusLine;\n const newLineCount = output.split(\"\\n\").length;\n\n // Move cursor up, write new content, then clear any leftover lines — all in one write\n let buf = \"\";\n if (lastRenderedLines > 0) {\n buf += `\\x1b[${lastRenderedLines}A\\x1b[G`;\n }\n buf += output + \"\\n\";\n // If the old output had more lines, erase the leftover\n if (lastRenderedLines > newLineCount) {\n buf += \"\\x1b[J\";\n }\n process.stdout.write(buf);\n lastRenderedLines = newLineCount;\n }\n\n function scheduleRerender(): void {\n if (renderDebounce) return;\n renderDebounce = setTimeout(() => {\n renderDebounce = null;\n rerender();\n }, 500);\n }\n\n async function startUpdateSubscription(): Promise<void> {\n const addresses = getPairsArray().map((p) => p.pairAddress);\n if (addresses.length === 0) return;\n\n try {\n unsubscribeUpdates?.();\n } catch {\n // ignore cleanup errors\n }\n\n try {\n const unsub = await subscribeToUpdatePairs(\n chainName,\n addresses,\n (update) => {\n const existing = pairMap.get(update.pairAddress);\n if (existing) {\n updateCount++;\n existing.initialLiquidity = update.liquidity;\n existing.marketCap = update.marketCap;\n existing.priceUsd = update.priceUsd;\n lastUpdateTime = new Date();\n\n // Track live data for flash + sparkline\n const live = liveDataMap.get(\n update.pairAddress\n ) ?? {\n priceHistory: [],\n };\n live.lastUpdatedAt = new Date();\n if (update.priceUsd > 0) {\n const history = live.priceHistory ?? [];\n history.push(update.priceUsd);\n if (history.length > MAX_SPARKLINE_POINTS) {\n history.shift();\n }\n live.priceHistory = history;\n }\n liveDataMap.set(update.pairAddress, live);\n\n scheduleRerender();\n }\n }\n );\n unsubscribeUpdates = unsub;\n } catch {\n // Update subscription is best-effort\n }\n }\n\n try {\n let readyResolve: (() => void) | null = null;\n const readyPromise = new Promise<void>((r) => {\n readyResolve = r;\n });\n\n const unsubscribeNewPairs = await subscribeToNewPairs(\n chainName,\n (pair) => {\n pairMap.set(pair.pairAddress, pair);\n\n // Seed initial price into live data so sparkline starts sooner\n if (pair.priceUsd != null && pair.priceUsd > 0) {\n const live = liveDataMap.get(pair.pairAddress) ?? {\n priceHistory: [],\n };\n if (!live.priceHistory) live.priceHistory = [];\n if (live.priceHistory.length === 0) {\n live.priceHistory.push(pair.priceUsd);\n }\n liveDataMap.set(pair.pairAddress, live);\n }\n\n if (!initialBatchRendered) {\n // Debounce: the initial batch arrives as a rapid burst\n if (debounceTimer) clearTimeout(debounceTimer);\n spinner.text = `Receiving initial pairs... (${pairMap.size})`;\n debounceTimer = setTimeout(async () => {\n initialBatchRendered = true;\n spinner.succeed(\n `${pairMap.size} recent pair${pairMap.size !== 1 ? \"s\" : \"\"} on ${colors.accent(chainName)}`\n );\n console.log();\n rerender();\n\n ageInterval = setInterval(\n () => rerender(),\n 1000\n );\n\n // Enable raw mode AFTER spinner is done (ora resets stdin)\n readyResolve?.();\n\n // Start the update subscription with all initial pair addresses\n await startUpdateSubscription();\n }, 300);\n } else {\n // A new pair arrived after initial batch — re-subscribe to include it\n scheduleRerender();\n startUpdateSubscription();\n }\n },\n protocols.length > 0 ? protocols : undefined\n );\n\n // Wait for spinner to finish before enabling raw mode\n await readyPromise;\n\n const isTTY = process.stdin.isTTY;\n const wasRaw = process.stdin.isRaw;\n if (isTTY) {\n process.stdin.setRawMode(true);\n }\n process.stdin.resume();\n\n await new Promise<void>((resolve) => {\n function cleanup(): void {\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(wasRaw ?? false);\n }\n process.stdin.pause();\n process.stdin.removeListener(\"data\", onKeypress);\n if (debounceTimer) clearTimeout(debounceTimer);\n if (renderDebounce) clearTimeout(renderDebounce);\n if (ageInterval) clearInterval(ageInterval);\n if (copiedTimer) clearTimeout(copiedTimer);\n try {\n unsubscribeNewPairs();\n } catch {\n // ignore cleanup errors\n }\n try {\n unsubscribeUpdates?.();\n } catch {\n // ignore cleanup errors\n }\n resolve();\n }\n\n function onKeypress(data: Buffer): void {\n const key = data.toString();\n const pairs = getPairsArray();\n\n // Ctrl+C\n if (key === \"\\x03\") {\n cleanup();\n return;\n }\n\n // Arrow up\n if (key === \"\\x1b[A\" || key === \"\\x1bOA\") {\n if (selectedRow > 0) {\n selectedRow--;\n }\n rerender();\n return;\n }\n\n // Arrow down\n if (key === \"\\x1b[B\" || key === \"\\x1bOB\") {\n if (selectedRow < pairs.length - 1) {\n selectedRow++;\n }\n rerender();\n return;\n }\n\n // Enter or 'c' — copy pair address\n if (key === \"\\r\" || key === \"c\") {\n const pair = pairs[selectedRow];\n if (pair) {\n const ok = copyToClipboard(pair.pairAddress);\n copiedMessage = ok\n ? colors.accent(\n `Copied ${pair.pairAddress.slice(0, 10)}...`\n )\n : colors.error(\"Copy failed\");\n if (copiedTimer) clearTimeout(copiedTimer);\n copiedTimer = setTimeout(() => {\n copiedMessage = null;\n rerender();\n }, 3000);\n }\n rerender();\n return;\n }\n }\n\n process.stdin.on(\"data\", onKeypress);\n });\n\n // Final render\n console.log();\n console.log(\n colors.primary(\n ` Total: ${pairMap.size} pair${pairMap.size !== 1 ? \"s\" : \"\"}`\n )\n );\n console.log();\n console.log(buildNewPairsTable(getPairsArray(), liveDataMap));\n } catch (err: any) {\n spinner.fail(\"Failed to fetch new pairs\");\n console.log(errorBox(\"Error\", err.message));\n }\n }\n );\n","import { colors } from \"./theme.js\";\nimport asciichart from \"asciichart\";\n\nexport function renderChart(\n data: number[],\n options?: { height?: number; label?: string }\n): void {\n if (data.length === 0) return;\n\n const config: asciichart.PlotConfig = {\n height: options?.height ?? 10,\n colors: [asciichart.yellow],\n };\n\n const chart = asciichart.plot(data, config);\n\n if (options?.label) {\n console.log(`\\n ${options.label}`);\n }\n console.log(chart);\n}\n\nexport interface CandleData {\n open: number;\n high: number;\n low: number;\n close: number;\n timestamp: Date;\n}\n\nexport function renderCandlestickChart(\n candles: CandleData[],\n options?: { height?: number; width?: number }\n): string {\n if (candles.length === 0) return \"\";\n\n const height = options?.height ?? 14;\n const maxCandles = options?.width ?? 60;\n\n // Use the most recent candles that fit\n const visible = candles.slice(-maxCandles);\n\n // Find price range\n let minPrice = Infinity;\n let maxPrice = -Infinity;\n for (const c of visible) {\n if (c.low < minPrice) minPrice = c.low;\n if (c.high > maxPrice) maxPrice = c.high;\n }\n\n // Add a small margin\n const range = maxPrice - minPrice || 1;\n minPrice -= range * 0.05;\n maxPrice += range * 0.05;\n const adjustedRange = maxPrice - minPrice;\n\n // Map price to row (0 = top = maxPrice, height-1 = bottom = minPrice)\n const priceToRow = (price: number): number => {\n return Math.round(((maxPrice - price) / adjustedRange) * (height - 1));\n };\n\n // Build grid\n const grid: string[][] = [];\n for (let r = 0; r < height; r++) {\n grid.push(new Array(visible.length).fill(\" \"));\n }\n\n // Draw each candle\n for (let i = 0; i < visible.length; i++) {\n const c = visible[i];\n const bullish = c.close >= c.open;\n const highRow = priceToRow(c.high);\n const lowRow = priceToRow(c.low);\n const openRow = priceToRow(c.open);\n const closeRow = priceToRow(c.close);\n const bodyTop = Math.min(openRow, closeRow);\n const bodyBottom = Math.max(openRow, closeRow);\n\n // Draw wick\n for (let r = highRow; r <= lowRow; r++) {\n grid[r][i] = bullish ? colors.success(\"│\") : colors.error(\"│\");\n }\n\n // Draw body (overwrites wick)\n if (bodyTop === bodyBottom) {\n // Doji - open equals close\n grid[bodyTop][i] = bullish\n ? colors.success(\"─\")\n : colors.error(\"─\");\n } else {\n for (let r = bodyTop; r <= bodyBottom; r++) {\n grid[r][i] = bullish ? colors.success(\"█\") : colors.error(\"█\");\n }\n }\n }\n\n // Render with price axis\n const lines: string[] = [];\n const decimals = adjustedRange < 1 ? 6 : adjustedRange < 100 ? 4 : 2;\n for (let r = 0; r < height; r++) {\n const price = maxPrice - (r / (height - 1)) * adjustedRange;\n const label = price.toFixed(decimals).padStart(12);\n lines.push(\n `${colors.dim(label)} ${colors.dim(\"┤\")} ${grid[r].join(\"\")}`\n );\n }\n\n return lines.join(\"\\n\");\n}\n","import {\n subscribeToOHLCVPairs,\n VALID_INTERVALS,\n VALID_TIMEFRAMES,\n} from \"../api/streaming.js\";\nimport { isAuthenticated } from \"../auth.js\";\nimport { getDefaultChain } from \"../config.js\";\nimport { errorBox, infoBox } from \"../ui/boxes.js\";\nimport { renderCandlestickChart, type CandleData } from \"../ui/charts.js\";\nimport { createSpinner } from \"../ui/spinner.js\";\nimport { colors } from \"../ui/theme.js\";\nimport {\n isValidChain,\n isStreamingChain,\n suggestChain,\n STREAMING_CHAINS,\n} from \"../utils/chains.js\";\nimport { formatUSD, formatTimestamp } from \"../utils/format.js\";\nimport { input } from \"@inquirer/prompts\";\nimport { Command } from \"commander\";\n\nexport const ohlcvCommand = new Command(\"ohlcv_pairs\")\n .description(\"Stream live OHLCV candlestick prices for a DEX pair\")\n .argument(\"[pair]\", \"Pair/pool contract address\")\n .argument(\"[chain]\", \"Blockchain name (e.g. base-mainnet)\")\n .option(\n \"-i, --interval <interval>\",\n `Candle interval (${VALID_INTERVALS.join(\", \")})`,\n \"1m\"\n )\n .option(\n \"-t, --timeframe <timeframe>\",\n `Lookback timeframe (${VALID_TIMEFRAMES.join(\", \")})`,\n \"1h\"\n )\n .action(\n async (\n pair: string | undefined,\n chain: string | undefined,\n opts: { interval: string; timeframe: string }\n ) => {\n if (!(await isAuthenticated())) {\n console.log(\n errorBox(\n \"Not Authenticated\",\n \"Run `goldrush auth` to set up your API key\"\n )\n );\n return;\n }\n\n const chainName = chain ?? getDefaultChain();\n\n if (!pair) {\n pair = await input({\n message: colors.primary(\n `Enter pair/pool contract address ${colors.dim(`(chain: ${chainName})`)}:`\n ),\n });\n } else if (!chain) {\n console.log(colors.dim(` Using default chain: ${chainName}`));\n }\n\n if (!pair?.trim()) {\n console.log(\n errorBox(\n \"Missing Pair\",\n \"Please provide a pair/pool contract address.\"\n )\n );\n return;\n }\n\n if (!isValidChain(chainName)) {\n const suggestion = suggestChain(chainName);\n let msg = `\"${chainName}\" is not a recognized chain.`;\n if (suggestion) {\n msg += `\\n\\nDid you mean ${colors.accent(suggestion)}?`;\n }\n msg += `\\n\\nRun ${colors.accent(\"goldrush chains\")} to see all available chains.`;\n console.log(errorBox(\"Unknown Chain\", msg));\n return;\n }\n\n if (!isStreamingChain(chainName)) {\n console.log(\n errorBox(\n \"Streaming Not Supported\",\n `${colors.accent(chainName)} does not support OHLCV streaming.\\n\\n` +\n `Supported chains:\\n` +\n STREAMING_CHAINS.map(\n (c) => ` ${colors.gold(\"•\")} ${c}`\n ).join(\"\\n\") +\n `\\n\\nRun ${colors.accent(\"goldrush chains\")} for details.`\n )\n );\n return;\n }\n\n if (!VALID_INTERVALS.includes(opts.interval)) {\n console.log(\n errorBox(\n \"Invalid Interval\",\n `Valid intervals: ${VALID_INTERVALS.join(\", \")}`\n )\n );\n return;\n }\n\n if (!VALID_TIMEFRAMES.includes(opts.timeframe)) {\n console.log(\n errorBox(\n \"Invalid Timeframe\",\n `Valid timeframes: ${VALID_TIMEFRAMES.join(\", \")}`\n )\n );\n return;\n }\n\n console.log(\n infoBox(\n \"OHLCV Stream\",\n `Chain: ${colors.accent(chainName)}\\n` +\n `Pair: ${colors.dim(pair)}\\n` +\n `Interval: ${colors.gold(opts.interval)} Timeframe: ${colors.gold(opts.timeframe)}\\n` +\n `Press ${colors.gold(\"Ctrl+C\")} to stop`\n )\n );\n\n const spinner = createSpinner(\n `Connecting to ${colors.accent(chainName)} OHLCV stream...`\n );\n spinner.start();\n\n const candles: CandleData[] = [];\n let pairLabel = \"\";\n let connected = false;\n\n try {\n const unsubscribe = await subscribeToOHLCVPairs(\n chainName,\n pair,\n (candle) => {\n if (!connected) {\n connected = true;\n pairLabel = `${candle.baseToken.symbol}/${candle.quoteToken.symbol}`;\n spinner.succeed(\n `Connected — streaming ${colors.gold(pairLabel)}`\n );\n }\n\n candles.push({\n open: candle.open,\n high: candle.high,\n low: candle.low,\n close: candle.close,\n timestamp: candle.timestamp,\n });\n\n // Keep a rolling window\n if (candles.length > 120) candles.shift();\n\n // Clear and redraw\n const termWidth = process.stdout.columns ?? 80;\n const chartWidth = Math.min(\n candles.length,\n Math.floor(termWidth * 0.7)\n );\n\n // Move cursor up to overwrite previous chart\n if (candles.length > 1) {\n // chart height + header + summary lines\n const linesToClear = 14 + 4;\n process.stdout.write(`\\x1b[${linesToClear}A\\x1b[J`);\n }\n\n const chart = renderCandlestickChart(candles, {\n height: 14,\n width: chartWidth,\n });\n\n const bullish = candle.close >= candle.open;\n const changePercent =\n candle.open !== 0\n ? ((candle.close - candle.open) / candle.open) *\n 100\n : 0;\n const changeStr = bullish\n ? colors.success(`+${changePercent.toFixed(2)}%`)\n : colors.error(`${changePercent.toFixed(2)}%`);\n\n const priceDecimals =\n candle.close < 0.01\n ? 8\n : candle.close < 1\n ? 6\n : candle.close < 100\n ? 4\n : 2;\n\n console.log(\n `\\n ${colors.gold(pairLabel)} ${colors.dim(\"on\")} ${colors.accent(chainName)} ${changeStr} ${colors.dim(formatTimestamp(candle.timestamp))}`\n );\n console.log(chart);\n console.log(\n ` ${colors.dim(\"O\")} ${candle.open.toFixed(priceDecimals)} ` +\n `${colors.dim(\"H\")} ${candle.high.toFixed(priceDecimals)} ` +\n `${colors.dim(\"L\")} ${candle.low.toFixed(priceDecimals)} ` +\n `${colors.dim(\"C\")} ${(bullish ? colors.success : colors.error)(candle.close.toFixed(priceDecimals))} ` +\n `${colors.dim(\"Vol\")} ${formatUSD(candle.volumeUsd)}`\n );\n console.log(\n ` ${colors.dim(`${candles.length} candles`)}`\n );\n },\n { interval: opts.interval, timeframe: opts.timeframe }\n );\n\n await new Promise<void>((resolve) => {\n process.on(\"SIGINT\", () => {\n console.log(\n colors.dim(\n `\\nStopping OHLCV stream... (${candles.length} candles received)`\n )\n );\n try {\n unsubscribe();\n } catch {\n // ignore cleanup errors\n }\n resolve();\n process.exit(0);\n });\n });\n } catch (err: any) {\n spinner.fail(\"Failed to connect to OHLCV stream\");\n console.log(errorBox(\"Error\", err.message));\n }\n }\n );\n","import chalk from \"chalk\";\n\nconst gradientStops = [\n \"#FF4C8B\",\n \"#E04C9B\",\n \"#BF55A8\",\n \"#9A62B5\",\n \"#7070C0\",\n \"#4080C8\",\n \"#1098CF\",\n \"#00D8D5\",\n];\n\nconst asciiArt = [\n \" ██████ ██████ ██ ██████ ██████ ██ ██ ███████ ██ ██ \",\n \"██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ \",\n \"██ ███ ██ ██ ██ ██ ██ ██████ ██ ██ ███████ ███████ \",\n \"██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ \",\n \" ██████ ██████ ███████ ██████ ██ ██ ██████ ███████ ██ ██ \",\n \" \",\n \" ═══════════ Terminal-first blockchain data & trading ═══════════\",\n \" ══════ powered by Covalent ══════\",\n];\n\nexport function printLogo(): void {\n console.log();\n for (let i = 0; i < asciiArt.length; i++) {\n const colorIdx = Math.min(i, gradientStops.length - 1);\n console.log(chalk.hex(gradientStops[colorIdx])(asciiArt[i]));\n }\n\n console.log();\n}\n","import { categoryTag } from \"./theme.js\";\nimport chalk from \"chalk\";\n\nfunction timestamp(): string {\n const now = new Date();\n const h = String(now.getHours()).padStart(2, \"0\");\n const m = String(now.getMinutes()).padStart(2, \"0\");\n const s = String(now.getSeconds()).padStart(2, \"0\");\n return chalk.hex(\"#868E96\")(`[${h}:${m}:${s}]`);\n}\n\nfunction toolCategory(toolName: string): string {\n if (toolName.includes(\"balance\")) return \"BALANCE\";\n if (toolName.includes(\"pair\") || toolName.includes(\"stream\"))\n return \"STREAM\";\n if (toolName.includes(\"trade\") || toolName.includes(\"swap\")) return \"TRADE\";\n return \"CONFIG\";\n}\n\nexport function logRequest(method: string, toolName: string): void {\n const cat = toolCategory(toolName);\n console.log(\n `${timestamp()} ${categoryTag(cat)} ${chalk.hex(\"#00D8D5\")(\"→\")} ${chalk.white(toolName)} ${chalk.hex(\"#868E96\")(`(${method})`)}`\n );\n}\n\nexport function logResponse(\n toolName: string,\n duration: number,\n status: \"success\" | \"error\"\n): void {\n const cat = toolCategory(toolName);\n const statusIcon =\n status === \"success\"\n ? chalk.hex(\"#50FA7B\")(\"✓\")\n : chalk.hex(\"#FF6B6B\")(\"✗\");\n const durationStr = chalk.hex(\"#868E96\")(`${duration}ms`);\n console.log(\n `${timestamp()} ${categoryTag(cat)} ${statusIcon} ${chalk.white(toolName)} ${durationStr}`\n );\n}\n\nexport function logError(toolName: string, error: Error): void {\n const cat = toolCategory(toolName);\n console.log(\n `${timestamp()} ${categoryTag(cat)} ${chalk.hex(\"#FF6B6B\")(\"ERROR\")} ${chalk.white(toolName)}: ${chalk.hex(\"#FF6B6B\")(error.message)}`\n );\n}\n","import { getTokenBalances } from \"../api/balances.js\";\nimport { subscribeToNewPairs } from \"../api/streaming.js\";\nimport { getApiKey, getMcpUrl } from \"../config.js\";\nimport { logResponse, logError } from \"../ui/logger.js\";\nimport { createSpinner } from \"../ui/spinner.js\";\nimport { renderBalanceTable } from \"../ui/tables.js\";\nimport { colors } from \"../ui/theme.js\";\nimport type { Request, Response } from \"express\";\n\nasync function fetchToolsFromMcpServer(): Promise<any[]> {\n const apiKey = await getApiKey();\n if (!apiKey) {\n throw new Error(\"No API key configured\");\n }\n\n const url = `${getMcpUrl()}/mcp`;\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json, text/event-stream\",\n Authorization: `Bearer ${apiKey}`,\n },\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: 1,\n method: \"tools/list\",\n params: {},\n }),\n });\n\n if (!response.ok) {\n throw new Error(\n `MCP server error: ${response.status} ${response.statusText}`\n );\n }\n\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n\n if (contentType.includes(\"text/event-stream\")) {\n const text = await response.text();\n for (const line of text.split(\"\\n\")) {\n if (line.startsWith(\"data: \")) {\n try {\n const parsed = JSON.parse(line.slice(6));\n if (parsed.result?.tools) {\n return parsed.result.tools;\n }\n } catch {\n // skip non-JSON data lines\n }\n }\n }\n throw new Error(\"No tools found in SSE response\");\n }\n\n const data = await response.json();\n return data.result?.tools ?? [];\n}\n\nexport function healthHandler(_req: Request, res: Response): void {\n res.json({ status: \"ok\", timestamp: new Date().toISOString() });\n}\n\nexport async function toolsHandler(\n _req: Request,\n res: Response\n): Promise<void> {\n try {\n const tools = await fetchToolsFromMcpServer();\n res.json({ tools });\n } catch (err: any) {\n res.status(502).json({\n error: `Failed to fetch tools: ${err.message}`,\n });\n }\n}\n\nexport async function callHandler(req: Request, res: Response): Promise<void> {\n const { name, arguments: args } = req.body;\n const start = Date.now();\n\n if (!name) {\n res.status(400).json({ error: \"Missing tool name\" });\n return;\n }\n\n try {\n let result: unknown;\n\n switch (name) {\n case \"token_balances\": {\n const spinner = createSpinner(\n `Fetching balances for ${colors.accent(args.wallet_address)} on ${colors.accent(args.chain_name)}`\n );\n spinner.start();\n\n try {\n const balances = await getTokenBalances(\n args.chain_name,\n args.wallet_address,\n {\n noSpam: args.no_spam ?? true,\n quoteCurrency: args.quote_currency ?? \"USD\",\n }\n );\n\n spinner.succeed(\"Balances fetched\");\n renderBalanceTable(balances);\n result = balances;\n } catch (err) {\n spinner.fail(\"Failed to fetch balances\");\n throw err;\n }\n break;\n }\n\n case \"new_pairs_stream\": {\n const pairs: any[] = [];\n const spinner = createSpinner(\n `Subscribing to new pairs on ${colors.accent(args.chain_name)}`\n );\n spinner.start();\n\n try {\n const unsubscribe = await subscribeToNewPairs(\n args.chain_name,\n (pair) => {\n pairs.push(pair);\n console.log(\n `${colors.accent(\"NEW PAIR\")} ${colors.gold(pair.token0.symbol)}/${colors.gold(pair.token1.symbol)} on ${pair.dexName}`\n );\n }\n );\n\n spinner.succeed(\"Subscribed to new pairs stream\");\n\n // Collect for 30 seconds then return\n await new Promise((resolve) => setTimeout(resolve, 30_000));\n unsubscribe();\n result = { pairs_found: pairs.length, pairs };\n } catch (err) {\n spinner.fail(\"Failed to subscribe\");\n throw err;\n }\n break;\n }\n\n default:\n res.status(404).json({ error: `Unknown tool: ${name}` });\n return;\n }\n\n const duration = Date.now() - start;\n logResponse(name, duration, \"success\");\n res.json({ result });\n } catch (err: any) {\n const duration = Date.now() - start;\n logError(name, err);\n logResponse(name, duration, \"error\");\n res.status(500).json({ error: err.message });\n }\n}\n","import { getSessionToken } from \"../config.js\";\nimport { logRequest } from \"../ui/logger.js\";\nimport type { Request, Response, NextFunction } from \"express\";\n\nexport async function authMiddleware(\n req: Request,\n res: Response,\n next: NextFunction\n): Promise<void> {\n if (req.path === \"/health\") {\n next();\n return;\n }\n\n const authHeader = req.headers.authorization;\n if (!authHeader?.startsWith(\"Bearer \")) {\n res.status(401).json({ error: \"Missing authorization header\" });\n return;\n }\n\n const token = authHeader.slice(7);\n const sessionToken = await getSessionToken();\n\n if (!sessionToken || token !== sessionToken) {\n res.status(403).json({ error: \"Invalid session token\" });\n return;\n }\n\n next();\n}\n\nexport function requestLogger(\n req: Request,\n _res: Response,\n next: NextFunction\n): void {\n if (req.path === \"/health\") {\n next();\n return;\n }\n\n const toolName = req.body?.name ?? req.path;\n logRequest(req.method, toolName);\n next();\n}\n\nexport function bodySizeLimit(\n req: Request,\n res: Response,\n next: NextFunction\n): void {\n const contentLength = parseInt(req.headers[\"content-length\"] ?? \"0\", 10);\n if (contentLength > 1_048_576) {\n res.status(413).json({ error: \"Request body too large (max 1MB)\" });\n return;\n }\n next();\n}\n","import { getPort, setSessionToken, getApiKey } from \"../config.js\";\nimport { successBox, infoBox } from \"../ui/boxes.js\";\nimport { printLogo } from \"../ui/logo.js\";\nimport { colors } from \"../ui/theme.js\";\nimport { healthHandler, toolsHandler, callHandler } from \"./handlers.js\";\nimport { authMiddleware, requestLogger, bodySizeLimit } from \"./middleware.js\";\nimport express from \"express\";\nimport crypto from \"node:crypto\";\n\nexport async function startProxyServer(port?: number): Promise<void> {\n const serverPort = port ?? getPort();\n\n const apiKey = await getApiKey();\n if (!apiKey) {\n console.error(\n colors.error(\n \"No API key configured. Run `goldrush auth` to set up your API key.\"\n )\n );\n process.exit(1);\n }\n\n // Generate session token\n const sessionToken = crypto.randomBytes(32).toString(\"hex\");\n await setSessionToken(sessionToken);\n\n const app = express();\n\n app.use(express.json());\n app.use(bodySizeLimit);\n app.use(authMiddleware);\n app.use(requestLogger);\n\n // Routes\n app.get(\"/health\", healthHandler);\n app.get(\"/tools\", toolsHandler);\n app.post(\"/call\", callHandler);\n\n const server = app.listen(serverPort, () => {\n printLogo();\n console.log(\n successBox(\n \"Proxy Server Running\",\n `Port: ${colors.gold(String(serverPort))}\\nSession: ${colors.dim(sessionToken.slice(0, 8) + \"...\")}`\n )\n );\n console.log(\n infoBox(\n \"MCP Bridge\",\n `Run ${colors.accent(\"goldrush mcp\")} in Claude to connect\\nOr ${colors.accent(\"goldrush install\")} to auto-configure`\n )\n );\n });\n\n // Graceful shutdown — force exit on Ctrl+C\n process.removeAllListeners(\"SIGINT\");\n process.on(\"SIGINT\", () => {\n console.log(colors.dim(\"\\nShutting down proxy server...\"));\n server.close();\n process.exit(0);\n });\n process.on(\"SIGTERM\", () => {\n server.close();\n process.exit(0);\n });\n\n // Keep the function alive so commander doesn't return\n await new Promise<void>(() => {});\n}\n","import { startProxyServer } from \"../proxy/server.js\";\nimport { Command } from \"commander\";\n\nexport const proxyCommand = new Command(\"proxy\")\n .description(\"Launch the GoldRush proxy server\")\n .option(\"-p, --port <port>\", \"Server port\", parseInt)\n .action(async (options: { port?: number }) => {\n await startProxyServer(options.port);\n });\n","import { getClient } from \"../client.js\";\nimport type { TokenSearchResult } from \"./types.js\";\n\nconst SEARCH_TOKEN_QUERY = `\nquery SearchToken($query: String!) {\n searchToken(query: $query) {\n pair_address\n chain\n quote_rate\n quote_rate_usd\n volume\n volume_usd\n market_cap\n base_token {\n contract_name\n contract_ticker_symbol\n contract_address\n }\n quote_token {\n contract_name\n contract_ticker_symbol\n contract_address\n }\n }\n}\n`;\n\nexport async function searchTokens(\n query: string\n): Promise<TokenSearchResult[]> {\n const client = await getClient();\n\n return new Promise((resolve, reject) => {\n let results: TokenSearchResult[] = [];\n\n client.StreamingService.rawQuery<{ searchToken: any[] }>(\n SEARCH_TOKEN_QUERY,\n { query },\n {\n next: (data: any) => {\n const items = data?.searchToken ?? data ?? [];\n const list = Array.isArray(items) ? items : [];\n results = list.map((item: any) => ({\n pairAddress: item.pair_address ?? \"\",\n chain: item.chain ?? \"\",\n quoteRate: item.quote_rate ?? 0,\n quoteRateUsd: item.quote_rate_usd ?? 0,\n volume: item.volume ?? 0,\n volumeUsd: item.volume_usd ?? 0,\n marketCap: item.market_cap ?? 0,\n baseToken: {\n symbol:\n item.base_token?.contract_ticker_symbol ??\n \"???\",\n name: item.base_token?.contract_name ?? \"Unknown\",\n address: item.base_token?.contract_address ?? \"\",\n },\n quoteToken: {\n symbol:\n item.quote_token?.contract_ticker_symbol ??\n \"???\",\n name: item.quote_token?.contract_name ?? \"Unknown\",\n address: item.quote_token?.contract_address ?? \"\",\n },\n }));\n resolve(results);\n },\n error: (err: unknown) => {\n reject(err instanceof Error ? err : new Error(String(err)));\n },\n complete: () => {\n resolve(results);\n },\n }\n );\n\n // Timeout after 15s in case neither callback fires\n setTimeout(() => resolve(results), 15000);\n });\n}\n","import { searchTokens } from \"../api/search.js\";\nimport { isAuthenticated } from \"../auth.js\";\nimport { errorBox, successBox } from \"../ui/boxes.js\";\nimport { createSpinner } from \"../ui/spinner.js\";\nimport { renderSearchResultsTable } from \"../ui/tables.js\";\nimport { colors } from \"../ui/theme.js\";\nimport { input } from \"@inquirer/prompts\";\nimport { Command } from \"commander\";\n\nexport const searchCommand = new Command(\"search\")\n .description(\"Search for tokens by name, symbol, or contract address\")\n .argument(\"[query...]\", \"Search phrase (token name, symbol, or address)\")\n .action(async (queryParts: string[]) => {\n if (!(await isAuthenticated())) {\n console.log(\n errorBox(\n \"Not Authenticated\",\n \"Run `goldrush auth` to set up your API key\"\n )\n );\n return;\n }\n\n let query = queryParts.join(\" \").trim();\n\n if (!query) {\n query = await input({\n message: colors.primary(\"Search for a token:\"),\n });\n }\n\n if (!query.trim()) {\n console.log(\n errorBox(\"Empty Search\", \"Please provide a search term.\")\n );\n return;\n }\n\n const spinner = createSpinner(\n `Searching for ${colors.accent(query)}...`\n );\n spinner.start();\n\n try {\n const results = await searchTokens(query);\n\n if (results.length === 0) {\n spinner.warn(\"No results found\");\n return;\n }\n\n spinner.succeed(`Found ${results.length} results`);\n\n console.log(\n successBox(\n \"Token Search\",\n `Query: ${colors.accent(query)}\\nResults: ${colors.gold(String(results.length))} (sorted by volume)`\n )\n );\n\n renderSearchResultsTable(results);\n } catch (err: any) {\n spinner.fail(\"Search failed\");\n console.log(errorBox(\"Error\", err.message));\n }\n });\n","import { getMaskedApiKey, validateApiKey } from \"../auth.js\";\nimport { getApiKey, getPort } from \"../config.js\";\nimport { errorBox, infoBox } from \"../ui/boxes.js\";\nimport { createSpinner } from \"../ui/spinner.js\";\nimport { colors } from \"../ui/theme.js\";\nimport { Command } from \"commander\";\n\nexport const statusCommand = new Command(\"status\")\n .description(\"Check API key validity and proxy connectivity\")\n .action(async () => {\n const maskedKey = await getMaskedApiKey();\n const port = getPort();\n\n console.log(\n infoBox(\n \"Status Check\",\n `API Key: ${colors.gold(maskedKey)}\\nProxy Port: ${colors.accent(String(port))}`\n )\n );\n\n // Check API key\n const apiKey = await getApiKey();\n if (!apiKey) {\n console.log(\n errorBox(\n \"API Key\",\n \"Not configured. Run `goldrush auth` to set up.\"\n )\n );\n } else {\n const spinner = createSpinner(\"Validating API key...\");\n spinner.start();\n const valid = await validateApiKey(apiKey);\n if (valid) {\n spinner.succeed(\"API key is valid\");\n } else {\n spinner.fail(\"API key is invalid or expired\");\n }\n }\n\n // Check proxy connectivity\n const proxySpinner = createSpinner(\n `Checking proxy server on port ${port}...`\n );\n proxySpinner.start();\n\n try {\n const response = await fetch(`http://localhost:${port}/health`);\n const data = await response.json();\n if (data.status === \"ok\") {\n proxySpinner.succeed(\"Proxy server is running\");\n } else {\n proxySpinner.fail(\n \"Proxy server responded but status is not ok\"\n );\n }\n } catch {\n proxySpinner.warn(\n `Proxy server not reachable on port ${port}. Run \\`goldrush start\\` to launch it.`\n );\n }\n });\n","import { getClient } from \"../client.js\";\nimport { toStreamingChainName } from \"../utils/chains.js\";\nimport type { TopTrader } from \"./types.js\";\n\nconst UPNL_FOR_TOKEN_QUERY = `\nquery UpnlForToken($chain_name: ChainName!, $token_address: String!) {\n upnlForToken(chain_name: $chain_name, token_address: $token_address) {\n token\n address\n volume\n transactions_count\n pnl_realized_usd\n balance\n balance_pretty\n pnl_unrealized_usd\n contract_metadata {\n contract_address\n contract_name\n contract_ticker_symbol\n contract_decimals\n }\n }\n}\n`;\n\nexport async function getTopTraders(\n chainName: string,\n tokenAddress: string\n): Promise<TopTrader[]> {\n const client = await getClient();\n const gqlChain = toStreamingChainName(chainName);\n\n if (!gqlChain) {\n throw new Error(\n `Chain \"${chainName}\" is not supported for top traders queries.`\n );\n }\n\n return new Promise((resolve, reject) => {\n let results: TopTrader[] = [];\n\n client.StreamingService.rawQuery<{ upnlForToken: any[] }>(\n UPNL_FOR_TOKEN_QUERY,\n { chain_name: gqlChain, token_address: tokenAddress },\n {\n next: (data: any) => {\n const items = data?.upnlForToken ?? data ?? [];\n const list = Array.isArray(items) ? items : [];\n results = list.map((item: any) => ({\n address: item.address ?? \"\",\n tokenAddress: item.token ?? \"\",\n tokenSymbol:\n item.contract_metadata?.contract_ticker_symbol ??\n \"???\",\n tokenName:\n item.contract_metadata?.contract_name ?? \"Unknown\",\n balance: item.balance?.toString() ?? \"0\",\n balancePretty: item.balance_pretty ?? \"0\",\n volume: item.volume?.toString() ?? \"0\",\n transactionsCount: item.transactions_count ?? 0,\n pnlRealizedUsd: item.pnl_realized_usd ?? 0,\n pnlUnrealizedUsd: item.pnl_unrealized_usd ?? 0,\n }));\n resolve(results);\n },\n error: (err: unknown) => {\n reject(err instanceof Error ? err : new Error(String(err)));\n },\n complete: () => {\n resolve(results);\n },\n }\n );\n\n setTimeout(() => resolve(results), 15000);\n });\n}\n","import { getTopTraders } from \"../api/traders.js\";\nimport { isAuthenticated } from \"../auth.js\";\nimport { getDefaultChain } from \"../config.js\";\nimport { errorBox, successBox } from \"../ui/boxes.js\";\nimport { createSpinner } from \"../ui/spinner.js\";\nimport { renderTopTradersTable } from \"../ui/tables.js\";\nimport { colors } from \"../ui/theme.js\";\nimport { isValidChain } from \"../utils/chains.js\";\nimport { input } from \"@inquirer/prompts\";\nimport { Command } from \"commander\";\n\nexport const tradersCommand = new Command(\"traders\")\n .description(\"Show top traders for a token (unrealized PnL)\")\n .argument(\"[token_address]\", \"Token contract address\")\n .argument(\"[chain]\", \"Blockchain name (e.g. eth-mainnet)\")\n .action(\n async (tokenAddress: string | undefined, chain: string | undefined) => {\n if (!(await isAuthenticated())) {\n console.log(\n errorBox(\n \"Not Authenticated\",\n \"Run `goldrush auth` to set up your API key\"\n )\n );\n return;\n }\n\n const chainName = chain ?? getDefaultChain();\n\n if (!tokenAddress) {\n tokenAddress = await input({\n message: colors.primary(\n `Enter token contract address ${colors.dim(`(chain: ${chainName})`)}:`\n ),\n });\n } else if (!chain) {\n console.log(colors.dim(` Using default chain: ${chainName}`));\n }\n\n if (!tokenAddress?.trim()) {\n console.log(\n errorBox(\n \"Missing Address\",\n \"Please provide a token contract address.\"\n )\n );\n return;\n }\n\n if (!isValidChain(chainName)) {\n console.log(\n errorBox(\n \"Invalid Chain\",\n `\"${chainName}\" is not a supported chain. Run \\`goldrush chains\\` to see available chains.`\n )\n );\n return;\n }\n\n const spinner = createSpinner(\n `Fetching top traders on ${colors.accent(chainName)}...`\n );\n spinner.start();\n\n try {\n const traders = await getTopTraders(chainName, tokenAddress);\n\n if (traders.length === 0) {\n spinner.warn(\"No traders found for this token\");\n return;\n }\n\n spinner.succeed(`Found ${traders.length} traders`);\n\n console.log(\n successBox(\n \"Top Traders\",\n `Token: ${colors.accent(tokenAddress)}\\nChain: ${colors.gold(chainName)}\\nTraders: ${colors.gold(String(traders.length))}`\n )\n );\n\n renderTopTradersTable(traders);\n } catch (err: any) {\n spinner.fail(\"Failed to fetch top traders\");\n console.log(errorBox(\"Error\", err.message));\n }\n }\n );\n","import { getClient } from \"../client.js\";\nimport type { TransferItem } from \"./types.js\";\nimport type { Chain, Quote } from \"@covalenthq/client-sdk\";\n\nexport async function getTransfers(\n chainName: string,\n walletAddress: string,\n options: { quoteCurrency?: string } = {}\n): Promise<TransferItem[]> {\n const client = await getClient();\n const { quoteCurrency = \"USD\" } = options;\n\n const response =\n await client.TransactionService.getAllTransactionsForAddressByPage(\n chainName as Chain,\n walletAddress,\n {\n quoteCurrency: quoteCurrency as Quote,\n noLogs: true,\n }\n );\n\n if (response.error) {\n throw new Error(`GoldRush API error: ${response.error_message}`);\n }\n\n const items = response.data?.items ?? [];\n\n return items.map((item: any) => ({\n txHash: item.tx_hash ?? \"\",\n blockSignedAt: new Date(item.block_signed_at ?? Date.now()),\n fromAddress: item.from_address ?? \"\",\n fromLabel: item.from_address_label ?? \"\",\n toAddress: item.to_address ?? \"\",\n toLabel: item.to_address_label ?? \"\",\n value: item.value?.toString() ?? \"0\",\n valueQuote: item.value_quote ?? 0,\n gasQuote: item.gas_quote ?? 0,\n successful: item.successful ?? false,\n }));\n}\n","import { getTransfers } from \"../api/transfers.js\";\nimport { isAuthenticated } from \"../auth.js\";\nimport { getDefaultChain } from \"../config.js\";\nimport { errorBox, successBox } from \"../ui/boxes.js\";\nimport { createSpinner } from \"../ui/spinner.js\";\nimport { renderTransferTable } from \"../ui/tables.js\";\nimport { colors } from \"../ui/theme.js\";\nimport { isValidChain, suggestChain } from \"../utils/chains.js\";\nimport { formatAddress } from \"../utils/format.js\";\nimport { input } from \"@inquirer/prompts\";\nimport { Command } from \"commander\";\n\nexport const transfersCommand = new Command(\"transfers\")\n .description(\"Get recent transfers for a wallet address\")\n .argument(\"[address]\", \"Wallet address (0x format or ENS)\")\n .argument(\"[chain]\", \"Blockchain name (e.g. eth-mainnet)\")\n .action(async (address: string | undefined, chain: string | undefined) => {\n if (!(await isAuthenticated())) {\n console.log(\n errorBox(\n \"Not Authenticated\",\n \"Run `goldrush auth` to set up your API key\"\n )\n );\n return;\n }\n\n const chainName = chain ?? getDefaultChain();\n\n if (!address) {\n address = await input({\n message: colors.primary(\n `Enter wallet address ${colors.dim(`(chain: ${chainName})`)}:`\n ),\n });\n } else if (!chain) {\n console.log(colors.dim(` Using default chain: ${chainName}`));\n }\n\n if (!address?.trim()) {\n console.log(\n errorBox(\"Missing Address\", \"Please provide a wallet address.\")\n );\n return;\n }\n\n if (!isValidChain(chainName)) {\n const suggestion = suggestChain(chainName);\n let msg = `\"${chainName}\" is not a recognized chain.`;\n if (suggestion) {\n msg += `\\n\\nDid you mean ${colors.accent(suggestion)}?`;\n }\n msg += `\\n\\nRun ${colors.accent(\"goldrush chains\")} to see all available chains.`;\n console.log(errorBox(\"Unknown Chain\", msg));\n return;\n }\n\n const spinner = createSpinner(\n `Fetching transfers for ${colors.accent(formatAddress(address))} on ${colors.accent(chainName)}`\n );\n spinner.start();\n\n try {\n const transfers = await getTransfers(chainName, address);\n\n spinner.succeed(`Found ${transfers.length} transfers`);\n\n console.log(\n successBox(\n `Transfers — ${chainName}`,\n `Address: ${colors.accent(address)}\\nShowing: ${colors.gold(String(transfers.length))} most recent`\n )\n );\n\n renderTransferTable(transfers, address);\n } catch (err: any) {\n spinner.fail(\"Failed to fetch transfers\");\n console.log(errorBox(\"Error\", err.message));\n }\n });\n","import { subscribeToWalletActivity } from \"../api/streaming.js\";\nimport type { WalletActivity } from \"../api/types.js\";\nimport { isAuthenticated } from \"../auth.js\";\nimport { getDefaultChain } from \"../config.js\";\nimport { errorBox } from \"../ui/boxes.js\";\nimport { createSpinner } from \"../ui/spinner.js\";\nimport { buildWatchTable } from \"../ui/tables.js\";\nimport { colors } from \"../ui/theme.js\";\nimport {\n isValidChain,\n isStreamingChain,\n suggestChain,\n STREAMING_CHAINS,\n} from \"../utils/chains.js\";\nimport { formatTimestamp } from \"../utils/format.js\";\nimport { input } from \"@inquirer/prompts\";\nimport { Command } from \"commander\";\nimport { execSync } from \"node:child_process\";\n\nexport const watchCommand = new Command(\"watch\")\n .description(\"Stream live wallet activity (transactions, transfers, swaps)\")\n .argument(\"[address]\", \"Wallet address to watch\")\n .argument(\"[chain]\", \"Blockchain name (e.g. eth-mainnet)\")\n .option(\"-l, --limit <number>\", \"Max rows to display\", \"20\")\n .action(\n async (\n address: string | undefined,\n chain: string | undefined,\n opts: { limit: string }\n ) => {\n if (!(await isAuthenticated())) {\n console.log(\n errorBox(\n \"Not Authenticated\",\n \"Run `goldrush auth` to set up your API key\"\n )\n );\n return;\n }\n\n // Prompt for address if not provided\n let walletAddress = address;\n if (!walletAddress) {\n walletAddress = await input({\n message: colors.primary(\"Wallet address to watch:\"),\n validate: (val) =>\n /^0x[a-fA-F0-9]{40}$/.test(val.trim())\n ? true\n : \"Enter a valid EVM address (0x...)\",\n });\n walletAddress = walletAddress.trim();\n }\n\n const chainName = chain ?? getDefaultChain();\n\n if (!chain) {\n console.log(colors.dim(` Using default chain: ${chainName}`));\n }\n\n // Validate chain name\n if (!isValidChain(chainName)) {\n const suggestion = suggestChain(chainName);\n let msg = `\"${chainName}\" is not a recognized chain.`;\n if (suggestion) {\n msg += `\\n\\nDid you mean ${colors.accent(suggestion)}?`;\n }\n msg += `\\n\\nRun ${colors.accent(\"goldrush chains\")} to see all available chains.`;\n console.log(errorBox(\"Unknown Chain\", msg));\n return;\n }\n\n // Validate streaming support\n if (!isStreamingChain(chainName)) {\n console.log(\n errorBox(\n \"Streaming Not Supported\",\n `${colors.accent(chainName)} does not support wallet activity streaming.\\n\\n` +\n `Supported chains:\\n` +\n STREAMING_CHAINS.map(\n (c) => ` ${colors.gold(\"•\")} ${c}`\n ).join(\"\\n\") +\n `\\n\\nRun ${colors.accent(\"goldrush chains\")} for details.`\n )\n );\n return;\n }\n\n const limit = parseInt(opts.limit, 10);\n if (isNaN(limit) || limit < 1) {\n console.log(\n errorBox(\n \"Invalid Limit\",\n \"Limit must be a positive number.\"\n )\n );\n return;\n }\n\n const spinner = createSpinner(\n `Connecting to ${colors.accent(chainName)} wallet stream for ${colors.accent(walletAddress.slice(0, 6) + \"...\" + walletAddress.slice(-4))}...`\n );\n spinner.start();\n\n const activities: WalletActivity[] = [];\n let initialBatchRendered = false;\n let debounceTimer: ReturnType<typeof setTimeout> | null = null;\n let lastRenderedLines = 0;\n let renderDebounce: ReturnType<typeof setTimeout> | null = null;\n let lastUpdateTime: Date | null = null;\n let selectedRow = 0;\n let copiedMessage: string | null = null;\n let copiedTimer: ReturnType<typeof setTimeout> | null = null;\n let txCount = 0;\n\n function getDisplayActivities(): WalletActivity[] {\n return activities.slice(0, limit);\n }\n\n function copyToClipboard(text: string): boolean {\n try {\n execSync(\"pbcopy\", { input: text });\n return true;\n } catch {\n return false;\n }\n }\n\n function rerender(): void {\n const display = getDisplayActivities();\n if (selectedRow >= display.length) {\n selectedRow = Math.max(0, display.length - 1);\n }\n\n const tableStr = buildWatchTable(\n display,\n walletAddress!,\n selectedRow\n );\n const updatedAt = lastUpdateTime\n ? ` | last ${formatTimestamp(lastUpdateTime)}`\n : \"\";\n const copyHint = copiedMessage ? ` | ${copiedMessage}` : \"\";\n const statusLine = colors.dim(\n ` Watching ${txCount} tx${txCount !== 1 ? \"s\" : \"\"}${updatedAt} | ↑↓ select, Enter to copy tx hash${copyHint} (Ctrl+C to stop)`\n );\n const output = tableStr + \"\\n\" + statusLine;\n const newLineCount = output.split(\"\\n\").length;\n\n let buf = \"\";\n if (lastRenderedLines > 0) {\n buf += `\\x1b[${lastRenderedLines}A\\x1b[G`;\n }\n buf += output + \"\\n\";\n if (lastRenderedLines > newLineCount) {\n buf += \"\\x1b[J\";\n }\n process.stdout.write(buf);\n lastRenderedLines = newLineCount;\n }\n\n function scheduleRerender(): void {\n if (renderDebounce) return;\n renderDebounce = setTimeout(() => {\n renderDebounce = null;\n rerender();\n }, 300);\n }\n\n try {\n let readyResolve: (() => void) | null = null;\n const readyPromise = new Promise<void>((r) => {\n readyResolve = r;\n });\n\n const unsubscribe = await subscribeToWalletActivity(\n chainName,\n [walletAddress],\n (activity) => {\n // Insert newest at the front\n activities.unshift(activity);\n // Trim to a reasonable buffer size\n if (activities.length > limit * 5) {\n activities.length = limit * 5;\n }\n txCount++;\n lastUpdateTime = new Date();\n\n if (!initialBatchRendered) {\n if (debounceTimer) clearTimeout(debounceTimer);\n spinner.text = `Receiving transactions... (${txCount})`;\n debounceTimer = setTimeout(() => {\n initialBatchRendered = true;\n spinner.succeed(\n `Streaming wallet activity on ${colors.accent(chainName)}`\n );\n console.log();\n rerender();\n readyResolve?.();\n }, 300);\n } else {\n scheduleRerender();\n }\n }\n );\n\n await readyPromise;\n\n const isTTY = process.stdin.isTTY;\n const wasRaw = process.stdin.isRaw;\n if (isTTY) {\n process.stdin.setRawMode(true);\n }\n process.stdin.resume();\n\n await new Promise<void>((resolve) => {\n function cleanup(): void {\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(wasRaw ?? false);\n }\n process.stdin.pause();\n process.stdin.removeListener(\"data\", onKeypress);\n if (debounceTimer) clearTimeout(debounceTimer);\n if (renderDebounce) clearTimeout(renderDebounce);\n if (copiedTimer) clearTimeout(copiedTimer);\n try {\n unsubscribe();\n } catch {\n // ignore cleanup errors\n }\n resolve();\n }\n\n function onKeypress(data: Buffer): void {\n const key = data.toString();\n const display = getDisplayActivities();\n\n // Ctrl+C\n if (key === \"\\x03\") {\n cleanup();\n return;\n }\n\n // Arrow up\n if (key === \"\\x1b[A\" || key === \"\\x1bOA\") {\n if (selectedRow > 0) {\n selectedRow--;\n }\n rerender();\n return;\n }\n\n // Arrow down\n if (key === \"\\x1b[B\" || key === \"\\x1bOB\") {\n if (selectedRow < display.length - 1) {\n selectedRow++;\n }\n rerender();\n return;\n }\n\n // Enter or 'c' — copy tx hash\n if (key === \"\\r\" || key === \"c\") {\n const activity = display[selectedRow];\n if (activity) {\n const ok = copyToClipboard(activity.txHash);\n copiedMessage = ok\n ? colors.accent(\n `Copied ${activity.txHash.slice(0, 10)}...`\n )\n : colors.error(\"Copy failed\");\n if (copiedTimer) clearTimeout(copiedTimer);\n copiedTimer = setTimeout(() => {\n copiedMessage = null;\n rerender();\n }, 3000);\n }\n rerender();\n return;\n }\n }\n\n process.stdin.on(\"data\", onKeypress);\n });\n\n // Final output\n console.log();\n console.log(\n colors.primary(\n ` Total: ${txCount} transaction${txCount !== 1 ? \"s\" : \"\"} received`\n )\n );\n console.log();\n console.log(\n buildWatchTable(getDisplayActivities(), walletAddress)\n );\n } catch (err: any) {\n spinner.fail(\"Failed to connect to wallet activity stream\");\n console.log(errorBox(\"Error\", err.message));\n }\n }\n );\n","import packageJson from \"../package.json\" with { type: \"json\" };\nimport { authCommand } from \"./commands/auth.js\";\nimport { balancesCommand } from \"./commands/balances.js\";\nimport { chainsCommand } from \"./commands/chains.js\";\nimport { configCommand } from \"./commands/config.js\";\nimport { gasCommand } from \"./commands/gas.js\";\nimport { installCommand } from \"./commands/install.js\";\nimport { logoutCommand } from \"./commands/logout.js\";\nimport { mcpCommand } from \"./commands/mcp.js\";\nimport { newpairsCommand } from \"./commands/newpairs.js\";\nimport { ohlcvCommand } from \"./commands/ohlcv.js\";\nimport { proxyCommand } from \"./commands/proxy.js\";\nimport { searchCommand } from \"./commands/search.js\";\nimport { statusCommand } from \"./commands/status.js\";\nimport { tradersCommand } from \"./commands/traders.js\";\nimport { transfersCommand } from \"./commands/transfers.js\";\nimport { watchCommand } from \"./commands/watch.js\";\nimport { printLogo } from \"./ui/logo.js\";\nimport { colors } from \"./ui/theme.js\";\nimport { select, Separator } from \"@inquirer/prompts\";\nimport { Command } from \"commander\";\n\nconst program = new Command();\n\nprogram\n .name(\"goldrush\")\n .description(\n \"Terminal-first algorithmic trading CLI powered by GoldRush API\"\n )\n .version(packageJson.version);\n\n// Register all subcommands\nprogram.addCommand(authCommand);\nprogram.addCommand(balancesCommand);\nprogram.addCommand(newpairsCommand);\nprogram.addCommand(ohlcvCommand);\nprogram.addCommand(transfersCommand);\nprogram.addCommand(searchCommand);\nprogram.addCommand(tradersCommand);\nprogram.addCommand(configCommand);\nprogram.addCommand(gasCommand);\nprogram.addCommand(statusCommand);\nprogram.addCommand(proxyCommand);\nprogram.addCommand(installCommand);\n// program.addCommand(usageCommand);\nprogram.addCommand(logoutCommand);\nprogram.addCommand(mcpCommand);\nprogram.addCommand(chainsCommand);\nprogram.addCommand(watchCommand);\n\n// Interactive menu when no args provided\nprogram.action(async () => {\n printLogo();\n\n const action = await select({\n message: colors.primary(\"What would you like to do?\"),\n choices: [\n new Separator(colors.dim(\"── Portfolio ──\")),\n { name: \"💰 Token Balances\", value: \"balances\" },\n { name: \"🔀 Transfers\", value: \"transfers\" },\n new Separator(colors.dim(\"── Discovery ──\")),\n { name: \"🔄 New Pairs Stream\", value: \"new_pairs\" },\n { name: \"📊 OHLCV Pairs Stream\", value: \"ohlcv_pairs\" },\n { name: \"👁️ Watch Wallet\", value: \"watch\" },\n { name: \"🔍 Token Search\", value: \"search\" },\n { name: \"⛽ Gas Prices\", value: \"gas\" },\n new Separator(colors.dim(\"── Trading ──\")),\n { name: \"📈 Top Traders\", value: \"traders\" },\n new Separator(colors.dim(\"── Server ──\")),\n { name: \"🚀 Start Proxy Server\", value: \"proxy\" },\n { name: \"🔌 Install MCP Integration\", value: \"install\" },\n { name: \"📡 Check Status\", value: \"status\" },\n new Separator(colors.dim(\"── Account ──\")),\n { name: \"🔑 Authenticate (set API key)\", value: \"auth\" },\n // { name: \"📊 Account Usage\", value: \"usage\" },\n { name: \"⚙️ Configure Settings\", value: \"config\" },\n { name: \"🚪 Logout\", value: \"logout\" },\n new Separator(colors.dim(\"─────────\")),\n { name: \"❌ Exit\", value: \"exit\" },\n ],\n });\n\n if (action === \"exit\") {\n process.exit(0);\n }\n\n // Re-parse with the selected command\n await program.parseAsync([\"node\", \"goldrush\", action]);\n});\n\nprogram.parseAsync(process.argv).catch((err) => {\n console.error(colors.error(err.message));\n process.exit(1);\n});\n"],"mappings":"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","names":["chalk","chalk","GoldRushClient","chalk","chalk","Command","input","chalk","Command","input","Command","config","Command","select","Command","config","Command","Command","Command","resolve","input","Command","resolve","chalk","chalk","resolve","Command","resolve","input","Command","Command","resolve","input","Command","input","Command","input","Command","execSync","resolve","select","Command"]}