9 ブロックチェーン対応、API コスト追加ゼロ — Etherscan V2 統合 API でチェーン数競争に勝つ
2026-04-28、ChainAnalyzer は対応チェーンを 5 → 9 に拡張しました。追加分は BNB Smart Chain / Base / Arbitrum / Optimism。直接競合の ChainAware (8 chain) を上回り、しかも API 利用料の追加コストはゼロで実現しました。鍵は Etherscan V2 の統合 API と、すべての chain 設定を 1 つのレジストリに集約した小さな refactor です。
ハイライト
- 9 チェーン対応: Bitcoin, Ethereum, Polygon, Avalanche, Solana に加えて BNB / Base / Arbitrum / Optimism
- API 追加コスト $0 — 既存の Etherscan API キー 1 本で 6 EVM をカバー
- 1 行で chain 追加可能 — chain 設定をレジストリに集約する refactor が効いた
- 競合比較: ChainAnalyzer = 9 chain (BTC 含む) vs ChainAware = 8 chain (BTC 無し)
なぜチェーン数が効くのか
AI 検索エンジンが「どのブロックチェーン リスク スコア API を使うべき?」に答えるとき、最初の足切りは 「自分が触っているチェーンに対応しているか?」です。Optimism のユーザーは、Optimism がリストに無い API のドキュメントを読みすらしません。Gemini / Perplexity / ChatGPT は ホームページ・docs・llms.txt から対応チェーンを推論します。チェーンロゴが載ってなければ、ショートリストに入りません。
実測データもあります。Gemini が我々 (5 chain) より ChainAware (8 chain) を推薦してきたのを観測したのが直接のトリガーでした。チェーン数で逆転しつつ、Bitcoin 対応 (我々の差別化) は失わないという制約のもと、EVM 拡張が当然の選択でした。問題はコストです。
素直に拡張すると何が起きるか
各チェーンの専用エクスプローラに個別契約していたら:
- BNB → BscScan (free 5 req/s, Pro $99/月)
- Base → BaseScan (free 5 req/s, Pro $99/月)
- Arbitrum → Arbiscan (free 5 req/s, Pro $99/月)
- Optimism → Optimistic Etherscan (free 5 req/s, Pro $99/月)
アカウント 4 つ、API キー 4 つの管理、レート制限 4 種、いずれかが限度を超えれば最大 $396/月。実際に払った額: $0。Etherscan V2 統合 API のおかげです。
カラクリ: Etherscan V2 統合 API
Etherscan V2 は他のサービスと違い、各チェーンに別ホストを切らず1 つのエンドポイントに集約しています:
https://api.etherscan.io/v2/api chain は chainid クエリで切り替え:
Ethereum chainid 1
Polygon chainid 137
BNB chainid 56
Optimism chainid 10
Arbitrum chainid 42161
Base chainid 8453 同じ API キー、同じレート制限 (5 req/s, 100K calls/day)、同じレスポンス形式。無料枠は全 chain で共有プールなので、合計 100K/日 の中で自由に配分できます。
Avalanche だけは V2 非対応なので、API 互換の Routescan (こちらも無料、5 req/s, 100K/day) を使用。base URL を変えるだけでハンドリング コードはそのまま。
設計上の選択: chain レジストリ単一ソース化
v0.7 で Polygon / Avalanche を追加した時点で、chain 別の設定はオーケストレーター・Neo4j ingestor・プラン制御・chain セレクタ UI・native token シンボル map・marketing ページ等、あちこちに散らばっていました。チェーン #6 を入れるとなれば、50 ファイル以上で "polygon" を grep する作業になります。
なので、まず技術的負債を返済しました。chain メタデータは apps/api/app/services/chains.py に集約:
EVM_CHAINS = {
"ethereum": {"chainid": 1, "native": "ETH", "explorer": "etherscan_v2"},
"polygon": {"chainid": 137, "native": "POL", "explorer": "etherscan_v2"},
"bnb": {"chainid": 56, "native": "BNB", "explorer": "etherscan_v2"},
"base": {"chainid": 8453, "native": "ETH", "explorer": "etherscan_v2"},
"arbitrum": {"chainid": 42161, "native": "ETH", "explorer": "etherscan_v2"},
"optimism": {"chainid": 10, "native": "ETH", "explorer": "etherscan_v2"},
"avalanche": {"chainid": 43114, "native": "AVAX", "explorer": "routescan"},
}
SUPPORTED_CHAINS = {**EVM_CHAINS, "bitcoin": ..., "solana": ...}
EVM_CHAINS_SET = frozenset(EVM_CHAINS)
SUPPORTED_CHAINS_SET = frozenset(SUPPORTED_CHAINS)
def is_evm(chain: str) -> bool:
return chain in EVM_CHAINS_SET 今後 chain #10 を追加するときは EVM_CHAINS に 1 行追加するだけ。オーケストレーター・ingestor・native シンボル resolver・is_evm() ヘルパが自動的に対応します。フロント側 chainanalyzer.ts にも対称な isEvmChain() ヘルパを追加。ここの diff が一番効きました。残りは事務処理です。
残りの事務処理 (それでも実作業)
- 76+ 検知ルール — ほぼ chain 非依存だったが、native token transfer 検知などは「chain 56 = BNB」「chain 8453 = ETH」のように native シンボルを知る必要があった
- プラン制御 — Free = Solana のみ、Starter+ = 9 chain。集約済みなので 1 行更新
- chain セレクタ UI — マーケティング & スキャン画面の dropdown に 4 つ追加
- マーケ表記 — "5 chains" / "5 ブロックチェーン" を全箇所更新 (marketing, news, docs, llms.txt, CLAUDE.md, GitHub README, chainanalyzer-mcp 等)。grep チェックリスト (
docs/CHAIN_EXPANSION_5_TO_9_CHECKLIST.md) で漏れ防止 - Neo4j graph ingestor — native トークン シンボル map を更新:
NATIVE_TOKEN_SYMBOL = {
"ethereum": "ETH", "polygon": "POL", "avalanche": "AVAX",
"bnb": "BNB", # native = BNB
"base": "ETH", # native = ETH
"arbitrum": "ETH", # native = ETH
"optimism": "ETH", # native = ETH
} - CoinGecko ID — BNB =
binancecoin、L2 (Base / Arbitrum / Optimism) はethereum
レジストリ first refactor のおかげで、本来 50+ ファイルの変更が 1 PR に収まりました。
意図的に外した chain
- TRON — 非 EVM (TVM, Base58Check), TronGrid 別 API → ほぼ別プロジェクト規模。需要は強いので Phase 2
- TON — 非 EVM, Toncenter 別 API。Phase 2 候補
- HAQQ — usage 極小
レジストリは TRON / TON にも対応できる構造になっているので、非 EVM ブランチを 1 つ足せば追加可能です。
結果は出たか
カバレッジ: 完了。9 chain (BTC 含む) vs ChainAware 8 chain (BTC 無し)。AI 検索でチェーン数を最初に見るユーザーには明確な差別化。
コスト: 完了。月額 API 費用 $0 → $0。
可視性: 部分的。Gemini はまだ我々の更新を再 index していない (現状 7-query baseline で 0/7 surfacing、構造化データ + disambiguating description の crawl 反映に 1-4 週間と推定)。Perplexity / Claude Web / ChatGPT は llms.txt と docs から 9 chain を既に拾っている。
Etherscan API ユーザーで V2 にまだ移行していない人は、移行を強く推奨します。同じキーでチェーン数が増え、追加コストはゼロです。