The Blockchain- Dapps Daily — 19th June -2022 — Solana

Solana NFT 開發跟Ethereum 不一樣, 有著不同的概念與步驟. 現今應該都是跟著Metaplex 為標準建立 NFT. 為了使用 metaplex 創建 NFT,我們將遵循以下步驟:

  1. 可選:為上傳付費
  2. 創建一個代幣鑄幣廠 (Token Mint)
  3. 可選:創建代幣關聯賬戶(Token Associated Account) — 這是一種特殊類型的賬戶,允許您接收鑄幣廠製作的一個或多個代幣。
  4. 創建代幣元數據帳戶(Token Metadata Account)
  5. 上傳文件
  6. 鑄造一個Token
  7. 創建Master Edition

source : https://docs.metaplex.com/architecture/basic_flow

Token mint

代幣鑄幣廠是您製作代幣的方式,供應量為 1 的鑄幣廠只允許您製作一個代幣。 當我們製作鑄幣廠時,我們實際上並不是在製作代幣,而是一個可以製作代幣的容器。 在 Solana 中,賬戶就像數據的容器,就像一個文件。 要創建鑄幣廠,您需要在 Solana 中創建一個“持有”鑄幣廠的帳戶。

A Token Metadata Account

到目前為止,我們已經完成的步驟被表示為 Solana 網絡上的一項交易。 這些被稱為指令(instructions),這是我們進入網絡之前的最後一組指令。 這一步是 Metaplex 的主幹。 這允許我們使用 Token 存儲附加信息。 執行這些指令集需要很多變量,讓我們來看看它們。 在前端,uris 是空白的,然後在實際上傳到 ARWEAVE 成功後更新。

  1. 數據 — 這是符合令牌元數據標準的數據塊。
  2. 你的公鑰
  3. 元數據程序派生帳戶地址 — 在此處閱讀有關 PDA 的更多信息。 這是帳戶將存儲在的未初始化地址。 我們這樣做是為了將來可以確定性地再次找到該地址。
  4. 鑄幣廠帳戶公鑰

讓我們深入了解 CreateAccountMetadata 程序及其作用。

這增加了我們不斷增長的圖表以完成事務 1。

所有這些指令都捆綁到一個事務中,並通過 RPC 發送到 Solana 網絡。 在此交易結束時,您已完成第 1–4 步,您從網絡返回的交易 ID 將在下一步中為您提供幫助。

上傳文件

如果您使用的是前端,則在上述事務成功後,您將獲得一個 Transaction ID。 然後,此 ID 將用作 Web2 上傳系統的憑據。 該系統檢查Transaction ID、鑄幣廠密鑰和文件的有效性和大小。 然後它將它們上傳到 arweave,並從您轉移到特殊上傳錢包的 SOL 中完成支付 arweave。

Mint One Token

最後,mint 我們現在將從 MintTo 指令開始構建第二個事務。 MintTo 需要傳遞一些數據才能運行,它需要以下內容:

  1. 鑄幣廠地址 — 這是我們為存儲鑄幣廠而創建的帳戶的公鑰。
  2. 目的地址 — 這是我們用來存儲 Token MetaData 的那個 PDA(Program Derived Address),現在它是 Token Metadata Account 的地址或公鑰。
  3. 您的公鑰 — 由於您是鑄幣局或鑄幣廠所有者,因此您可以鑄幣。
  4. 金額,在本例中為 1

我們將從交易圖重新開始。

Create Master Edition

在 Metaplex 中,您可以製作真正獨一無二的 NFT,但您也可以使用 MasterEdition 構造創建主版的打印,就像一幅畫一樣。 您現在想要將此令牌帳戶標記為 MasterEdition NFT,其限量供應 10 份可能的限量版印刷品。 請記住,元數據的重點是標記mints— — 而不僅僅是 NFT。 為此,您調用令牌元數據程序上的 create_master_edition 端點。 這樣一來,您的鑄幣權就會被剝奪,它會創建一個新的 Master Edition PDA,其中包含有關您想要擁有多少供應量的信息。

讓我們深入了解這個程序。

當您現在想要鑄造版本時,您需要提供一個包含此大師版鑄幣廠代幣的代幣帳戶,作為所有權和授權的證明。 這就是為什麼我們稍後會將這個代幣交給拍賣經理,以便它可以為獲勝者打印版本!

現在讓我們看一下我們的事務圖。

上述指令將捆綁為一條指令並發送到 Solana 網絡。 一旦成功,您的代幣帳戶中就有一個真正的 NFT 大師版,我們可以進行拍賣,拍賣限量版印刷品! 假設我們要拍賣三幅這樣的版畫。

