关于 defillama
defillama 是通过 Python 脚本调用 DefiLlama API 的数据技能,面向需要查询和比较 DeFi 指标的分析工作。它涵盖协议、链、收益池、交易量、费用、稳定币、桥和价格等数据。
主要功能
- 01查询协议、链及 TVL
- 02查看稳定币和收益池
- 03汇总 DEX 交易量与费用
- 04查询桥数据和代币价格
- 05通过 Python exports.py 调用
适用场景
- 01比较协议或链的 TVL
- 02筛选收益池并查看 APY
- 03制作 DeFi 市场概览
- 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 - 验证器/数据源) 颜色:#4A90D9(冷蓝色,210°)
通过 DefiLlama 的 API 生态系统获取全面的 DeFi 数据。
函数参考(签名)
所有函数都在 exports.py 中。在
sys.path.insert(0, "/data/workspace/skills/defillama") 之后,从
bash 块中调用。
协议与 TVL
| 函数 | 描述 |
|---|---|
protocols() | 列出所有协议及其当前 TVL、链细分和类别。返回字典列表。 |
protocol(slug) | 获取单个协议的详细历史记录(slug 来自 protocols())。 |
chains() | 列出所有受支持的链及其当前 TVL。 |
chain_tvl_history(chain) | 获取单条链的每日 TVL 序列。 |
global_tvl_history() | 获取全球每日 TVL 序列。 |
稳定币
| 函数 | 描述 |
|---|---|
stablecoins(include_prices=True) | 列出所有稳定币及其按链划分的流通供应量。 |
stablecoin_chains() | 获取按链划分的稳定币总量。 |
收益
| 函数 | 描述 |
|---|---|
yield_pools() | 列出所有收益池及其 APY、TVL、项目和链。 |
yield_chart(pool_id) | 获取单个收益池的历史 APY/TVL(pool_id 来自 yield_pools())。 |
交易量 / 费用 / 收入
| 函数 | 描述 |
|---|---|
dex_overview(exclude_chart=True) | 获取所有链上汇总的 DEX 交易量。 |
dex_overview_chain(chain, exclude_chart=True) | 获取单条链的 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) | 获取单个跨链桥的时间序列。 |
价格
| 函数 | 描述 |
|---|---|
current_prices(coins) | 获取当前价格。coins = 列表/字符串,例如 "ethereum:0x...,coingecko:bitcoin"。 |
historical_prices(coins, timestamp) | 获取指定 Unix 时间戳的价格。 |
匹配关键词(意图触发词)
当用户询问以下任意内容时,使用此技能:
- TVL:TVL 排名、协议 TVL、链 TVL、TVL 变化、DeFi 市场份额
- 稳定币收益:稳定币收益、USDC/USDT APY、低风险收益池、安全收益、类似固定收益的 DeFi
- 收益 / Farming: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 请求头。
最常用的端点(从这里开始)
对于 90% 的 DeFi 分析任务,请使用这些免费端点(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):通过网络上下文补充信息
输出格式指南(中文/英文查询)
DeFi 数据响应始终采用易读的 Markdown 格式。支持中文和英文查询。
数字格式
- TVL ≥ $1B →
$X.XXB;TVL ≥ $1M →$XXXM - APY →
XX.X% - 24 小时变化 →
+X.X%或-X.X% - 始终注明单位:
$、%、B(十亿)、M(百万)
推荐的输出模板
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 |
风险标签
收益池始终包含风险指标:
✅ Low risk— APY 稳定且低于 20%,无 IL 风险⚠️ Medium risk— APY 为 20-100%,或存在 IL 风险🔴 High risk— 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. Pro 端点未提供 API 密钥
❌ 错误: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 Pool UUID
/yields/pools 中的 pool 字段是一个 UUID,例如 "747c1d2a-c668-4682-b9f9-296708a3dd90"。
查询 /yields/chart/{pool} 历史数据时,请使用此 UUID,而非代币地址。
7. 稳定币收益筛选基准
对于“保守型稳定币收益”请求,请从以下基准筛选条件开始:
stablecoin == truetvlUsd >= 50_000_000apy介于2和20之间(排除极端的激励收益尖峰)ilRisk == "no"- 对于保守型配置,优先选择
exposure == "single"
工作流示例(Agent 配方)
配方 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),请使用稳定币 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
当用户询问“稳定币净流量”或“稳定币流入”时:
- 使用
stablecoincharts/{chain}查询稳定币 TVL 的 30 天变化(比一般 TVL 更准确) - 如果稳定币 API 不可用,也可以使用
/v2/historicalChainTvl/{chain}作为代理指标
Yields Pool 数据处理
/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 变化 |