一文掌握:如何快速查询任意以太坊地址的全部ERC-20代币余额

·

与普通用户在钱包客户端里直观看到资产不同,开发者、审计机构或分析团队常常需要在未导入私钥的前提下,精准抓取某一地址拥有的全部 ERC-20 代币余额。本文将用最简明的中文实操教程,示范如何借助 Chainbase、Alchemy、Moralis 三大主流 Web3 API 分别在 3 分钟内完成自动查询,并给出可直接复制的 JavaScript 代码片段。


核心痛点:为什么不能只看区块链浏览器?

区块链浏览器只展示已“被识别”的代币,冷门或新发行资产可能缺失。API 则可按需分页、可筛选、可批量自动化,为风控、税务、资产审计等场景奠定数据基础。

本文关键词:ERC-20 查询钱包资产 APIChainbase 教学Alchemy SDKMoralis 教程以太坊链上数据


方案一:Chainbase 免费层 —— 最快上手

Step 1:注册与准备

  1. 打开 Chainbase 官网 注册免费账号。
  2. 在控制台新建项目,复制生成的 API KEY
  3. 本地或云端任选 IDE,准备钱包地址作为输入参数。

Step 2:三行代码实现查询

=======

// 引入 axios:npm i axios
const axios = require('axios');

async function getAllERC20(address="vitalik.eth", chainId=1) {
  const url = `https://api.chainbase.online/v1/account/tokens`;
  const { data } = await axios.get(url, {
    params: { chain_id: chainId, address },
    headers: { 'x-api-key': 'YOUR_API_KEY' }
  });
  return data.data.slice(0, 5); // 仅示意取前 5 条
}

控制台执行 node index.js 即可输出类似结果:

[
  { name: 'Ethereum', symbol: 'ETH', balance: '...' },
  { name: 'Uniswap V2', symbol: 'UNI-V2', balance: '...' },
  ...
]

Step 3:进阶技巧

👉 想快速预览查询效果?立即体验零门槛的余额可视化工具。


方案二:Alchemy SDK —— 企业级精准度

Step 1:环境初始化

npm install alchemy-sdk

在 Alchemy 控制台创建新 App,ChainEthereum Mainnet,同步获取 HTTP URLAPI KEY

Step 2:获取原始余额列表

const { Alchemy, Network } = require('alchemy-sdk');

const config = { apiKey: 'YOUR_API_KEY', network: Network.ETH_MAINNET };
const alchemy = new Alchemy(config);

async function getERC20List(address) {
  const raw = await alchemy.core.getTokenBalances(address);
  return raw.tokenBalances.filter(b => b.tokenBalance !== '0x0');
}

Step 3:补全元数据并格式化

async function enrich(tokenBalance) {
  const meta = await alchemy.core.getTokenMetadata(tokenBalance.contractAddress);
  return {
    contractAddress: tokenBalance.contractAddress,
    symbol: meta.symbol,
    decimals: meta.decimals,
    balance: Number(tokenBalance.tokenBalance) / (10 ** meta.decimals)
  };
}

全部代码串接 getERC20List -> map(enrich),即可得到名称、符号、精确小数位的 完整资产清单


方案三:Moralis —— 高并发企业场景首选

Step 1:安装与链接

npm install moralis @moralisweb3/common-evm-utils

到 Moralis 后台 → SettingsSecrets 复制 Web3 API Key

Step 2:一次性拉取全量资产

const Moralis = require('moralis').default;

await Moralis.start({ apiKey: 'YOUR_MORALIS_KEY' });

const response = await Moralis.EvmApi.token.getWalletTokenBalances({
  chain: '0x1', // 对应 Ethereum Mainnet
  address: '0x...'
});

console.log(response.toJSON());

返回字段一览:

Step 3:处理大钱包的技巧

若钱包代币过多,建议:

  1. 分页 offset + limit
  2. 使用 cursor 实现流式读取
  3. 结果 异步写入缓存数据库(Redis / PostgreSQL)供后续分析

常见问题 FAQ

Q1:如果查询的地址持有 1,000+ 种代币,会不会超时?
A:三种服务均支持 limit + cursor 分页,确保大钱包亦可稳定拉取,建议每页 100–500 条、接口异步并行。

Q2:免费额度用完了怎么办?
A:Chainbase 赠送 100K 调用/天;Alchemy 与 Moralis 提升档按“即用即付”计费,在非敏感产品环境中以 链上缓存+本地索引 降本 70% 以上。

Q3:代币元数据返回为 null,是 Bug 吗?
A:可能原因:合约非标准 ERC-20、尚未被服务收录、或代币已自毁。可结合 contract_address 直接查询 Etherscan ABI 进一步校检。

Q4:Polygon、BSC 等多链怎么办?
A:上述三服务均提供多链网络参数,如 Chainbase 传 chain_id=56 即 BSC;Alchemy SDK 选 Network.MATIC_MAINNET;Moralis 把 chain 换为 0x89(Polygon)即可。

Q5:想实时监听转账后余额变化,有开源方案吗?
A:可部署 Alchemy Notify 或自托管 Subgraphs,搭配 WebSocket 订阅 Transfer 事件,实现秒级同步到本地数据库。


小结与行动清单

无论你用哪家服务,牢记三步:注册密钥 → 构造地址参数 → 解析输出。把流程封装成独立模块,即可随时复用于资产审计、空投快照、税务报表等多种业务。

👉 点击抢先体验零代码资产快照,一键输出 JSON/SQL 报表。