使用链上数据分析接口快速查询地址持有的全部 ERC20 代币

·

对于深耕加密资产、DeFi 或 Web3 DApp 的开发者来说,“精准定位某个地址拥有哪些 ERC20 代币”几乎是绕不开的诉求。无论你在做资产看板、空投审计,还是机构钱包对账,只要一条链上查询指令即可节省大量人工核对时间。Chainbase 提供的 getAccountTokens 端点正是为此场景而生:输入任意的 钱包地址链 ID,数秒内即可返回完整的 ERC20 代币余额列表、合约地址、精度与符号等关键字段。

本篇文章将带你完成 0 到 1 的落地流程:注册账号、拿到 API Key、用 JavaScript(Fetch 与 Axios 双版本)跑通脚本,甚至还嵌入了常见疑问(FAQ)与进阶优化思路,助你轻松把链上数据玩到飞起。

目录

  1. 快速概览与所需工具
  2. 3 步生成 Chainbase API Key
  3. 用 JavaScript 调用 getAccountTokens 端点
  4. shell 里一键打印 ERC20 代币余额
  5. FAQ:速率、链支持、字段释义
  6. 结语与可拓展思路

1. 快速概览与所需工具

关键词:ERC20 代币余额、链上数据、钱包地址、无服务器脚本、JavaScript SDK


2. 3 步生成 Chainbase API Key

关键词:注册、项目管理、免费额度

  1. 打开 注册页,邮箱注册后自动跳转控制台。
  2. 新建 Project,填个配色徽章即可;Create 后系统即给一个 46 位的 x-api-key
  3. 把 Key 放入环境变量,避免写到仓库:

    export CHAINBASE_API_KEY=你的46位key

    每次脚本都可以读 process.env.CHAINBASE_API_KEY


3. 用 JavaScript 调用 getAccountTokens 端点

Chainbase 接口归类为 RESTful,本例主推 Node(> v14)运行,也可无缝移植到浏览器。
核心字段:

Fetch 极简版本

// file: fetch-tokens.js
const networkId = '1';
const walletAddr  = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'; // 示例:Vitalik 地址
const apiKey      = process.env.CHAINBASE_API_KEY;

fetch(
  `https://api.chainbase.online/v1/account/tokens?chain_id=${networkId}&address=${walletAddr}&limit=10&page=1`,
  {
    method: 'GET',
    headers: {
      'x-api-key': apiKey,
      'accept': 'application/json'
    }
  }
)
  .then(r => r.json())
  .then(({ data }) => console.table(data))   // 打印成表格格式,一目了然
  .catch(console.error);

运行:

node fetch-tokens.js

Axios 易读版

npm i axios
// file: axios-tokens.js
const axios = require('axios');
const qs = { chain_id: '1', address: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045', limit: 10, page: 1 };
axios
  .get(`https://api.chainbase.online/v1/account/tokens`, {
    headers: { 'x-api-key': process.env.CHAINBASE_API_KEY },
    params: qs
  })
  .then(({ data }) => data.data.forEach(t => console.log(`${t.name}(${t.symbol}): ${t.balance}`)))
  .catch(console.error);
剩下时间别浪费在造轮子,👉 10 行代码直接替换即可获取链上实时余额

4. Shell 里一键打印 ERC20 代币余额

把脚本扔到 CI/CD 里即可每日自动拉取,对接 Slack、Telegram Bot。示例输出:

symbolnamecontract_addressbalance (raw)decimals
USDCUSD Coin0xa0b86a33e6776808..."5000000"6
COMPCompound0xc00e94cb662c..."2000000000000000000"18

快速换算为人类可读金额:

const readable = BigInt(balance) / (10n ** BigInt(decimals));

5. FAQ:速率、链支持、字段释义

关键词限额、链上实时、错误排查

Q1:免费额度跑完了会怎样?
A:达到 500 万调用 / 月后触发限速 429,可升级付费套餐或无代码缓存一次请求多次复用。

Q2:查询结果多久更新一次?
A:链上到块即刷新,最大延迟 < 2 个区块时间(以太坊约 24 秒)。如链拥堵会顺延。

Q3:如何查其它链(BSC、Polygon)?
A:仅修改 chain_idBSC=56、Polygon=137、Arbitrum=42161。链列表与所支持的 token schema 见官方文档。

Q4:想一次性获取 1000 种代币?分页怎么做?
A:把脚本改成自增 page,每次 limit=100,收集完拼成总数组即可。
提示:👉 需要更丝滑的分页示例?这里复制即可

Q5:余额显示为 0 但实际有钱包资产?
A:大概率是代币未被收录或合约是新型可升级代理,需在项目设置里手动提交合约地址白名单。


6. 结语与可拓展思路

至此,你已经拥有一套 100% 自动化、可随时复制的 ERC20 代币余额查询流水线。接下来能做的还有很多:

无论个人记账还是企业级资产托管,链上数据 API + 简洁脚本 都是降本增效的万能钥匙。愿你在 Web3 的海洋,借助高可靠数据源,始终掌舵清晰、稳如老狗。