撰寫:Billy Rennekamp

原文鏈接:

https://blog.cosmos.network/application-specific-nfts-on-cosmos-8d8a450ec740

在 Cosmos 中的 NFT 模塊

直接瞭解 NFT 非同質化通證規範:

https://github.com/cosmos/cosmos-sdk/tree/master/docs/spec/nft

瞭解 NFT 非同質化通證代碼:

https://github.com/cosmos/cosmos-sdk/tree/master/x/nft

使用該模塊開發的應用程序案例:

https://github.com/okwme/cosmos-nft

注意:這是測試版軟件,並沒有做好生產環境的準備。該模塊還需要提高性能 , 歡迎大家開源貢獻。

應用專有鏈

應用程序需要自己的區塊鏈的原因或許有很多,但大多數情況下,歸根結底都是主權問題。每個應用程序都有自己的特點和要求 -比如 速度,安全性,成本或隱私。在以太坊,EOS 和 Polkadot 這樣的區塊鏈上,即使應用程序之間相互衝突,他們也需要共享資源。當衝突變得有爭議時,就會發生分叉。例如,在以太坊中,當有一個應用程序(The DAO:https://en.wikipedia.org/wiki/The_DAO_(organization))遭到攻擊時,社區通常無法達成一致並做出反應。如果 The DAO 擁有屬於自己的區塊鏈,它將可以決定自己的命運。 而不是像堅持“代碼即法律”的以太坊支持者分叉出來以太坊經典 ETC- 從技術上來說是 ETH 是由 ETC 分叉出來的 …… 但那是很久以前的事情了📜

應用專有鏈當然有自身的挑戰。 例如,由於沒有直接訪問其他應用程序的狀態,會丟失一定程度的可組合性。 相反,特定應用的區塊鏈可能使用跨鏈通訊協議(IBC)發送消息,並且依賴輕客戶端證明驗證信息來完成區塊鏈之間的查詢(Cosmos 是一個區塊鏈,將作爲 hub 來給 IBC 定製路線)。 本文並不是討論是否應用專有鏈適合你。 相反,假設一個應用程序有自己的區塊鏈,那麼其中的 NFT 非同質化通證可能是什麼樣子呢?

NFT 非同質化通證

NFT 非同質化通證(Sunny Aggarwal 也稱之爲非同質化物品)本質上是庫存清單。有些人認爲這個概念源於加密朋克 (https://www.larvalabs.com/cryptopunks) 或早期版本的 Clovers Network (https://clovers.network),但這個概念其實源於 CryptoKitties (https://www.cryptokitties.co/),它建立了第一個名爲 ERC-721 (http://eips.ethereum.org/EIPS/eip-721) 標準。NFT 非同質化通證被廣泛使用,從遊戲 (https://dappradar.com/rankings/protocol/ethereum/category/games) 和藝術作品 (https://opensea.io/assets/tokensequaltext) 到發票和域名 (https://opensea.io/assets/ens),因爲對標準的規定毫無意義, 這就是爲什麼它的用途這麼廣泛。NFT 非同質化通證核心只注重唯一的身份號碼和通證的來源 (這使它們基本上等同於庫存清單)。

這個概念是在 Cosmos-SDK 中創建 NFT 模塊的核心。 對於那些不熟悉 SDK 的人來說,它就像 ruby-on-rails 一樣,用於構建可擴展的和互連的區塊鏈。 雖然有很多方法可以構建特定應用區塊鏈,但 Tendermint Inc. 希望將 Cosmos-SDK 作爲最佳選擇。 這個目標的一部分是製作可重用的模塊來處理區塊鏈上的常見使用情況。 例如,通證的概念由 Bank 模塊處理,Liquid Democracy 由 Gov 模塊處理,並且通過 Staking 模塊處理和保證 PoS 的網絡安全。 這些模塊可以在逐個區塊鏈的基礎上進行修改並集成到需要的情況中。 NFT 模塊的目標是允許任何鏈重複使用與非同質化通證相關的代碼;這樣無論他們正在處理哪個非同質化通證區塊鏈,應用程序和錢包都可以使用相同的過程來生成消息和查詢狀態。

包括什麼在內?

類型

**
**

NFT 模塊圍繞 BaseNFT 類型構建。 這包含與 NFT 非同質化通證相關的基本信息。

在 Cosmos 中的 NFT 模塊

還有一個 NFT 非同質化通證接口,允許延伸到希望存儲在 NFT 模塊內的其他信息。 目前,這僅限於 tokenURI,兼容 ERC-721。 但是你可以根據自己的意願儘可能少投入。 還討論了 Metadata 模塊,可以存儲和管理必要的鏈上 metadata。

在 Cosmos 中的 NFT 模塊

由於沒有合約地址來指定 NFT 非同質化通證的來源,因此使用了面額名稱(稱爲 denom)。 這允許許多不同的 NFT 非同質化通證集合在同一條鏈上生效,解決我前面提到的來源方面。 或許,你注意到 NFT 非同質化通證接口和 BaseNFT 結構中缺少 denom。 那是因爲它存儲在包含所有潛在 NFT 非同質化通證的 Collection 類型中。

在 Cosmos 中的 NFT 模塊

消息

**
**

NFT 模塊帶有四種在 NFT 非同質化通證中很常見的消息類型。 這些消息的使用因應用程序而異,因此它們帶有定製適配的過程。 還有許多查詢器,它們基本上只可以讀取,預計在實際使用中很有用。

**
**

MsgTransferNFT

在 Cosmos 中的 NFT 模塊

這是跨鏈最常用的 Msg 類型。 雖然每個應用程序特定的區塊鏈將採用差異化的 MsgMintNFT,MsgBurnNFT 和 MsgEditNFTMetadata,但應該預期大多數鏈都支持轉移 NFT 非同質化通證資產所有權的能力。 唯一例外的情況是:不可轉讓的 NFT 非同質化通證可能附加了聲譽或某些不可轉讓的資產。 但這種情況下 NFT 非同質化通證仍然是有意義的,因爲即使不可轉移,與 NFT 非同質化通證類型保持相關的通用查詢器也存在。 如果 NFT 非同質化通證不存在,消息將失敗。 默認情況下,如果傳輸由所有者旁邊的人執行,則不會失敗。 強烈建議使用自定義處理程序來限制使用此 Message 類型以防止未按預期使用。

MsgEditNFTMetadata

**
**

在 Cosmos 中的 NFT 模塊

此消息類型允許更新 TokenURI。 默認情況下,任何人都可以執行此 Message 類型,強烈建議使用自定義處理程序來限制使用此 Message 類型以防止誤用。

MsgMintNFT

**
**

在 Cosmos 中的 NFT 模塊

此消息類型用於創建新通證。 如果在新的 Denom 下鑄造新的 NFT 非同質化通證,則還將創建新的 Collection,否則將 NFT 非同質化通證添加到現有的 Collection 中。 如果新帳戶創建了新的 NFT 非同質化通證,則會創建新的持有者,否則將 NFT ID 添加到現有持有者的 IDCollection 中。 默認情況下,任何人都可以執行此 Message 類型, 強烈建議使用自定義處理程序來限制使用此 Message 類型以防止未按預期使用。

MsgBurnNFT

**
**

在 Cosmos 中的 NFT 模塊

此消息類型用於銷燬通證。 默認情況下,任何人都可以執行此 Message 類型 , 強烈建議使用自定義處理程序來限制使用此 Message 類型以防止未按預期使用。

未按預期使用

**
**

這些消息類型中對使用的限制很少,所以“強烈推薦自定義處理程序”。意味着每個應用專有鏈應該編寫一個自定義處理程序,它將在接收消息時,決定如何處理它們。 你可以自定義邏輯,比如像“只有 NFT 非同質化通證的持有者可以轉帳”或“只有得分超過 100 的玩家可以鑄造新的 NFT 非同質化通證”。一旦滿足這些要求,原始處理程序可用於執行剩餘的操作。這爲工程師節省了時間,他們不必重新構建整個模塊以滿足其特定用途。 比如這裏 (https://github.com/okwme/cosmos-nft) 有一個示例應用程序,其中使用此處 (https://github.com/okwme/cosmos-nft/blob/master/handler.go) 顯示的自定義處理程序,確保在 NFT 非同質化通證被鑄造前,UTC 時間正值黃昏。

在 Cosmos 中的 NFT 模塊

**
**

下一步

**
**

接下來可以根據代碼 ( https://github.com/cosmos/cosmos-sdk/tree/master/x/nft),嘗試使用 Cosmos-SDK 教程 (https://cosmos.network/docs/tutorial/) 來構建您的第一個應用專有鏈,然後再嘗試構建一個使用 NFT 非同質化通證的區塊鏈!您能自行決定如何使用區塊鏈資源來適應您自己的應用。一切皆有可能。🚀

本博文中表達的是 All In Bits Inc (dba Tendermint Inc)的觀點,並不一定代表 Interchain Foundation 的觀點。

在 Cosmos 中的 NFT 模塊