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

能否直接从以太坊链上获取ERC20代币的流通供应量?

直接从链上获取ERC20代币流通供应量的方法

ERC20标准本身并未定义circulatingSupply()(流通供应量)方法,仅强制要求实现totalSupply()(总供应量)方法。流通供应量本质是总供应量减去被锁定、销毁或无法进入市场流通的代币数量,需根据具体代币的规则自行计算,以下是可行的实现步骤:

1. 获取总供应量

直接调用ERC20合约的totalSupply()方法,即可获取链上记录的代币总发行量。以下是用ethers.js实现的示例:

const { ethers } = require("ethers");

// 连接以太坊节点(本地节点或公共节点均可,如Infura)
const provider = new ethers.providers.JsonRpcProvider("https://mainnet.infura.io/v3/your-project-id");

// 目标ERC20合约地址与极简ABI(仅包含所需方法)
const tokenAddress = "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; // USDT示例
const tokenAbi = [
  "function totalSupply() view returns (uint256)",
  "function balanceOf(address account) view returns (uint256)"
];

const tokenContract = new ethers.Contract(tokenAddress, tokenAbi, provider);

// 获取总供应量并转换为代币小数位(如USDT为6位小数)
async function fetchTotalSupply() {
  const rawSupply = await tokenContract.totalSupply();
  return ethers.utils.formatUnits(rawSupply, 6);
}

2. 统计不可流通代币数量

需要识别并计算所有无法参与市场流通的代币,常见场景包括:

  • 黑洞销毁地址:如0x000000000000000000000000000000000000dEaD这类无私钥的地址,调用balanceOf()获取其代币余额。
  • 团队锁仓地址:项目通常会公开锁仓地址,直接查询这些地址的余额。
  • 流动性池锁定:若代币在DEX流动性池中且LP代币被锁定,需计算池内对应代币数量(是否扣除需参照项目流通量定义)。
  • 国库/多签地址:若项目明确说明国库代币暂不流通,需扣除该部分余额。

3. 计算流通供应量

通过总供应量减去所有不可流通地址的余额之和,得到最终流通供应量:

async function fetchCirculatingSupply() {
  const totalSupply = await tokenContract.totalSupply();
  
  // 示例:USDT的销毁地址(需根据目标代币调整)
  const burnAddress = "0x0000000000000000000000000000000000000000";
  const burnBalance = await tokenContract.balanceOf(burnAddress);
  
  // 其他锁仓地址列表(需根据项目公开信息补充)
  const lockedAddresses = ["0xabc123...", "0xdef456..."];
  let totalLocked = burnBalance;
  
  // 累加所有锁仓地址的余额
  for (const addr of lockedAddresses) {
    const lockedBalance = await tokenContract.balanceOf(addr);
    totalLocked = totalLocked.add(lockedBalance);
  }
  
  // 计算并转换为可读格式
  const circulatingRaw = totalSupply.sub(totalLocked);
  return ethers.utils.formatUnits(circulatingRaw, 6);
}

关键注意事项

  • 不同代币的流通量计算规则差异极大,必须先确认项目官方公布的逻辑,避免错误扣除或遗漏。
  • 部分合规代币会额外实现circulatingSupply()方法,可直接调用该方法获取准确值,无需自行计算。
  • 必须连接以太坊主网节点获取数据,确保完全不依赖第三方API,仅从链上直接读取。

内容的提问来源于stack exchange,提问作者Minato Nakamura

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:18:26