圍繞 ERC721/ERC1155 和 IPFS/IPNS 的困惑
我正在嘗試使用智能合約和 IPFS 建構一個去中心化的筆記應用程序,但我對使用它們的細節以及如何使用它們有點困惑。
據我所知,使用者創建的每個註釋都是一個單獨的 NFT (ERC721),它指向一個 IPFS 連結。
但我有幾個問題:
- 我使用 ERC721 還是 ERC1155?
- IPFS 和 IPNS 有什麼區別?
- 這是建構此類應用程序的最佳方式嗎?
- 如果我這樣建構,使用者每次保存時是否都必須支付gas費,或者有沒有辦法在不支付任何費用的情況下觸發保存?
- 這個應用程序可以建構在 L1 以及 Polygon 和 Avalanche 等 L2 鏈上嗎?
抱歉,如果這些是愚蠢的問題,我已經研究了好幾個星期了,但仍然無法得出最終結論……
謝謝
使用 721 或 1155 取決於您要添加到系統中的資產類型以及您對項目的預期增長。這是:如果您完全確定您不需要其他任何東西:
- 儲存筆記,帶有指向 IPFS 的連結。
- 使用區塊鏈的原生代幣為他們付款。
然後你就可以使用 721。現在,讓我們考慮另一個場景:你部署了 721 合約並且一切順利,但是你覺得需要創建另一個合約來成為你的生態系統的一部分。該合約在部署時將獲取您已經部署的生態系統的一個或多個合約的地址,並且……另一個令牌將很有用,例如,對於您正在實施的新功能。如果您覺得需要,那麼最好選擇 1155 合約(特別是如果您覺得需要創建新的可替代代幣)。
但是,如果你很好,並且你認為你會一直很好,在你的項目的目前結構中,除了你正在創建的 NFT 之外什麼都不會存在(除了你的鏈的本機令牌)……然後堅持 721。
現在,IPFS 和 IPNS 是相同的一部分。通常,IPNS 是一種獲取您儲存在 IPFS 中的某些文件的別名的方法。一種特定的實現是使用 DNSLink(您在其中註冊了 your.fancy.domain 並添加了一些特定記錄,然後 /ipns/your.fancy.domain/… 路徑可通過 IPFS 獲得)。通常,你會希望你的 NFT 的元數據是某種形式
mapping(uint256 => string)
,其值為 IPFS 資源的 CID(例如"QmejFS6no1bJLffPtWdHrsh19skHyG6run8FmNUsutSCGj"
id =1
),然後返回 URI 的方法應該返回 id1
的 URI"ipfs://QmejFS6no1bJLffPtWdHrsh19skHyG6run8FmNUsutSCGj"
. 通常,您不會使用 ipns 使自己過於復雜,而只會使用 ipfs。對於是否
this is a good approach to build an application
,這取決於我不知道的更多細節,但你需要知道一些事情:
- 使用者可以通過指向 IPFS 中現有筆記的特定連結來鑄造 NFT。
- 使用者可能需要更改註釋。這意味著作為 NFT 所有者的使用者必須能夠更改指向目前筆記的連結(因為無法編輯 IPFS 文件)以指向新的筆記文件。
- 為此,必須將 IPFS 註釋固定到另一個允許您使用的伺服器(例如 pinata、infura)。
然後,如果您考慮到這一點,則可以做您要求的事情。
狀態修改函式必須始終在事務內部執行。這意味著:它總是會消耗汽油。我一直在考慮的一件事是,您將創建某種贊助伺服器,其中:
- 您的伺服器將收到來自客戶端錢包的簽名,並且伺服器(使用自定義私鑰,為自定義錢包簽名,您將知道並且已經向其中提供了一些本機硬幣)將呼叫 NFT 鑄幣/ 代表客戶更新目標智能合約上的操作(這就是簽名的用途),但這需要您必鬚髮明的其他方法(我不知道如何做到這一點,但我在連結中閱讀了它我稍後再找你)。
- 為此,您必須手動為該伺服器的錢包地址注資。也許你可以建立一個商業模式,你的伺服器會出售一些廣告空間來賺錢。這取決於你。
最後,是的:只要您使用任何與 EVM 兼容的網路,您就可以使用 OpenZeppelin 的合約(ERC721、ERC1155 等),並在其上添加更多方法(例如,做“贊助”的事情)。
編輯:對於有關簽名消息的事情,如果您使用某種“贊助”技術,您可能需要,此連結可以讓您深入了解。在這種情況下,目的是不同的(它允許有兩個不同的網路來驗證要在兩個鏈中驗證的操作的同一請求者 - 但在這種情況下,您將使用使用者驗證)。
編輯2:贊助伺服器背後的想法是這樣的伺服器對使用者來說是可選的。雖然簽名過程會使使用者更加值得信賴,但您應該發布贊助伺服器原始碼,以便他們了解在那裡無法進行欺騙。
此外,合約仍將具有(實際上:必須仍然具有)直接方法供那些更願意自己支付 gas 並自己訪問區塊鏈的使用者呼叫,而不是訪問您的讚助伺服器。如果他們使用與 ERC721 或 ERC1155 兼容的外部客戶端(有很多是對特定標準的抽象)並且一切正常,只要他們以後可以適當地看到結果就足夠了(查詢合約對外不消耗gas)。
儘管如此,為了讓使用者信任你,請始終發布合約的原始碼(有工具可以對合約的 EVM 程式碼進行逆向工程,但對合約/合約的原始碼採取主動和開放的態度會給你的形象更好)。