基于协议的链上资产查询:DeFi API 实战指南

·

在日常的 DeFi API 调用、钱包数据分析或 Web3 项目开发中,快速拉取某一「协议」下用户的多链资产列表,是极为常见的需求。本文将围绕 https://web3.okx.com/api/v5/defi/user/asset/platform/detail 接口,给出完整的 用法范例、参数拆解、调试技巧及常见问答,帮助开发者 10 分钟内完成接入。

1. 接口定位与适用场景

👉 一步到位:点击即可跳转到专业 API 调试环境,马上开始实战!


2. 请求结构(无表格说明)

2.1 请求地址

POST https://web3.okx.com/api/v5/defi/user/asset/platform/detail

2.2 必须字段

2.2.1 单链单地址范例

{
  "analysisPlatformId": "aave_v3",
  "walletAddressList": [
    {
      "chainId": "1",
      "walletAddress": "0x123...abcd"
    }
  ]
}

2.2.2 多链多地址范例

{
  "analysisPlatformId": "uniswap_v3",
  "walletAddressList": [
    {"chainId": "1", "walletAddress": "0xabc..."},
    {"chainId": "56", "walletAddress": "0xdef..."},
    {"chainId": "137", "walletAddress": "0xghi..."}
  ]
}

2.3 Header 建议

Content-Type: application/json
x-api-key: <你的 Key>

3. 响应数据深潜

接口返回的是 networkHoldVoList 数组,每一项代表一条网络上的完整资产概览,结构如下:

  1. 基础信息

    • network:主网名称
    • chainId:链 ID(1=Ethereum、56=BSC、137=Polygon 等)
  2. 投资类型 investType

    1. Save(储蓄)
    2. Pool(流动性池)
    3. Farm(收益农场)
    4. Vaults(机枪池)
    5. Stake(质押)
  3. 单资产详情 investTokenBalanceVoList

    • tokenSymbol:代币简称
    • coinAmount:原币数量
    • currencyAmount:折美元价值
    • tokenAddress:合约地址
    • tokenPrecision:小数位
  4. 汇总字段

    • totalValue:该网络该协议下全部持仓价值(USD)

3.1 JSON 片段示例

"networkHoldVoList": [{
  "network": "ethereum",
  "chainId": "1",
  "investTokenBalanceVoList": [
    {
      "investType": "3",          // Farm
      "tokenSymbol": "USDC",
      "coinAmount": "1234.56",
      "currencyAmount": "1234.56",
      "tokenAddress": "0x...USDC"
    }
  ],
  "totalValue": "2340.15",
  "platformName": "Uniswap V3"
}]

4. 开发实操三步曲

Step 1:生成授权

先到控制台获取 DeFi API Key,配置 IP 白名单与 100 req/sec 限流。

Step 2:代码抄作业

以下采用 CURL、Python 双示例。

CURL

curl -X POST 'https://web3.okx.com/api/v5/defi/user/asset/platform/detail' \
-H 'Content-Type: application/json' \
-H 'x-api-key: 你的Key' \
-d '{
  "analysisPlatformId": "compound_v3",
  "walletAddressList": [
    {
      "chainId": "1",
      "walletAddress": "0xABCD..."
    }
  ]
}'

Python(requests)

import requests, json

url = "https://web3.okx.com/api/v5/defi/user/asset/platform/detail"
payload = {
    "analysisPlatformId": "compound_v3",
    "walletAddressList": [
        {"chainId": "1", "walletAddress": "0xABCD..."}
    ]
}
headers = {
    "Content-Type": "application/json",
    "x-api-key": "你的Key"
}
resp = requests.post(url, data=json.dumps(payload), headers=headers)
print(resp.json())

Step 3:错误码速查

状态码含义常见场景
400Parameter Invalid地址/链 ID 填写错误
401UnauthorizedAPI Key 未授权访问 DeFi 模块
429Rate Limit请求频率超限,开启指数回退

5. FAQ:高频疑惑 6 连问

Q1:能否将「协议 ID」改为链上合约地址?
A1:目前必须选用官方 analysisPlatformId(短字符串形式);合约地址需提前映射为 ID。

Q2:返回的 logo 和 URL 能商用吗?
A2:logo 与 protocolUrl 仅供展示,若向终端用户嵌入,请事先确认第三方协议的品牌授权。

Q3:tokenPrecision 为什么有时为空?
A3:合约未在主流数据源注册,可回退到 decimals() 调用。

Q4:是否支持分页?
A4:暂不支持,单协议单链返回条目一般不超过 200 条。

Q5:如何刷新缓存?
A5:该接口为实时节点查询,无缓存;如需读秒级数据,建议自建缓存层 + 触发更新。

Q6:在哪里可以查看可选的「analysisPlatformId」列表?
A6:前往 👉 获取完整协议 ID 字典文档,再也不用一行行试错!,官方每 24h 更新一次最新映射。


6. 与生俱来的应用灵感

只需一次轻量 POST,就能让 协议、持仓、资金去向 一目了然。快来体验吧!