用於生成動態 ERC-1155 或 ERC-721 元數據的模式
我對智能合約開發很陌生,所以如果這看起來像一個愚蠢的問題,請提前道歉。
我正在為以下案例尋找可用模式的一些指導。
我需要在鑄造時動態生成 ERC-1155 令牌的元數據(幾個隨機圖像中的一個、統計數據等)。元數據還需要能夠根據鏈上互動進行更改。鑑於我缺乏經驗,我正在努力想辦法在區塊鏈上做到這一點。
據我了解,我可能需要利用 oracles 和 IPFS 的使用?可能是自定義伺服器(如果可能的話,我寧願避免使用它,以盡可能保持非託管)?
這種案例有標準模式嗎?
我最初的想法是:
- 工廠合約使用 oraclize 生成隨機數統計資訊。
- TokenURI 指向通過 URI 參數接收統計資訊的自定義伺服器。
- 令牌是用這個 URI 鑄造的。
- 自定義伺服器生成 JSON 元數據並在呼叫該 URI 時返回它。
這將使必要的鏈上數據和鏈下元數據保持同步。如果鏈上統計數據發生變化,那麼從 URI 返回的 JSON 也會發生變化。
這會被認為是可接受的模式嗎?
使用 IPFS 地址作為令牌 URI 的方法旨在確保其不變性,因為 IPFS 地址內生成的雜湊對於您指向的文件將是唯一的。
在您的情況下,如果您需要動態更改元數據中的內容,URI 可以指向您可以隨時更新的 https 文件。但是,在我的理解中,你失去了不變性甚至更糟糕的概念——如果網站受到攻擊,你可能會顯示被篡改的數據。
只有一個精度:如果您指的是 ERC1155,則 URI 在您創建 NFT 時在建構子中傳遞並且保持不變。因此,當您為該 NFT 鑄造令牌時,URI 保持不變(這與 ERC721 不同,在 ERC721 中,您為每個新 NFT 傳遞 URI)。
一種替代方法是將您的動態數據也保存在智能合約中,您將在其中擁有 NFT 和附加資訊之間的映射。在這種情況下,您需要估計更新數據的頻率以及在鏈上執行此操作的相關成本。
您採用的方法將取決於您的需求:如果您談論的是獨特的收藏卡,您應該使用類似 IPFS 的方法來確保不變性。另一方面,如果令牌可以具有動態元數據,您可能會指向您將相應管理的外部數據(鏈外)。