Solana程序 第3部分:理解Metaplex Token Metadata

  • Sec3dev
  • 发布于 2022-05-24 20:15
  • 阅读 35

本文深入探讨了Solana的Metaplex Token Metadata程序,详细阐述了如何创建NFT,包括上传艺术作品、创建唯一的Token Mint和铸造Token的步骤。文章介绍了多个关键功能和实现细节,适合开发者学习NFT技术的具体实现方式。

metaplex-token-metadata 程序是 Solana 上 NFT 的支柱。

想象一下你想为你的艺术作品创建一个 NFT,你基本上需要:

  1. 将你的艺术作品(数字化)上传到永久存储
  2. 在 Solana 上为你的艺术创建一个 token mint(即,唯一标识符)
  3. 铸造一个由你的钱包拥有的代币

在第 2 步中,token mint 是特别的——它的供应量只有一个,必须与你的艺术信息(例如,名称、创作者、位置等)相关联。

Metaplex 创建了一个 用于此类“元数据”的规范,这些元数据可以通过 token-metadata 程序添加到每个(特殊的)token mint。

在本文章中,我们详细阐述 token-metadata 的实现细节。

在 Metaplex 创建的 NFT

如何通过 Token Metadata 铸造 NFT?

token-metadata 程序有相当多的指令(总共超过 20 个)。以下四个是最常用的:

  • MetadataInstruction::CreateMetadataAccountV2
  • MetadataInstruction::CreateMasterEditionV3
  • MetadataInstruction::MintNewEditionFromMasterEditionViaToken
  • MetadataInstruction::UpdateMetadataAccountV2

token-metadata 程序的交易日志

1. CreateMetadataAccountV2

首先,通过调用函数 process_create_metadata_accounts_v2 创建元数据账户:

注意:每个元数据账户都是一个 PDA,token mint(mint_info)是 seeds 的一部分:

铸造权限(mint_authority_info)必须是签名者。

Metadata 结构有十个字段:

该函数基本上初始化每个字段,例如,metadata.mint、metadata.update_authority 和 metadata.data:

metadata.data 记录 NFT 的属性(例如,名称、uri 和创作者):

此元数据账户将作为 NFT 的 master_metadata

2. CreateMasterEditionV3

然后,创建 NFT 的主版本账户,以便你可以使用它来打印多版(例如,限量供应 10)你的 NFT。

该函数 process_create_master_edition 用于为给定的 max_supply 创建一个 token mint 的主版本账户(edition_account_info):

注意1:每个主版本账户都是一个 PDA,token mint(mint_info)是 seeds 的一部分:

注意2:该函数只能由 token metadata 的 update_authority 为一个 token mint 调用一次,并且仅当 mint 的供应量为一时:

MasterEdition 记录有三个字段:

pub struct MasterEditionV2 {
pub key: Key,
pub supply: u64,
pub max_supply: Option,}

该函数基本上初始化这些字段:

最后,它将 token mint 的权限(AuthorityType::MintTokens 和 AuthorityType::FreezeAccount)转移到主版本账户:

之后,其他 token mints 可能成为该元数据的版本,代表 NFT 的限量版。

3. MintNewEditionFromMasterEditionViaToken

函数 process_mint_new_edition_from_master_edition_via_token 用于从主版本铸造 NFT 的新版本:

调用者提供一个 新 mint 账户和一个 版本编号,并且必须是 该 master_metadata.mint 的 token 账户的签名者(即,NFT 的拥有者):

该函数将使用版本编号和 NFT 的 mint(master_metadata.mint)创建一个新的 edition_marker PDA,作为 seeds 的一部分:

然后,调用 mint_limited_edition 函数以铸造新版本:

在 mint_limited_edition 中,将根据新的 mint 账户(mint_info)创建一个 新元数据 账户

新的 mint 必须不同于 master_metadata.mint,并且其供应量必须为一:

新的 mint 账户也是创建新版本 PDA 的 seeds 的一部分:

最后,类似于 CreateMasterEditionV3,设置 新 mint 账户的权限(AuthorityType::MintTokens 和 AuthorityType::FreezeAccount)为新版本账户:

4. UpdateMetadataAccountV2

函数 process_update_metadata_accounts_v2 可以由元数据的 update_authority 在任何时间用于更新元数据:

要更新 metadata.data 记录,metadata.is_mutable 必须为 true:

元数据的 update_authority 也可以更新,以及 metadata.primary_sale_happened:

其他 Token Metadata 指令

token-metadata 程序还有其他几个功能,比如验证 NFT 创作者( 查看完整代码):

MetadataInstruction::SignMetadata => {
    msg!(“指令:签名元数据”);
    process_sign_metadata(program_id, accounts)}
MetadataInstruction::RemoveCreatorVerification => {
    msg!("指令:移除创作者验证");
    process_remove_creator_verification(program_id, accounts)}

在接下来的几篇文章中,我们将继续强调一些其他流行 Solana 程序的技术细节。

  • 原文链接: sec3.dev/blog/solana-pro...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Sec3dev
Sec3dev
https://www.sec3.dev/