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

如何为使用createInitializeTransferFeeConfigInstruction创建的Solana Token 2022添加元数据

为Solana Token Program 2022代币添加元数据

要给带TransferFeeConfig扩展的Token 2022代币添加名称、符号等元数据,需要使用SPL Token Metadata Program(Solana官方代币元数据标准)。以下是具体实现步骤和修改后的代码:

步骤说明

  1. 安装依赖:确保项目已安装@solana/spl-token-metadata包,用于处理元数据相关指令。
  2. 推导元数据账户地址:通过代币mint地址生成对应的元数据PDA(程序派生地址)。
  3. 计算元数据账户租金:获取元数据账户所需的最低免租金余额。
  4. 添加元数据账户创建指令:通过系统程序创建归属到Token Metadata Program的元数据账户。
  5. 添加元数据初始化指令:写入代币的名称、符号、URI等核心元数据信息。

修改后的完整代码

import { Connection, Transaction, sendAndConfirmTransaction, SystemProgram } from '@solana/web3.js';
import { ExtensionType, TOKEN_2022_PROGRAM_ID, getMintLen, createInitializeTransferFeeConfigInstruction, createInitializeMintInstruction } from '@solana/spl-token';
// 导入元数据相关工具
import { createCreateMetadataAccountV3Instruction, findMetadataPda, TOKEN_METADATA_PROGRAM_ID, getMetadataAccountSize } from '@solana/spl-token-metadata';

// 假设以下变量已提前定义:payer, mint, mintKeypair, transferFeeConfigAuthority, withdrawWithheldAuthority, feeBasisPoints, maxFee, decimals, mintAuthority, connection

// 1. 定义代币扩展并计算mint账户空间
const extensions = [ExtensionType.TransferFeeConfig];
const mintLen = getMintLen(extensions);
const mintLamports = await connection.getMinimumBalanceForRentExemption(mintLen);

// 2. 推导元数据账户地址并计算租金
const metadataAccount = findMetadataPda(mint);
const metadataAccountSize = getMetadataAccountSize();
const metadataLamports = await connection.getMinimumBalanceForRentExemption(metadataAccountSize);

// 3. 构建完整交易
const mintTransaction = new Transaction().add(
    // 创建mint账户
    SystemProgram.createAccount({
        fromPubkey: payer.publicKey,
        newAccountPubkey: mint,
        space: mintLen,
        lamports: mintLamports,
        programId: TOKEN_2022_PROGRAM_ID,
    }),
    // 初始化TransferFeeConfig扩展
    createInitializeTransferFeeConfigInstruction(
        mint,
        transferFeeConfigAuthority.publicKey,
        withdrawWithheldAuthority.publicKey,
        feeBasisPoints,
        maxFee,
        TOKEN_2022_PROGRAM_ID
    ),
    // 初始化mint核心参数
    createInitializeMintInstruction(mint, decimals, mintAuthority.publicKey, null, TOKEN_2022_PROGRAM_ID),
    // 创建元数据账户
    SystemProgram.createAccount({
        fromPubkey: payer.publicKey,
        newAccountPubkey: metadataAccount,
        space: metadataAccountSize,
        lamports: metadataLamports,
        programId: TOKEN_METADATA_PROGRAM_ID,
    }),
    // 写入代币元数据
    createCreateMetadataAccountV3Instruction(
        {
            metadata: metadataAccount,
            mint: mint,
            mintAuthority: mintAuthority.publicKey,
            payer: payer.publicKey,
            updateAuthority: mintAuthority.publicKey, // 通常设为mint权限持有者,支持后续修改元数据
        },
        {
            createMetadataAccountArgsV3: {
                data: {
                    name: "My Transfer Fee Token", // 代币全称,最长32字符
                    symbol: "MTFT", // 代币缩写,最长10字符
                    uri: "https://your-metadata-host.com/token-meta.json", // 指向含详细元数据的JSON文件
                    sellerFeeBasisPoints: 50, // 二次销售版税(千分比,50代表5%)
                    creators: null, // 可选:创作者数组,格式如[{address: pubkey, verified: true, share: 100}]
                    collection: null, // 可选:所属集合信息
                    uses: null, // 可选:代币用途限制
                },
                isMutable: true, // 是否允许后续修改元数据
                collectionDetails: null, // 可选:集合详情
            }
        }
    )
);

// 发送并确认交易
const newTokenTx = await sendAndConfirmTransaction(connection, mintTransaction, [payer, mintKeypair], undefined);
console.log("New Token Created:", generateExplorerTxUrl(newTokenTx));

关键细节解释

  • 元数据PDA:findMetadataPda(mint)是Solana元数据标准的固定规则,通过mint地址生成唯一绑定的元数据账户地址。
  • 元数据字段:createMetadataAccountArgsV3中的data字段定义代币核心信息:
    • uri指向的JSON文件可包含代币logo、详细描述、社交链接等扩展信息
    • sellerFeeBasisPoints设置二次销售的版税比例,收益会自动分配给创作者
  • 可变性控制:isMutable设为true后,可通过createUpdateMetadataAccountV2Instruction后续修改元数据内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 18:26:13