能否直接从以太坊链上获取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
相关产品推荐
相关产品推荐

