对于深耕加密资产、DeFi 或 Web3 DApp 的开发者来说,“精准定位某个地址拥有哪些 ERC20 代币”几乎是绕不开的诉求。无论你在做资产看板、空投审计,还是机构钱包对账,只要一条链上查询指令即可节省大量人工核对时间。Chainbase 提供的 getAccountTokens 端点正是为此场景而生:输入任意的 钱包地址 与 链 ID,数秒内即可返回完整的 ERC20 代币余额列表、合约地址、精度与符号等关键字段。
本篇文章将带你完成 0 到 1 的落地流程:注册账号、拿到 API Key、用 JavaScript(Fetch 与 Axios 双版本)跑通脚本,甚至还嵌入了常见疑问(FAQ)与进阶优化思路,助你轻松把链上数据玩到飞起。
目录
- 快速概览与所需工具
- 3 步生成 Chainbase API Key
- 用 JavaScript 调用
getAccountTokens端点 - shell 里一键打印 ERC20 代币余额
- FAQ:速率、链支持、字段释义
- 结语与可拓展思路
1. 快速概览与所需工具
关键词:ERC20 代币余额、链上数据、钱包地址、无服务器脚本、JavaScript SDK
- Chainbase 免费账户 + API Key
新用户 30 秒完成注册,每月 500 万次免费调用额度,对大多数个人/小团队绰绰有余。 - 本地开发环境推荐
VS Code 一体化即可支撑 JavaScript/TypeScript、终端调试,配合 auto-import、prettier 效率翻倍。 查询参数
- 链 ID(
chain_id),主网填1,BSC 填56,后续增链无需改代码。 - 钱包地址(
address);支持检查任意地址,无需私钥签名。
- 链 ID(
2. 3 步生成 Chainbase API Key
关键词:注册、项目管理、免费额度
- 打开 注册页,邮箱注册后自动跳转控制台。
- 新建 Project,填个配色徽章即可;Create 后系统即给一个 46 位的
x-api-key。 把 Key 放入环境变量,避免写到仓库:
export CHAINBASE_API_KEY=你的46位key每次脚本都可以读
process.env.CHAINBASE_API_KEY。
3. 用 JavaScript 调用 getAccountTokens 端点
Chainbase 接口归类为 RESTful,本例主推 Node(> v14)运行,也可无缝移植到浏览器。
核心字段:
- 端点 URL:
https://api.chainbase.online/v1/account/tokens - 必须 Header:
x-api-key - Query 参数:
chain_id、address、limit、page
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.jsAxios 易读版
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。示例输出:
| symbol | name | contract_address | balance (raw) | decimals |
|---|---|---|---|---|
| USDC | USD Coin | 0xa0b86a33e6776808... | "5000000" | 6 |
| COMP | Compound | 0xc00e94cb662c... | "2000000000000000000" | 18 |
快速换算为人类可读金额:
const readable = BigInt(balance) / (10n ** BigInt(decimals));5. FAQ:速率、链支持、字段释义
关键词限额、链上实时、错误排查
Q1:免费额度跑完了会怎样?
A:达到 500 万调用 / 月后触发限速 429,可升级付费套餐或无代码缓存一次请求多次复用。
Q2:查询结果多久更新一次?
A:链上到块即刷新,最大延迟 < 2 个区块时间(以太坊约 24 秒)。如链拥堵会顺延。
Q3:如何查其它链(BSC、Polygon)?
A:仅修改 chain_id:BSC=56、Polygon=137、Arbitrum=42161。链列表与所支持的 token schema 见官方文档。
Q4:想一次性获取 1000 种代币?分页怎么做?
A:把脚本改成自增 page,每次 limit=100,收集完拼成总数组即可。
提示:👉 需要更丝滑的分页示例?这里复制即可
Q5:余额显示为 0 但实际有钱包资产?
A:大概率是代币未被收录或合约是新型可升级代理,需在项目设置里手动提交合约地址白名单。
6. 结语与可拓展思路
至此,你已经拥有一套 100% 自动化、可随时复制的 ERC20 代币余额查询流水线。接下来能做的还有很多:
- 把这个脚本嵌入 Next.js 前端,然后用 Vercel 部署“钱包资产看板”小程序。
- 利用 Chainbase SQL 模式把多地址余额汇总成实时 APR 质押收益报表。
- 对接 Telegram bot,“/balance 0x钱包地址” 三秒出结果,轻松做社群小工具。
无论个人记账还是企业级资产托管,链上数据 API + 简洁脚本 都是降本增效的万能钥匙。愿你在 Web3 的海洋,借助高可靠数据源,始终掌舵清晰、稳如老狗。