Solana链代币Coinmarketcap收录所需Total Supply API设置方法咨询
适配Coinmarketcap要求的Solana代币Total Supply API实现方案
Coinmarketcap对总供应接口的核心要求是仅返回纯数值文本,不允许返回JSON、HTML等带结构的内容,HTTP状态码为200,建议Content-Type设置为text/plain。你可以按照以下步骤实现:
第一步:确认总供应计算规则
首先明确你的SPL代币的总供应统计逻辑:如果是固定供应且无燃烧,直接取代币铸币地址的链上总发行量即可;如果存在燃烧机制,需要额外扣除转入死地址(通常为11111111111111111111111111111111)的代币余额,最终数值要和你项目公示的总供应规则完全一致。第二步:选择实现方案
两种常用的低成本实现方式可选:- 轻量后端服务实现
用Node.js、Python等语言写个简单的HTTP服务,核心逻辑是调用Solana RPC的getTokenSupply接口查询链上数据,处理完代币小数位后直接返回纯数值。以下是Node.js的极简示例代码:
const { Connection, PublicKey } = require('@solana/web3.js'); const express = require('express'); const app = express(); // 替换为你使用的Solana主网RPC节点地址 const SOLANA_RPC_URL = 'https://api.mainnet-beta.solana.com'; // 替换为你的代币铸币地址 const TOKEN_MINT = 'YOUR_TOKEN_MINT_ADDRESS'; // 替换为你的代币实际小数位 const TOKEN_DECIMALS = 6; const connection = new Connection(SOLANA_RPC_URL); app.get('/total-supply', async (req, res) => { try { const supplyResult = await connection.getTokenSupply(new PublicKey(TOKEN_MINT)); // 如需扣除燃烧量,可在此处增加查询死地址余额的逻辑,从总量中减去 const totalSupply = Number(supplyResult.value.amount) / Math.pow(10, TOKEN_DECIMALS); res.setHeader('Content-Type', 'text/plain'); // 直接返回纯数字,不要加任何多余字符 res.send(totalSupply.toString()); } catch (e) { res.status(500).send('query failed'); } }); app.listen(3000, () => { console.log('API service started'); });- Serverless函数实现
如果不想自己维护服务器,可以用Serverless函数部署,逻辑和上述代码完全一致,部署后即可获得公网可访问的接口地址。
- 轻量后端服务实现
第三步:上线前校验
部署完成后先自行访问接口验证:- 返回内容只有纯数字,没有引号、括号、键值对等多余内容
- 数值和Solana区块浏览器上查询到的总供应数值完全一致
- 接口响应速度快,无超时、跨域问题
注意:如果你的代币存在动态燃烧、增发等规则,禁止硬编码总供应数值,每次请求必须实时查询链上数据,避免Coinmarketcap审核不通过。
内容的提问来源于stack exchange,提问作者Deshaun Phillips
相关产品推荐
相关产品推荐

