Solidity

如何製作 ERC721 NFT,以便令牌所有者可以編輯元數據中的屬性?他們可以在哪裡編輯元數據?

  • January 5, 2022

我讀過可以創建 ERC721 令牌,以便令牌所有者可以編輯鏈上元數據。我一直在關注 brownie-nft 組合的教程並在 OpenSea 上製作 NFT,但我還沒有發現 NFT 所有者如何實際更改鏈上(甚至鏈下)元數據。令牌所有者如何做到這一點?代幣所有者能否在 OpenSea 等市場中做到這一點,或者他們是否需要了解可靠性?

這取決於你如何編碼 NFT。但基本上你會有一個更新鏈上元數據和/或更新 tokenURI 以反映更改的函式,並且你會以只有令牌所有者可以呼叫該函式的方式進行。

是的,他們需要知道堅固性。

如果您向 NFT 合約添加了一個函式,例如:

function changeAttributes(uint256 newStat, uint256 tokenId, string memory newTokenURI) public {
   require(
           _isApprovedOrOwner(_msgSender(), tokenId),
           "ERC721: caller is not owner nor approved"
       );
   tokenIdToStat[tokenId] = newStats;
   _setTokenURI(tokenId, newTokenURI);
}

這可能是一個可以改變 NFT 的統計數據和元數據的函式。

  • require語句有一個呼叫函式_isApprovedOrOwner,可以定義只有 NFT 的所有者才能更改統計資訊。
  • tokenIdToStat[tokenId] = newStat;是鏈上屬性的映射,它使 tokenId 到它擁有的“統計”或“屬性”。
  • 然後該_setTokenURI(tokenId, newTokenURI);行更新元數據 tokenURI。最後一部分你必須更新一些 tokenURI 以反映新的鏈上元數據。

鏈上與鏈下元數據

為了讓您的 NFT 在鏈上相互互動,您需要擁有鏈上元數據。截至目前,NFT 市場沒有讀取鏈上元數據的標準,因此它們都引用了 tokenURI 中的鏈下元數據。

如果 NFT 只有鏈上元數據,那麼上面的功能足以讓他們更改元數據。如果他們有鏈下元數據,那麼他們還需要用新的元數據更新 tokenURI。理想情況下,你也有鏈上元數據,因此代幣的屬性在鏈上是永生的,不易受到集中操作的影響。

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