2022年如何注册Solana Fungible Token?求现有代币注册示例
如何注册Solana Fungible Token(FT)
自2022年6月20日起,Solana代币列表规则已更新,要让代币被正确识别为可 Fungible Token(而非NFT),需完成创建合规SPL Token+绑定标准元数据两个核心步骤,以下是具体方案及修正后的代码示例:
问题排查
你遇到的问题原因如下:
- 第三方工具创建的代币被识别为NFT:这类工具默认创建的是供应量为1的SPL Token(即NFT),FT需要设置大于1的供应量及正确的小数位数(decimals)。
- Metaplex代码错误:
uri字段需为元数据JSON文件的URL字符串,而非直接嵌入JSON对象metadata参数应为元数据账户的PDA地址(需通过findMetadataPda生成),而非URL
正确注册流程
- 创建符合SPL Token标准的FT(设置合理的供应量与小数位数)
- 上传标准格式的元数据JSON到Arweave/IPFS
- 使用Metaplex的
mpl-token-metadata创建元数据账户 - (可选)提交至Solana官方代币列表
完整代码示例
依赖安装
npm install @solana/web3.js @metaplex-foundation/mpl-token-metadata @solana/spl-token
实现代码
import { Connection, Keypair, Transaction, sendAndConfirmTransaction } from '@solana/web3.js'; import { createCreateMetadataAccountV2Instruction, findMetadataPda } from '@metaplex-foundation/mpl-token-metadata'; import { createMint, mintTo, getOrCreateAssociatedTokenAccount } from '@solana/spl-token'; // 初始化连接(测试网替换为https://api.devnet.solana.com) const connection = new Connection('https://api.mainnet-beta.solana.com', 'confirmed'); // 替换为你的钱包密钥 const payer = Keypair.fromSecretKey(Uint8Array.from([/* 你的私钥数组 */])); // 1. 创建FT的Mint账户 const mintKeypair = Keypair.generate(); const decimals = 9; // 推荐与SOL保持一致,可按需调整 const mint = await createMint( connection, payer, payer.publicKey, // Mint权限账户 null, // 冻结权限(可选) decimals ); // 2. 铸造代币到关联账户(测试用,可跳过) const associatedTokenAccount = await getOrCreateAssociatedTokenAccount( connection, payer, mint, payer.publicKey ); // 铸造10亿枚代币(对应decimals=9,实际为10亿 * 10^9最小单位) await mintTo( connection, payer, mint, associatedTokenAccount.address, payer, 1_000_000_000 * Math.pow(10, decimals) ); // 3. 准备元数据JSON并上传(示例JSON如下,上传到Arweave/IPFS后获取URL) /* 上传的元数据JSON示例: { "name": "EUR demo-stablecoin", "symbol": "EURX", "description": "Fully for testing purposes only", "image": "https://raw.githubusercontent.com/.../logo.png", "attributes": [], "properties": { "files": [{"uri": "https://raw.githubusercontent.com/.../logo.png", "type": "image/png"}], "category": "currency" } } */ const metadataUri = "https://arweave.net/xxx..."; // 替换为你上传后的URL // 4. 创建元数据账户 const metadataPda = findMetadataPda(mint); const tokenMetadata = { name: 'EUR demo-stablecoin', symbol: 'EURX', uri: metadataUri, sellerFeeBasisPoints: 0, creators: null, collection: null, uses: null, }; const transaction = new Transaction().add( createCreateMetadataAccountV2Instruction( { metadata: metadataPda, mint: mint, mintAuthority: payer.publicKey, payer: payer.publicKey, updateAuthority: payer.publicKey, }, { createMetadataAccountArgsV2: { data: tokenMetadata, isMutable: true, }, } ) ); // 发送并确认交易 const signature = await sendAndConfirmTransaction( connection, transaction, [payer, mintKeypair] ); console.log("元数据账户创建完成,交易签名:", signature);
额外说明
- 元数据JSON的
properties.category需设为currency或token,确保钱包与区块浏览器正确识别为FT - 完成上述步骤后,Solscan会自动抓取元数据,若未立即显示,可等待1-2小时或检查元数据URL是否可访问
- 若要进入Solana官方代币列表,需在对应GitHub仓库提交PR,符合仓库的审核规范
内容的提问来源于stack exchange,提问作者Alexandr Kazakov
相关产品推荐
相关产品推荐

