You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Web3.js和Node.js获取钱包地址的全币种余额

基于Node.js + Web3.js 获取钱包地址代币信息的通用流程

1. 先搭好开发环境

  • 初始化Node.js项目:终端执行 npm init -y 生成package.json
  • 安装依赖:核心用Web3.js做链上交互,再加dotenv管理配置(比如RPC地址),执行 npm install web3 dotenv
  • 准备RPC节点地址:找以太坊公开节点(比如Infura、Alchemy的免费节点)或自建节点,把地址存在.env文件里方便调用

2. 查原生ETH余额的步骤

ETH是链上原生资产,直接用Web3内置方法即可查询:

  • 实例化Web3对象:传入RPC地址,比如 const web3 = new Web3('你的RPC地址')
  • 调用web3.eth.getBalance(钱包地址),返回值为Wei单位的余额(1ETH=1e18Wei)
  • 用web3.utils.fromWei(余额, 'ether')将Wei转换为ETH单位,得到可读数值
  • 注意:所有链上操作都是异步的,必须用async/await或.then()处理,不能同步取值

3. 查ERC-20代币余额的核心逻辑

合规ERC-20代币遵循统一标准,核心调用合约的balanceOf和decimals两个方法:

  • 先获取目标代币的合约地址(比如USDT合约地址是0xdAC17F958D2ee523a2206206994597C13D831ec7)
  • 准备极简ABI:无需全合约ABI,仅保留两个关键方法的片段即可:
    [
      { "constant":true, "inputs":[{"name":"_owner","type":"address"}], "name":"balanceOf", "outputs":[{"name":"","type":"uint256"}], "type":"function" },
      { "constant":true, "inputs":[], "name":"decimals", "outputs":[{"name":"","type":"uint8"}], "type":"function" }
    ]
    
  • 实例化合约对象:const tokenContract = new web3.eth.Contract(abi, 代币合约地址)
  • 调用tokenContract.methods.balanceOf(钱包地址).call(),返回代币最小单位的余额(比如USDT为6位小数,返回对应整数)
  • 调用tokenContract.methods.decimals().call()获取小数位数,将余额除以10^小数位数,转换为可读的代币数量

4. 批量查询多个ERC-20代币的优化

若要查询USDT、USDC等多个代币,避免串行查询降低效率:

  • 先整理常用代币配置列表:
    const tokens = [
      { name: 'USDT', symbol: 'USDT', address: '0xdAC17F958D2ee523a2206206994597C13D831ec7' },
      { name: 'USDC', symbol: 'USDC', address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' }
    ]
    
  • 用Promise.all()并行调用所有代币的余额和小数位数查询:
    const tokenBalances = await Promise.all(tokens.map(async (token) => {
      const contract = new web3.eth.Contract(abi, token.address)
      const balance = await contract.methods.balanceOf(walletAddress).call()
      const decimals = await contract.methods.decimals().call()
      return {
        ...token,
        balance: (balance / (10 ** decimals)).toString(),
        decimals
      }
    }))
    
  • 最后将结果整理为结构化数据即可

5. 整合流程与错误处理

  • 将ETH查询和ERC-20查询封装为统一函数,比如getWalletAssets(walletAddress),方便调用
  • 增加输入验证:用web3.utils.isAddress(walletAddress)检查地址格式,格式错误直接返回提示
  • 捕获异常:处理RPC连接失败、合约调用失败(如地址无效、代币不合规)等情况,返回明确错误信息

重点提醒

  • 免费RPC节点有请求次数限制,高频查询建议使用付费节点或自建节点
  • 链上所有数值均为整数,必须转换为对应单位后再展示,避免显示超长数字
  • 所有链上操作均为异步,禁止使用同步写法,避免逻辑异常

内容的提问来源于stack exchange,提问作者Volodymyr Nabok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 12:05:36