在這個教程中,我們將學習如何編寫 Rust 智能合約并使用 Metaplex 在 Solana 上鑄造 NFT。

用熟悉的語言學習 Web3.0 開發 : JAVA | php | Python/ target=_blank class=infotextkey>Python | .NET / C# | Golang | Node.JS | Flutter / Dart
在 Solana 開發中,我們回面臨許多奇怪的自定義錯誤和錯誤,并且由于 Solana 開發生態系統沒有 Eth 開發生態系統那么大,因此修復它們 可能非常困難和令人沮喪。但不用擔心。當遇到困難時,只需在正確的地方尋找解決方案。
在我的開發過程中,我不斷地在Anchor discord 服務器、Metaplex和Superteam服務器上提出疑問,并查看 GitHub 上的其他代碼倉庫和 Metaplex 程序庫本身。
1、項目概況
在這個教程中,我們將使用的工具包括:
- Solana CLI 工具— 官方 Solana CLI 工具集
- Anchor Framework — 用于開發 Solana 程序的高級框架。這是必須的,除非你是大神級開發人員,不過在這種情況下你應該不會閱讀此博客。哈哈。
- Solana/web3.js — web3.js的 Solana 版本
- Solana/spl-token — 使用 spl 通證的包
- Mocha — 一個 JS 測試工具
2、準備工作
在命令行使用以下命令將你的網絡設置為 devnet:
|
|
要確認它是否有效,請在執行上述命令后檢查輸出:
|
|
接下來,請參考Solana wallet docs設置 文件系統錢包,并使用命令solana airdrop 1添加一些devnet的 sol通證。
最后,使用另一個anchor CLI終端 通過以下命令創建一個anchor項目:
|
|
確保Anchor.toml也設置為 devnet。
|
|
3、導入依賴項
在項目中,必須有一個名為程序的文件夾。轉到programs/<your-project-name>/Cargo.toml并添加這些依賴項。確保使用版本0.24.2, 可以使用avm來更改它:
|
|
由于安全漏洞,Anchor 已刪除 0.24.2 之前的所有版本,因此請確保使用該版本
然后轉到src 中的lib.rs文件并導入這些:
|
|
現在我們可以編寫 mint 函數了!
4、NFT賬戶結構實現
首先,讓我們mint為函數創建賬戶結構:
|
|
不要擔心未檢查的帳戶,因為我們會將其傳遞給 Metaplex 程序,它會為我們檢查。
為了在 Anchor 中使用 Unchecked 帳戶,我們需要在每個帳戶上方添加此注釋:
|
|
5、NFT合約Mint函數實現
讓我們創建一個函數,使用剛剛創建的結構來鑄造通證:
|
|
如果想調試你的程序,最好使用msg!()記錄想要檢查的任何值。它接受字符串,因此必須使用std::string::ToString來轉換。 你的日志將出現在終端或.anchor/program-logs/<program-id>

有幾點需要說明一下。
creator數組需要包含鑄造 NFT 的人,但你可以將份額設置為 0,所以這并不重要。這是代碼:
|
|
我還沒有實現集合,因為它不在本指南的范圍內,但你可以使用以下方法來實現:
|
|
為什么我在這里將 Max supply 設置為 0?在 Metaplex 中,如果是一種通證,那么你必須將其最大供應量設置為零,因為總供應量 - 聲稱的供應量 (1-1) 等于 0。
|
|
編寫函數后,運行anchor build && anchor deploy,應該會看到已部署的程序 ID

將此程序 ID 粘貼到Anchor.toml和lib.rs文件中,替換全部的默認ID即
Fg6PaFpoGXkYsidMpWTK6W2BeZ7FEfcYkg476zPFsLnS。
6、調用 Mint 函數
在做任何事情之前,請確保已導入@solana/web3.js和@solana/spl-token。 在tests/<test-file>.ts里面添加這些導入和常量:
|
|
現在讓我們制作通證和關聯的通證賬戶,如下面代碼所示:
|
|
注意:mint 和 freeze 權限必須相同,否則不起作用。
createInitializeMintInstruction( mintKey.publicKey, 0,
program.provider.wallet.publicKey,// mint auth
program.provider.wallet.publicKey // freeze auth
),
現在,調用 mint 函數并傳遞數據和帳戶:
|
|
好了!現在只需運行anchor test,就應該能夠鑄造你的 NFT:
|
|
如果提示任何帶有 0x1 等十六進制值的自定義程序錯誤,請將十六進制值轉換為純文本,然后前往metaplex github 并使用你的瀏覽器搜索“error(”
可以在這里查看 NFT:solscan
7、結束語
我希望本指南對所有 Solana 極客有用。當我第一次嘗試鑄造 NFT 時感到非常困難,希望這篇文章對你有所幫助。 可以從這里下載教程里的代碼。
原文鏈接:
http://blog.hubwiz.com/2022/08/03/mint-nft-on-solana/