The Auction

  1. 接下來,我們使用令牌庫合約的 init_vault 端點創建一個令牌庫。我們將通過使用 add_token_to_inactive_vault 端點將其添加到保管庫中來存儲我們的主版本令牌。這將在包含令牌的保險庫中創建一個保險箱。
  2. 然後我們將調用activate_vault 命令來激活(Activates )保險庫,鎖定裡面的所有東西。
  3. 我們現在使用 combine_vault 組合保險庫,也就是說,我們“打開它”,因此當前權限可以根據需要撤回其中的令牌。拍賣管理器只能在這種狀態下使用保險庫,這就是為什麼我們必須經歷激活階段才能到達這裡,即使它看起來有點荒謬。有關為什麼存在這些不同狀態的更多顏色,請參閱深度指南。
  4. 接下來,我們創建拍賣,我們說它的資源是這個保險庫。拍賣尚未開始,但它擁有正確的資源(金庫)。我們通過拍賣合約上的 create_auction 命令執行此操作。
  5. 現在我們有了拍賣和保險庫,我們可以去調用 Metaplex 合約上的 init_auction_manager 端點,使用這兩個帳戶以及其他幾個帳戶來創建一個 AuctionManager,將它們聯繫在一起。請注意,init_auction_manager 採用一個名為 AuctionManagerSettings 的特殊結構,它允許指定有多少中獎者以及哪些中獎者從哪個保險箱中獲得哪些物品。此時,我們還不能開始拍賣。 AuctionManager 處於無效狀態,我們需要對其進行驗證。當我們向 AuctionManager 提供其設置結構時,我們通過驗證我們在保險庫中提供給它的保險箱實際上具有我們所說的內容來做到這一點。
  6. 在我們開始驗證之前,我們在保險庫和拍賣上調用 set_authority 以將其權限更改為拍賣管理器,以便它可以控制這兩個結構。這是驗證階段和合同生命週期的其餘部分的要求。現在您不再可以控制您的物品。
  7. 我們調用 Metaplex 合約上的 validate_safety_deposit_box 端點和保險庫中的一個保險箱,並且該端點中的邏輯檢查該盒子中是否有來自正確鑄幣廠的 3 個打印令牌,與我們承諾的 3 個打印令牌匹配在我們的 AuctionManagerSettings 中有。一旦我們這樣做了,並且因為這是保險庫中唯一的保險箱,現在 AuctionManager 已經過驗證。
  8. 我們現在在 Metaplex 合約上調用 start_auction,因為 AuctionManager 對 Auction 具有權限,所以在 Auction 合約上調用 start_auction,拍賣開始!
  9. 用戶可以在拍賣合約上調用 place_bid 進行投標。當他們這樣做時,拍賣使用的 token_mint 類型的代幣將從他們提供的賬戶中取出,綁定到他們的主錢包,並存儲在拍賣合同中的投標人罐賬戶中。
  10. 為了更新出價,用戶必須首先取消原始出價,然後下新出價。
  11. 拍賣結束後,如果用戶沒有中標,則可以通過再次調用 cancel_bid 來退還他們的出價。拍賣的獲勝者不能取消他們的出價。
  12. 投標的獲勝者創建一個小數點為 0 的鑄幣廠,一個包含 1 個代幣的代幣帳戶,並在 Metaplex 合約上調用redeem_printing_v2_bid 端點,所有這些都在一次交易中完成。這個代幣現在正式成為“Bob’s Cool NFT”大師版 NFT 的限量版!
  13. 您,拍賣師,訪問 /#/auction/id/billing 並點擊結算按鈕。這首先遍歷所有三個投標人,並且對於使用的每個錢包,調用 Metaplex 合約上的 claim_bid,該合約代理調用 Auction 合約上的 claim_bid,告訴它將獲勝者的付款轉儲到 AuctionManager 結構上名為 accept_payment 的託管賬戶中。它與拍賣具有相同的令牌類型。一旦收集了所有付款,前端就會調用一次 empty_payment_account 端點(因為您是正在出售的元數據的唯一創建者),並且此託管中的資金將支付給提供的相同類型的令牌帳戶你。

請注意,我們的前端參考實現使用 SOL 作為“令牌類型”。這有一些特殊的警告,即 SOL 並不是真正的“spl 令牌”。相反,它有一個名為“Wrapped SOL mint”的解決方法。這是一種特殊的鑄幣廠,經常用於臨時賬戶。這就是說,當我們出價時,我們實際上是做一個一次性系統賬戶,將您的出價金額+租金的Lampports轉給它,然後將其標記為包裝好的sol類型的spl-token賬戶,用它來放置出價,然後在一次交易中全部關閉。

然後,spl 代幣程序中的特殊機制使這個包裝好的 sol 代幣帳戶擁有許多帶有正確小數的代幣,這些代幣映射到您轉移給它的 SOL 數量。 我們對取消進行了類似的操作,我們創建了一個臨時打包的 sol 賬戶,將取消的投標資金轉入其中,然後關閉賬戶,在一次交易中將資金全部轉出。 這一切都是為了便於使用。 通過結算,當資金支付給藝術家時,我們實際上為他們創建了一個 WSOL 帳戶,他們必須通過下拉菜單手動關閉它。

該協議使用通用 spl 令牌運行,並且對 WSOL 沒有具體意見,但前端參考實現確實如此。 所以請注意!

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
胡家維 Hu Kenneth

胡家維 Hu Kenneth

撰寫任何事情,O型水瓶混魔羯,咖啡愛好者,Full stack/blockchain Web3 developer,Founder of Blockchain&Dapps meetup ,Udemy teacher。 LinkedIn: hukenneth , TG:kennethhutw