Solidity

用於生成動態 ERC-1155 或 ERC-721 元數據的模式

  • February 18, 2021

我對智能合約開發很陌生,所以如果這看起來像一個愚蠢的問題,請提前道歉。

我正在為以下案例尋找可用模式的一些指導。

我需要在鑄造時動態生成 ERC-1155 令牌的元數據(幾個隨機圖像中的一個、統計數據等)。元數據還需要能夠根據鏈上互動進行更改。鑑於我缺乏經驗,我正在努力想辦法在區塊鏈上做到這一點。

據我了解,我可能需要利用 oracles 和 IPFS 的使用?可能是自定義伺服器(如果可能的話,我寧願避免使用它,以盡可能保持非託管)?

這種案例有標準模式嗎?

我最初的想法是:

  1. 工廠合約使用 oraclize 生成隨機數統計資訊。
  2. TokenURI 指向通過 URI 參數接收統計資訊的自定義伺服器。
  3. 令牌是用這個 URI 鑄造的。
  4. 自定義伺服器生成 JSON 元數據並在呼叫該 URI 時返回它。

這將使必要的鏈上數據和鏈下元數據保持同步。如果鏈上統計數據發生變化,那麼從 URI 返回的 JSON 也會發生變化。

這會被認為是可接受的模式嗎?

使用 IPFS 地址作為令牌 URI 的方法旨在確保其不變性,因為 IPFS 地址內生成的雜湊對於您指向的文件將是唯一的。

在您的情況下,如果您需要動態更改元數據中的內容,URI 可以指向您可以隨時更新的 https 文件。但是,在我的理解中,你失去了不變性甚至更糟糕的概念——如果網站受到攻擊,你可能會顯示被篡改的數據。

只有一個精度:如果您指的是 ERC1155,則 URI 在您創建 NFT 時在建構子中傳遞並且保持不變。因此,當您為該 NFT 鑄造令牌時,URI 保持不變(這與 ERC721 不同,在 ERC721 中,您為每個新 NFT 傳遞 URI)。

一種替代方法是將您的動態數據也保存在智能合約中,您將在其中擁有 NFT 和附加資訊之間的映射。在這種情況下,您需要估計更新數據的頻率以及在鏈上執行此操作的相關成本。

您採用的方法將取決於您的需求:如果您談論的是獨特的收藏卡,您應該使用類似 IPFS 的方法來確保不變性。另一方面,如果令牌可以具有動態元數據,您可能會指向您將相應管理的外部數據(鏈外)。

引用自:https://ethereum.stackexchange.com/questions/93625