Erc-721

如何在鑄造期間使用佔位符圖像,然後在鑄造後僅使用實際 URI 更新元數據?

  • March 7, 2022

按照標題。我希望能夠為我的 NFT 提供一個佔位符圖像,如下所示:

https://opensea.io/collection/thealcabones

隨後,在啟動後,我會更新元數據。

如何使用 Pinata / IPFS 執行此操作?我需要在我的智能合約中編寫一個特定的函式來允許這個嗎?

您需要在智能合約的開頭聲明一個空變數:

string newURI

然後你需要創建一個函式來控制URI,這個函式以一個叫_newURI的變數為參數,這是pinata的CID。

//  Modify URI with this function
function setURI(string calldata _newURI) public onlyOwner{
   newURI = _newURI;
}

//  Base URI function, this won't be callable, you will use the above 
//  function instead to invoke this one
function _baseURI() internal view override returns (string memory) {
   return newURI;
}

如您所見,_baseURI() 函式返回文件的 URI,而 setURI() 函式將覆蓋 newURI 變數(即 _baseURI 返回的變數)

當你部署你的智能合約時,你需要使用佔位符圖像設置 pinata 的 CID,並且每當你想要顯示它們時,你只需要使用更新的 CID 呼叫 setURI()。

@alex 的答案的替代方案(不建議,但為了完成)是創建一個 IPNS 列表。IPFS 使用內容定址,所以當內容髮生變化時,地址也會發生變化。對於您可能需要具有可更新內容的契約地址的地方,IPNS 充當命名方案,您可以在其中更新它指向的 IPFS 內容。內容可以通過 訪問/ipns/<ipns_hash>。但是,我不確定哪些 NFT 市場支持它。您可以在此處閱讀有關 IPNS的更多資訊。

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