Metaplex 是建立在 Solana 上的一套 NFT 标准和工具,提供了包括 NFT 铸造、空投以及市场功能的全面解决方案。文章详细介绍了 Metaplex 生态系统中的各种智能合约和工具,例如 Token Metadata、Auction、Candy Machine 和 Gumdrop,并提供了如何使用这些工具的指导。此内容对于希望在 Solana 上构建 NFT 项目的开发者十分有用。
Metaplex 是一个为 Solana 提供的 NFT 标准和工具的集合。了解如何使用 Metaplex 进行 Solana NFT 铸造、NFT 空投、NFT 店铺等操作!
Metaplex 是建立在 Solana 上的一组合约网络,旨在增强区块链上的 NFT 社区。生态系统包含四个合约:Token Metadata、Token Vault、Auction 和 Metaplex。虽然 Metaplex 这个术语通常指合约生态系统,但在本文概述中,我们将用它来指 Metaplex 合约(四个合约之一)。
Metaplex 生态系统开启了一种全新的与 Solana NFT 交互的方式,因此它已成为 Solana 上事实上的 NFT 工具。通过 Metaplex,用户可以铸造 NFT、主办主要/次要销售的拍卖,并以标准化方式可视化 NFT。
Metaplex 生态系统由四个独立的合约组成,这些合约通过 Metaplex 合约通信,以便为 Solana 开发者提供创建 NFT 所需的工具。
被称为“铸造修饰器”,该合约使 NFT 创建者能够将 Metadata PDA(Program Derived Address)附加到他们的铸造中。这个关联的 PDA 包含 NFT 收藏的基本信息,例如名称、符号、版税费用和销售状态。
顾名思义,Token Vault 合约可以存放任何铸造的 NFT,并支持该 Vault 及其 NFT 的分数所有权。
Vault 有两种状态:已激活和已合并。
在“ 已激活”状态下,Vault 中的任何 NFT 都是锁定且无法访问的。Vault 的所有者可以在 Vault 上发行和销售国库股份,从而创建任何 NFT 的分数所有权。
Vault 只能在没有未偿还的股份流通的情况下转变为“ 已合并”,即 Vault 的所有者拥有所有股份。为了重新夺回 Vault 中的 NFT,Vault 的所有者必须在市场上回购所有的分数股份,然后才能“合并”Vault。
Auction 合约作为 Metaplex 上的拍卖机制,支持 英式拍卖 和 开放版本拍卖 格式的 NFT 拍卖。
作为一个简单的竞标出售程序,Auction 在没有任何关于 NFT 或 Metaplex 生态系统内其他资源知识的情况下运行。这种分离极大减少了故障点,并增强了 Auction 程序的灵活性。
Metaplex 合约提供了 AuctionManagers,管理上面列出的三个主要合约。AuctionManager 保留所有代币元数据及其相应拍卖的记录,并实现 Token Metadata、Token Vault 和 Auction 合约之间的平滑数据过渡。
以下是 Metaplex 最重要的功能,包括它们的用途、使用时机、重要性以及如何开始构建这些功能!
Metaplex 店铺是一个集成所有功能的 NFT 市场,用户可以通过 Metaplex 合约创建和销售 NFT。与 中心化 Solana NFT 市场(如 Magic Eden)不同,任何人都可以创建并以白标解决方案自行托管该店铺,或者使用现有的品牌店铺。
Metaplex 店铺独特的自我托管特性使用户能够充分享受 Solana 上的去中心化好处,因为他们可以创建自己的 NFT 市场。
以下是创建一个店铺的简要概述,详细步骤可参见 Metaplex 的原始文档。
首先,你需要在 GitHub 上克隆并启动 Metaplex 店铺源代码。
git clone https://github.com/metaplex-foundation/metaplex.gitcd metaplex/js && yarn install && yarn bootstrapyarn start
接下来,访问 http://localhost:3000/ 并将 Solana 网络切换到 Devnet。
如果你不熟悉 Solana 测试网络,可以阅读我们的 使用 Solana 的 devnet 完整指南。
然后,通过点击“Init Store”并批准交易来初始化店铺。
Metaplex 主页
在 Store 配置部分,复制代码并粘贴到位于 js/package/web 的 .env 文件中。
现在,使用 yarn start
重新启动网站。
从 localhost:3000 查看店铺
你现在拥有一个与你的地址关联并由你托管的店铺!
通过店铺的默认 UI,你可以铸造 NFT 并将它们列出进行销售,既可以作为即刻的“立即购买”选项,也可以将它们列为拍卖。当你创建一个 NFT 时,你可以指定描述、版税和图像。
由于 Metaplex 的店铺 NFT 工具是开放源代码且可定制的,所以你可以更新分叉的 GitHub 代码来修改用户界面(UI),并添加新功能,如创建 NFT 的仓库或燃烧 NFT。
Candy Machine (CM) 是一个 链上生成性 NFT 分发程序,旨在简化买家、卖家和创作者的 NFT 体验。
Candy Machine v2 是第二版,增加并改进了许多功能。在 CM 之前,Solana 上没有通用程序来管理 NFT 的铸造和销售。这导致了无数错误和低效的用户体验,促使 Metaplex 开发团队创建了 Candy Machine。
Candy Machine 解决了 NFT 分发中的基本问题,以简化用户与 NFT 的交互:
定义精确的铸造时间段
仅在 NFT 可以铸造时接受买家资金
通过强制执行元数据类型帮助程序创建一致的 NFT
Candy Machine v2 添加了更多功能:
不可预测的铸造索引 - 防止买家在一个集合中抢购特定 NFT,因为 v1 是按顺序铸造
白名单 - 仅允许某些地址铸造
验证码 - 防止机器人铸造
此外,v2 现在支持更大的集合、隐藏和揭示的发放、允许 web3 开发者在任何时间更新他们的配置,以及暂停进行中的铸造。
由于 Candy Machine 是一个完全链上的 NFT 铸造程序,因此所有交互必须以编程方式进行,尽管有一些 UI 可以自动化某些特性,用户仍然需要具备基本的编程经验才能充分利用 Candy Machine。要开始使用 CM v2,请参考 Metaplex 的官方文档。
Gumdrop 是一个新的测试版 Solana 空投工具,费用低廉。它由 Metaplex 社区开发,通过向大量用户发送链下赎回链接(如通过社交媒体),Gumdrop 以低成本实现对大规模用户的空投。它为项目提供了一种简单的解决方案来以低成本分发与 Metaplex 集成的代币。
与传统空投框架不同,用户在其中的代币会自动出现在他们的 Solana 钱包中,Gumdrop 使用“基于拉取”的范式,要求用户主动声明他们的代币,否则就会失去它们。Gumdrop 使用默克尔树来检查用户是否在白名单中,这使得在链上进行快速计算成为可能。
Gumdrop 支持多种类型的代币发放:
代币空投
Candy Machine 预售
版本印刷
在所有情况下,发放将从白名单用户构建一个默克尔树,并以链下的方式分发声明链接。
你可以以编程方式使用 Gumdrop,或者通过一个带有 引导的 Solana 空投 UI 获得交互式体验。对于编程步骤,请参考官方文档。若使用图形用户界面(UI),可按照以下说明:
Gumdrop
你可以采取三项操作:
创建
声明
关闭
在 创建 页面,指定声明方法(空投类型)。
空投类型
接下来,选择一种链下分发方法。
链下分发方法
根据选择,你需要填写其他输入,包括铸造地址,以完成创建。
在 声明 页面,用户可以启动他们的空投声明,该声明通过 Solana 空投白名单的默克尔树进行验证。
空投声明启动
在 关闭 页面,创建者可以通过提供私钥和铸造地址删除一个 Gumdrop 空投。
关闭后,用户将无法声明空投的代币。
删除空投
AuctionHouse 是一个 链上无托管的 NFT 销售程序,允许创作者和铸造者无缝地拍卖和销售 NFT。AuctionHouse 是一个独立的概念,不同于自托管的前端店铺网站 — 它是一个部署在链上的程序,接受 SOL 和任何 SPL 代币。通过使用 AuctionHouse,开发者可以省略编写自己 NFT 销售程序的复杂性和错误。
任何 Solana NFT 市场都可以实施 AuctionHouse 协议,以受益于其功能,例如自动匹配 NFT 上市的买家和卖家。
与其他常见的拍卖过程不同,买家无需“声明” NFT,销售交易自动执行所有必要的交互。换句话说,AuctionHouse 唯一化了所有不必要的步骤,将其简化为最终用户直观的操作,同时为开发者提供标准化的程序。
AuctionHouse 具有多种可配置的参数。例如,卖家可以为 Solana NFT 收藏创建部分售出订单,附加自定义费用和国库目标,并要求 AuctionHouse 对所有交易进行签名。AuctionHouse 还可以接受某些或所有的 SPL 代币。
AuctionHouse 还记录了所有 NFT 交易凭证的历史(例如上市、竞标和销售)。
当前,AuctionHouse 只提供一个用 TypeScript 编写的 CLI 库,尽管图形用户界面 GUI 实现即将上线。
首先,克隆包含 AuctionHouse 库的综合 Metaplex。
git clone https://github.com/metaplex-foundation/metaplex.gitcd metaplex
然后,在 metaplex 文件夹的 CLI (JS) 子文件夹中安装必要的包。
cd js && yarn install && yarn bootstrapcd packages/cli
最后,使用现有的密钥对创建一个 AuctionHouse。
ts-node src/auction-house-cli.ts create_auction_house --keypair /path/to/mywallet.key -e devnet -sfbp 1000 -ccsp false -rso false
成功交易后,你的命令行应显示以下消息。
wallet public key: Gsv13oph2i6nkJvNkVfuzkcbHWchz6viUtEg2vsxQMtMNo treasury withdrawal dest detected, using keypairNo fee withdrawal dest detected, using keypairNo treasury mint detected, using SOL.Created auction house HsKwc8dQtm8KLxshw67dwsNePkH6wMXo5Lwn1FuKjVYVS
注意:你的拍卖场合键将不同
有关更多 CLI 程序,请参考官方文档。
Sugar 是 Candy Machine v2 命令行的替代方案,具有更好的性能和简化的开发者步骤。它为 Solana NFT 开发者提供一个交互式过程,无需太多复杂性和烦恼就能部署 Candy Machine v2。
Sugar 提供了许多相对使用 CM v2 CLI 的优势,如文档中所述:
媒体/元数据文件上传的更好性能
利用 cargo 的简化构建和安装程序
强大的错误处理和输入验证
更具信息性的错误消息
首先,使用 cargo 安装 Sugar 库。
cargo install sugar-cli
接下来,使用所选的 Solana RPC 节点提供商 和你的密钥对来修改 Solana CLI 配置。
最后,启动互动会话以部署 Candy Machine。
sugar launch
Hydra 是一个钱包钱包,能够向极大的地址会员集合分配资金。它也被称为“Fanout Wallet”,因其像一个风扇一样从主钱包分散。Hydra 能够实现诸如代币化版税(即将收到的版税分配给成员)和代币会员(例如简化的质押奖励)等激动人心的功能。
来源:Hydra 文档
Hydra 钱包具有三个生命周期阶段:
创建
成员添加
分配
在创建阶段,你(被称为 Authority 的创作者)可以创建一个 Hydra 钱包。可以自定义的方面多种多样,如会员模型、名称、接受的代币(SOL 或任何 SPL 代币)和总股份。
由于其复杂的操作和要求,创建 Hydra 钱包将花费数百 SOL。
在成员添加阶段,你可以将一个帐户添加为 Hydra 钱包的成员。你可以添加一个普通钱包(用户)、一个 NFT 和代币,这涉及到更复杂的资金份额计算方式。
在分配阶段,Hydra 钱包会多次被调用,将会员资金分配给每位成员。根据他们的份额,每次分配调用必须包括接收成员,并且 Hydra 钱包在其生命周期内预计会多次调用。这种逐会员调用设计使得钱包在处理大量会员时保持较低的处理和内存成本。
let distributeToMember1 = await fanoutSdk.distributeWalletMemberInstructions( { distributeForMint: false, member: member1.publicKey, fanout: fanout, // 从初始化 payer: distributionBot.publicKey, },);
Hydra 是另一个可以在链上调用的程序进行互动。
Hydra 的程序 ID 为:
主网:hyDQ4Nz1eYyegS6JfenyKwKzYxRsCWCriYSAjtzP4Vg
开发网:hyDQ4Nz1eYyegS6JfenyKwKzYxRsCWCriYSAjtzP4Vg
官方文档包括最小的代码示例以供互动和创建 Hydra 钱包。你可以如以下方式创建一个钱包:
...const init = await fanoutSdk.initializeFanout({ totalShares: 100, name: `Test${Date.now()}`, membershipModel: MembershipModel.Wallet,});...
你也可以用非常少的代码为新成员(他们的地址)添加。以下是将一个钱包地址添加为成员的示例。
const member = new Keypair();const {membershipAccount} = await fanoutSdk.addMemberWallet({ fanout: init.fanout, fanoutNativeAccount: init.nativeAccount, membershipKey: member.publicKey, shares: 10});
Amman 是一个工具包,用于通过运行本地验证器测试 Solana SDK 库和应用程序。该工具包由 Metaplex 基金会开发,旨在提升开发者在进行高频更新和测试的项目中的体验。
尽管手续费低廉,但在主网上部署一个复杂的 Solana 程序可能会成本高昂。因此,为了快速部署和测试应用程序及 SDK 库,开发者可以选择使用 Solana devnet、testnet 或本地验证器。
由于测试网/devnet 需要持续的空投以及重复的部署与等待过程,因此本地验证器更适合快速、无需 WiFi 的部署与测试。
此外,在测试时运行本地验证器可以确保 100% 的正常运行时间,而测试网/devnet 在此过程中可能会下线。
Amman CLI 包包含 relay、validator interface 和 mock storage server,它们共同充当验证器。
Amman Client 包含 asserts、address labeling、transaction interface 和访问 relay 的客户端,所有这些都应在测试和浏览器中与本地验证器连接使用。
Amman GitHub 仓库 提供了优秀的运行 Amman 的指南。你需要克隆该仓库以开始使用 Amman。
要运行 Amman CLI,你需要创建一个配置文件。 Amman GitHub 仓库中给出了示例。
使用配置文件,你可以启动并稍后停止本地验证器,方法如下:
amman start ./path/to/config.jsamman stop
Amman Client 仓库提供了许多可用于测试脚本或网页浏览器的 TypeScript 文件。
被誉为 Metaplex 的“瑞士军刀”,Metaboss 提供了许多围绕 Metaplex 的功能,使开发者可以轻松地在生态系统内构建。
由于 Metaplex 是一个新的快速发展的系统,开发者实施了他们自己的功能以与 Metaplex 交互。Metaboss 在此过程中提供了一致、标准化的功能来支持生态系统。
Metaboss 提供的一些功能有:
解码Token铸造账户的元数据
从 JSON 文件中铸造新的 NFT
获取给定 Candy Machine ID 或更新权限的当前 NFT 持有者的快照
获取特定更新权限的所有糖果机器状态和配置账户的列表
更新 NFT 的所有元数据数据结构字段
首先,运行以下命令将 Metaboss 安装为你的 Solana 程序的一个包:
cargo install metaboss
现在你准备好使用 Metaboss 了!
官方文档中包含了许多示例。例如,你可以在一行命令中从 JSON 文件铸造一个新的 NFT。
首先,为 NFT 准备 JSON 文件 new_nft.json。
{ "name": "TestNFT2", "symbol": "TNFT", "uri": "https://arweave.net/FPGAv1XnyZidnqquOdEbSY6_ES735ckcDTdaAtI7GFw", "seller_fee_basis_points": 200,
"creators": [
{
"address": "AVdBTNhDqYgXGaaVkqiaUJ1Yqa61hMiFFaVRtqwzs5GZ",
"verified": false,
"share": 50
},
{ "address": "42NevAWA6A8m9prDvZRUYReQmhNC3NtSZQNFUppPJDRB",
"verified": false,
"share": 50 } ]}
然后,你可以使用以下命令创建任意数量的 NFT:
metaboss mint one -k ~/.config/solana/devnet.json -d ./new_nft.json
Alchemy 提供了支持构建的 Solana API ,是开发者立即开始构建的最强大免费方案。
想在 Alchemy 上部署你的 Metaplex NFT 项目吗? 注册一个免费的 Alchemy 账户 开始构建!
- 原文链接: alchemy.com/overviews/me...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!