mcpField
D
defillama

defillama

github.com/starchild-ai-agent数据与数据库30329 次安装6 天前更新
代码仓库

关于 defillama

defillama 是通过 Python 脚本调用 DefiLlama API 的数据技能,面向需要查询和比较 DeFi 指标的分析工作。它涵盖协议、链、收益池、交易量、费用、稳定币、桥和价格等数据。

主要功能

  1. 01查询协议、链及 TVL
  2. 02查看稳定币和收益池
  3. 03汇总 DEX 交易量与费用
  4. 04查询桥数据和代币价格
  5. 05通过 Python exports.py 调用

适用场景

  1. 01比较协议或链的 TVL
  2. 02筛选收益池并查看 APY
  3. 03制作 DeFi 市场概览
  4. 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认证
免费 APIhttps://api.llama.fi无(无需密钥)
Pro APIhttps://pro-api.llama.fi/{API_KEY}密钥位于路径 /API_KEY/endpoint
Bridge APIhttps://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
所有链的 TVLGET /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 == true
  • tvlUsd >= 50_000_000
  • apy 介于 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

当用户询问“稳定币净流量”或“稳定币流入”时:

  1. 使用 stablecoincharts/{chain} 查询稳定币 TVL 的 30 天变化(比一般 TVL 更准确)
  2. 如果稳定币 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]

关键池字段:

字段类型描述
poolUUID 字符串唯一的池标识符
chain字符串链名称
project字符串协议名称
symbol字符串代币对(例如 “USDC-WETH”)
tvlUsd数字以 USD 计的 TVL
apy数字当前 APY %
apyBase数字基础 APY(借贷/交易手续费)
apyReward数字激励 APY(代币奖励)
ilRisk"yes"/"no"无常损失风险
exposure"single"/"multi"单资产或多资产敞口
apyPct7D数字过去 7 天的 APY 变化

评论

支持 Markdown