defillama について
defillamaは、DeFiの調査でDefiLlama APIのデータを取得するPythonスクリプト型スキルです。プロトコル、チェーン、利回り、取引量、手数料、ステーブルコイン、ブリッジ、価格を扱います。
主な機能
- 01プロトコル、チェーン、TVLの照会
- 02ステーブルコインと利回りプールの確認
- 03DEX取引量と手数料の集計
- 04ブリッジデータとトークン価格の取得
- 05Pythonのexports.pyから関数を呼び出し
活用シーン
- 01プロトコルまたはチェーンのTVL比較
- 02APYによる利回りプールの選定
- 03DeFi市場スナップショットの作成
- 04トークンの現在価格や過去価格の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ starchild-ai-agent/ official-skills --skill defillamaインストール後、Claude Code で/defillamaを入力して読み込まれたか確認します。
同梱ファイルexports.py
詳細
DefiLlama API
スクリプトモードのスキル(PoC)。 このスキルは Anthropic のツールとして登録されていません。 使用するには、このファイルを読み、
bashでpythonを実行し、exports.pyからインポートしてください。以下の スクリプトの使用法 セクションを参照してください。
スクリプトの使用法
このスキルには、すべての関数を含む単一の exports.py が同梱されています。次のように
bash ブロックから呼び出してください。
python3 - <<'EOF'
import sys, json
sys.path.insert(0, "/data/workspace/skills/defillama")
from exports import protocols, chains, yield_pools, dex_overview, fees_overview
# Top 10 protocols by TVL
data = protocols()
top = sorted(data, key=lambda p: p.get("tvl") or 0, reverse=True)[:10]
print(json.dumps([{"name": p["name"], "tvl": p["tvl"]} for p in top], indent=2))
EOF
exports.py で利用可能な関数:protocols、chains、protocol_tvl、
yield_pools、dex_overview、fees_overview、revenue_overview、
stablecoins、bridges、treasury。シグネチャについては exports.py を直接読んでください。
Trit: -1 (MINUS - バリデーター/データソース) Color: #4A90D9 (コールドブルー、210°)
DefiLlama の API エコシステムから提供される包括的な DeFi データ。
関数リファレンス(シグネチャ)
すべての関数は exports.py にあります。sys.path.insert(0, "/data/workspace/skills/defillama")
の後に bash ブロックから呼び出してください。
プロトコル & TVL
| 関数 | 説明 |
|---|---|
protocols() | 現在の TVL、チェーン内訳、カテゴリを含むすべてのプロトコルを一覧表示します。dict のリストを返します。 |
protocol(slug) | 1 つのプロトコルの詳細な履歴(slug は protocols() から取得)。 |
chains() | 現在の TVL を含む、サポートされているすべてのチェーン。 |
chain_tvl_history(chain) | 1 つのチェーンの日次 TVL シリーズ。 |
global_tvl_history() | グローバルの日次 TVL シリーズ。 |
ステーブルコイン
| 関数 | 説明 |
|---|---|
stablecoins(include_prices=True) | チェーンごとの流通供給量を含むすべてのステーブルコイン。 |
stablecoin_chains() | チェーンごとのステーブルコイン合計。 |
イールド
| 関数 | 説明 |
|---|---|
yield_pools() | APY、TVL、プロジェクト、チェーンを含むすべてのイールドプール。 |
yield_chart(pool_id) | 1 つのプールの過去の APY/TVL(pool_id は yield_pools() から取得)。 |
出来高 / 手数料 / 収益
| 関数 | 説明 |
|---|---|
dex_overview(exclude_chart=True) | すべてのチェーンにわたる集計された DEX 出来高。 |
dex_overview_chain(chain, exclude_chart=True) | 1 つのチェーンの DEX 出来高。 |
fees_overview(exclude_chart=True) | すべてのプロトコルにわたる集計された手数料+収益。 |
fees_overview_chain(chain, exclude_chart=True) | チェーンごとの手数料内訳。 |
ブリッジ
| 関数 | 説明 |
|---|---|
bridges() | 出来高統計を含むすべてのブリッジを一覧表示します。 |
bridge_chain_volume(chain) | チェーンごとのブリッジ出来高。 |
bridge_volume(bridge_id, start_timestamp=None, end_timestamp=None) | 1 つのブリッジの時系列。 |
価格
| 関数 | 説明 |
|---|---|
current_prices(coins) | 現在の価格。coins = "ethereum:0x...,coingecko:bitcoin" のようなリスト/文字列。 |
historical_prices(coins, timestamp) | 特定の unix タイムスタンプ時点の価格。 |
マッチングキーワード(インテントトリガー)
ユーザーが次のいずれかについて尋ねた場合に、このスキルを使用してください:
- TVL:TVL ランキング、プロトコル TVL、チェーン TVL、TVL の変化、DeFi の市場シェア
- ステーブルコインイールド:ステーブルコインイールド、USDC/USDT APY、低リスクのイールドプール、安全なイールド、債券に似た DeFi
- イールド / ファーミング:APY ランキング、イールドプールのスクリーニング、ボールトイールド、レンディング APY、借入金利、LSD/LRT イールド
- DEX / 手数料 / 収益:DEX 出来高、プロトコル手数料、プロトコル収益、収益の成長、どの DEX の収益が最も速く成長しているか
- フロー / ローテーション:資本フロー、チェーンの流入/流出、ステーブルコインのネットフロー、流動性ローテーション
- プロトコルリサーチ:プロトコルのファンダメンタルズ、複数プロトコルの比較、セクター比較、DeFi スナップショット/レポート
このスキルがマッチすべき典型的なユーザープロンプト:
- 「最近最も収益の成長が強い DEX はどれですか?」
- 「そこそこのリターンがある低リスクのステーブルコインイールドの選択肢をいくつか見つけてください。」
- 「今日の DeFi 市場スナップショットを作成してください(TVL / 出来高 / 手数料)。」
- 「過去 30 日間の ETH と SOL のオンチェーンフローの変化を比較してください。」
ベース URL
| API | ベース URL | 認証 |
|---|---|---|
| 無料 API | https://api.llama.fi | なし(キー不要) |
| Pro API | https://pro-api.llama.fi/{API_KEY} | パス内のキー /API_KEY/endpoint |
| Bridge API | https://bridges.llama.fi | なし |
キーのルール: すべての無料エンドポイント(TVL、チェーン、DEX、手数料、価格)には
https://api.llama.fiを使用します。 Pro エンドポイント(イールド、デリバティブ、エミッション)にのみhttps://pro-api.llama.fi/{API_KEY}を使用します。 環境変数:DEFILLAMA_API_KEY— Pro URL のパスで使用され、HTTP ヘッダーとしては使用されません。
最も一般的なエンドポイント(ここから始める)
DeFi 分析タスクの 90% には、これらの無料エンドポイント(api.llama.fi)を使用します:
| タスク | エンドポイント | 例 |
|---|---|---|
| TVL 上位 N プロトコル | GET /protocols | .tvl フィールドで並べ替え |
| 単一プロトコルの詳細 | GET /protocol/{slug} | 例: /protocol/aave |
| チェーン TVL 履歴 | GET /v2/historicalChainTvl/{chain} | .date + .tvl フィールド |
| DEX 出来高 | GET /overview/dexs?excludeChart=true | .total24h、.total7d |
| プロトコル手数料 | GET /overview/fees?excludeChart=true | .total24h |
| 全チェーン TVL | GET /v2/chains | グローバル合計には .tvl を合算 |
⚠️ Pro エンドポイント(
/yields/*、/emissionsなど)には、URL パス内にDEFILLAMA_API_KEYが必要です。
プロキシ要件(sc-proxy)
偽の API キー(たとえば fake-defillama-key-12345)を使用する場合、リクエストは上流でキーを置き換えられるよう、必ず sc-proxy を経由する必要があります。
- 環境変数のキー名:
DEFILLAMA_API_KEY - 自動プロキシ検出の環境変数:
PROXY_HOST、PROXY_PORT HTTP_PROXY/HTTPS_PROXYが未設定の場合、直接リクエストが上流に到達し、キーエラーが返される可能性があります。
Python テンプレート(推奨)
import os
import requests
host = os.getenv("PROXY_HOST")
port = os.getenv("PROXY_PORT")
session = requests.Session()
if host and port:
if ":" in host and not host.startswith("["):
host = f"[{host}]" # IPv6-safe
proxy = f"http://{host}:{port}"
session.proxies.update({"http": proxy, "https": proxy})
# Free endpoint (no key needed):
r_free = session.get("https://api.llama.fi/protocols", timeout=25)
print("Free:", r_free.status_code)
# Pro endpoint (key in URL path):
api_key = os.environ["DEFILLAMA_API_KEY"]
r_pro = session.get(f"https://pro-api.llama.fi/{api_key}/yields/pools", timeout=25)
print("Pro:", r_pro.status_code)
クイックテストコマンド
set -a && source .env && set +a
python3 - << 'PY'
import os, requests
s = requests.Session()
host, port = os.getenv('PROXY_HOST'), os.getenv('PROXY_PORT')
if host and port:
if ':' in host and not host.startswith('['):
host = f'[{host}]'
p = f'http://{host}:{port}'
s.proxies.update({'http': p, 'https': p})
# Free endpoint
r1 = s.get('https://api.llama.fi/protocols', timeout=25)
print('free /protocols:', r1.status_code)
# Pro endpoint
k = os.environ['DEFILLAMA_API_KEY']
r2 = s.get(f'https://pro-api.llama.fi/{k}/yields/pools', timeout=25)
print('pro /yields/pools:', r2.status_code)
PY
クイックリファレンス
TVL とプロトコル
# All protocols with TVL
GET /protocols
# Single protocol detail
GET /protocol/{slug}
# Chain TVL
GET /v2/chains
GET /v2/historicalChainTvl/{chain}
価格
# Current prices (chain:address format)
GET /coins/prices/current/{coins}
# Historical
GET /coins/prices/historical/{timestamp}/{coins}
# Chart data
GET /coins/chart/{coins}?period=30d
イールド(Pro)
GET /yields/pools # All yield pools
GET /yields/chart/{pool} # Pool history
GET /yields/poolsBorrow # Borrow rates
GET /yields/perps # Perp funding
GET /yields/lsdRates # LSD rates
出来高
GET /overview/dexs?excludeChart=true # DEX volumes (recommended)
GET /overview/dexs/{chain}?excludeChart=true # Chain DEX
GET /summary/dexs/{protocol} # Protocol detail
GET /overview/options?excludeChart=true # Options
GET /overview/derivatives?excludeChart=true # Derivatives (Pro)
手数料と収益
GET /overview/fees?excludeChart=true # All fees/revenue (recommended)
GET /overview/fees/{chain}?excludeChart=true # Chain fees
GET /summary/fees/{protocol} # Protocol fees
# dataType: dailyFees | dailyRevenue | dailyHoldersRevenue
ブリッジ
# Base: https://bridges.llama.fi
GET /bridges # All bridges
GET /bridge/{id} # Bridge detail
GET /bridgevolume/{chain} # Volume by chain
GET /transactions/{id} # Bridge txs
DAT(デジタル資産トレジャリー)
GET /dat/institutions # All institutions
GET /dat/institutions/{symbol} # e.g., MSTR
使用スクリプト
;; See scripts/defillama.bb for full implementation
(require '[defillama :as dl])
;; TVL
(dl/protocols)
(dl/protocol "aave")
(dl/chain-tvl "Ethereum")
;; Prices
(dl/price "ethereum:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48")
(dl/price-chart "coingecko:ethereum" {:period "30d"})
;; Yields
(dl/yield-pools)
(dl/pool-chart "747c1d2a-c668-4682-b9f9-296708a3dd90")
;; Volumes
(dl/dex-overview)
(dl/dex-protocol "uniswap")
;; Fees
(dl/fees-overview)
(dl/fees-protocol "hyperliquid")
エンドポイントカテゴリ
無料エンドポイント
/protocols、/protocol/{slug}、/tvl/{slug}/v2/chains、/v2/historicalChainTvl/coins/prices/*、/coins/chart/*/overview/dexs、/overview/options/overview/fees、/summary/fees/*
Pro エンドポイント(API キー必須)
/yields/*- すべてのイールドエンドポイント(ステーブルコインプール、APY ランキング、借入/パープス/LSD)/overview/derivatives/tokenProtocols/{symbol}/inflows/{protocol}/{timestamp}/chainAssets/emissions、/emission/{protocol}/categories、/forks、/oracles/entities、/treasuries/hacks、/raises/etfs/*、/dat/*- bridges.llama.fi 上のブリッジエンドポイント
レスポンスパターン
TVL レスポンス
{"id": "2269", "name": "Aave", "tvl": 5200000000, "chains": ["Ethereum"]}
価格レスポンス
{"coins": {"ethereum:0x...": {"price": 0.999, "symbol": "USDC", "confidence": 0.99}}}
イールドプールレスポンス
{"pool": "uuid", "chain": "Ethereum", "project": "aave-v3", "apy": 3.5, "tvlUsd": 1500000000}
GF(3) 統合
このスキルは、トライアドにおいて MINUS (-1) バリデータとして機能します:
- 信頼できる DeFi データを提供します
- プロトコルメトリクスを検証します
- 実データで分析を制約します
次と組み合わせて使用します:
aptos-agent(+1): データに基づいて実行exa-search(0): Web コンテキストで強化
出力形式ガイドライン(中国語/英語クエリ)
DeFi データのレスポンスは常に人間が読める Markdown としてフォーマットしてください。中国語と英語の両方のクエリをサポートします。
数値フォーマット
- TVL ≥ $1B →
$X.XXB、TVL ≥ $1M →$XXXM - APY →
XX.X% - 24 時間変動 →
+X.X%または-X.X% - 常に単位を含めます:
$、%、B(10 億)、M(100 万)
推奨出力テンプレート
TVL リーダーボード:
| # | Protocol | TVL | Chains |
|---|--------------|-----|-----------|
| 1 | Aave V3 | $24.7B | Ethereum, Arbitrum |
イールドプール:
| Pool | APY | TVL | Risk |
|---------|-----|-----|---------|
| USDC | 5.2% | $500M | ✅ Low risk |
マーケットスナップショット:
| Metric | Value |
|------------|-----------|
| Total TVL | $96B |
| DEX 24h volume | $5.7B |
| Fees 24h | $49M |
リスクラベル
イールドプールには常にリスク指標を含めてください:
✅ 低リスク— 安定した APY < 20%、IL リスクなし⚠️ 中リスク— APY 20-100%、または IL リスクあり🔴 高リスク— APY > 100%(インセンティブ主導の可能性が高く、持続不可能)
ヒント: excludeChart パラメータ
出来高/手数料の概要エンドポイントでは、レスポンスサイズを削減するために常に ?excludeChart=true を追加してください:
GET /overview/dexs?excludeChart=true # DEX volumes (much faster)
GET /overview/fees?excludeChart=true # Fee data (much faster)
よくある落とし穴と注意点
1. 無料エンドポイントの誤ったベース URL
❌ 誤り: https://pro-api.llama.fi/protocols → 404 "Path needs to start with /yields/..." を返します
✅ 正しい: https://api.llama.fi/protocols
無料エンドポイントは pro-api.llama.fi を経由しません。
2. API キーなしの Pro エンドポイント
❌ 誤り: https://pro-api.llama.fi/yields/pools → 401 または誤ったルート
✅ 正しい: https://pro-api.llama.fi/{DEFILLAMA_API_KEY}/yields/pools
API キーはヘッダーではなく URL パス に含まれます。
3. Volume/Fee エンドポイントで excludeChart=true が欠落
このパラメータがないと、/overview/dexs は大きなチャート履歴配列を返します。
サマリークエリには常に ?excludeChart=true を追加してください。
4. TVL の null 値の扱い
プロトコルを TVL でソートする場合は、まずフィルタリングします:
valid = [p for p in protocols if isinstance(p.get('tvl'), (int, float)) and p['tvl'] > 0]
5. ステーブルコインと TVL
DefiLlama のチェーン TVL には、ステーブルコインだけでなくすべての DeFi 資産が含まれます。
ステーブルコイン固有のフローには、stablecoins.llama.fi API を使用してください (pro-api とは別です)。
「ステーブルコインフロー」について尋ねられた場合、チェーン TVL の変化は妥当な近似値です。
6. Yields プール UUID
/yields/pools の pool フィールドは "747c1d2a-c668-4682-b9f9-296708a3dd90" のような UUID です。
/yields/chart/{pool} の履歴には、この UUID (トークンアドレスではない) を使用してください。
7. ステーブルコイン利回りスクリーニングのベースライン
「保守的なステーブルコイン利回り」のリクエストには、このベースラインフィルターから始めてください:
stablecoin == truetvlUsd >= 50_000_000apyが2から20の間 (極端なインセンティブスパイクを除外)ilRisk == "no"- 保守的なプロファイルには
exposure == "single"を推奨
ワークフロー例 (エージェントレシピ)
レシピ 1: DeFi TVL トップ 10 (1 回の呼び出し)
r = requests.get("https://api.llama.fi/protocols")
protocols = r.json()
top10 = sorted([p for p in protocols if p.get('tvl',0) > 0], key=lambda x: x['tvl'], reverse=True)[:10]
# Output: markdown table with | # | Protocol | TVL | Chain |
レシピ 2: ETH 対 SOL の 30 日間 TVL 比較 (2 回の呼び出し)
r1 = requests.get("https://api.llama.fi/v2/historicalChainTvl/Ethereum")
r2 = requests.get("https://api.llama.fi/v2/historicalChainTvl/Solana")
# Filter last 30d: [d for d in r1.json() if d['date'] >= time.time() - 30*86400]
# Output: | Chain | TVL 30d ago | TVL today | Change % |
レシピ 3: ステーブルコイン利回り候補リスト (1 回の呼び出し)
r = requests.get(f"https://pro-api.llama.fi/{API_KEY}/yields/pools")
raw = r.json()
pools = raw.get('data', raw) if isinstance(raw, dict) else raw
safe = [p for p in pools
if p.get('stablecoin') is True
and (p.get('tvlUsd') or 0) >= 50_000_000
and (p.get('apy') or 0) >= 2
and (p.get('apy') or 0) <= 20
and p.get('ilRisk') == 'no']
top = sorted(safe, key=lambda x: x.get('apy', 0), reverse=True)[:10]
# Output: | Project | Chain | Symbol | APY | TVL | Risk |
レシピ 4: DeFi 市場スナップショット (3 回の呼び出し)
chains = requests.get("https://api.llama.fi/v2/chains").json()
dexs = requests.get("https://api.llama.fi/overview/dexs?excludeChart=true").json()
fees = requests.get("https://api.llama.fi/overview/fees?excludeChart=true").json()
# total_tvl = sum(c['tvl'] for c in chains if isinstance(c.get('tvl'), (int,float)))
# Output: snapshot table with TVL, DEX 24h vol, Fee 24h
レシピ 5: プロトコル TVL スパイク分析 (2 回の呼び出し)
r1 = requests.get("https://api.llama.fi/protocols") # find protocol with big change_1d
r2 = requests.get(f"https://api.llama.fi/protocol/{slug}") # get chainTvls detail
# Output: | Hypothesis | Explanation | How to verify | (table + step-by-step verification)
ステーブルコインデータ
ステーブルコイン固有の分析 (一般的な TVL とは異なります) には、stablecoins API を使用してください:
# Stablecoins overview (separate from pro-api)
GET https://stablecoins.llama.fi/stablecoins?includePrices=true
# Chain-specific stablecoin data
GET https://stablecoins.llama.fi/stablecoincharts/{chain}
# chain = "Ethereum", "Solana", "BSC", etc.
# All chains stablecoin summary
GET https://stablecoins.llama.fi/stablecoinchains
ユーザーが「ステーブルコインの純フロー」や「ステーブルコインの流入」について尋ねた場合:
- 30 日間のステーブルコイン TVL 変化には
stablecoincharts/{chain}を使用してください (一般的な TVL より正確です) - または、stablecoin API が利用できない場合は
/v2/historicalChainTvl/{chain}を近似値として使用してください
Yields プールデータの扱い
/yields/pools のレスポンスは {"data": [...], "status": "success"} です:
r = session.get(f"https://pro-api.llama.fi/{api_key}/yields/pools")
raw = r.json()
pools = raw.get('data', raw) if isinstance(raw, dict) else raw
# Filter example: TVL > $50M and APY > 0
filtered = [p for p in pools if p.get('tvlUsd', 0) >= 50_000_000 and (p.get('apy') or 0) > 0]
主要なプールフィールド:
| フィールド | 型 | 説明 |
|---|---|---|
pool | UUID 文字列 | 一意のプール識別子 |
chain | 文字列 | チェーン名 |
project | 文字列 | プロトコル名 |
symbol | 文字列 | トークンペア (例: "USDC-WETH") |
tvlUsd | 数値 | USD 建ての TVL |
apy | 数値 | 現在の APY % |
apyBase | 数値 | ベース APY (貸付/取引手数料) |
apyReward | 数値 | インセンティブ APY (トークン報酬) |
ilRisk | "yes"/"no" | インパーマネントロスリスク |
exposure | "single"/"multi" | 単一資産か複数資産かのエクスポージャー |
apyPct7D | 数値 | 過去 7 日間の APY 変化 |