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

如何通过web3获取MetaMask中已注册的代币与资产信息?

关于MetaMask资产列表获取的说明

MetaMask注入的window.ethereum标准提供者没有公开的原生API可以直接获取用户钱包内已注册的所有代币/资产列表,这个设计是出于用户隐私保护考虑:避免未授权的DApp直接获取用户全量资产信息,用于用户画像、定向钓鱼等恶意操作。

你可以根据你的实际需求选择对应的替代方案:

  • 若你需要获取当前链上用户地址的实际持仓数据,不需要依赖MetaMask接口,走链上查询即可:
    1. 先调用eth_requestAccounts获取用户授权的钱包地址
    2. 调用对应链RPC的eth_getBalance接口查询原生代币(如ETH、BNB)余额
    3. 对于ERC20等标准合约类代币,如果你已知代币合约地址,直接调用对应合约的balanceOf(用户地址)方法即可查询持仓
    4. 如果需要批量查询某地址下全量代币持仓,可以自行搭建链上索引服务,或使用公开的链上数据聚合接口完成查询
  • 若你需要判断用户MetaMask中是否已经添加了某指定代币,可以通过wallet_watchAsset方法间接判断:
    调用该方法触发代币添加流程时,如果目标代币已经在用户MetaMask的资产列表中,MetaMask会直接提示「资产已存在」,不会重复触发添加确认。调用示例如下:
    const isAssetExistedOrAdded = await window.ethereum.request({
      method: 'wallet_watchAsset',
      params: {
        type: 'ERC20',
        options: {
          address: '0x代币合约地址',
          symbol: '代币符号',
          decimals: 18,
          image: 'https://代币图标链接地址'
        }
      }
    })
    
    若返回值为true,则证明该代币已存在于用户资产列表,或用户已完成新代币添加确认。

内容的提问来源于stack exchange,提问作者Ajay Amal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:39:03