Contract-Development

ERC721 標準 - 您應該在傳遞給建構子的名稱和符號參數中傳遞什麼?

  • January 27, 2022

我一直對 ERC721 標準感到困惑。**我們將名稱和符號傳遞給建構子。它們代表什麼?**在原始碼中,它只是說令牌名稱和令牌符號。

它們是 NFT 的名稱和符號嗎? (NFT 有唯一的名稱和符號嗎?)

  • 如果是這樣,那麼我使用該合約鑄造的每個 NFT 是否都具有相同的名稱和符號?
  • 我在哪裡指定它所屬的集合的名稱?

還是**它們也是 NFT 所屬集合的名稱和符號?**因此,在我部署合約後,我鑄造的每個 NFT 都有該集合名稱和符號。

  • 我正在查看 OpenSea 上的 NFT 契約 -連結- 名稱和符號屬於它所屬的集合(Kitty Crypto Gang (KCG))。

這是來自openzeppelin的範常式式碼。建構子在第 8 行。

import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/utils/Counters.sol";

contract GameItem is ERC721URIStorage {
   using Counters for Counters.Counter;
   Counters.Counter private _tokenIds;

   constructor() ERC721("GameItem", "ITM") {} // constructor is here <---------------------

   function awardItem(address player, string memory tokenURI)
       public
       returns (uint256)
   {
       _tokenIds.increment();

       uint256 newItemId = _tokenIds.current();
       _mint(player, newItemId);
       _setTokenURI(newItemId, tokenURI);

       return newItemId;
   }
}

此外,NFT 是否必須是集合的一部分?當我去 OpenSea 時,似乎沒有單獨的 NFT。只有收藏。

首先,說“ERC-721建構子”的“名稱和符號”不是一回事。標準中沒有指定建構子。

我們必須將這個問題理解為“ERC-721 的 OpenZeppelin Contracts 實現的名稱和符號是什麼意思?”

ERC-721的namesymbol特性在ERC-721 規範中定義

   /// @notice A descriptive name for a collection of NFTs in this contract
   function name() external view returns (string _name);

   /// @notice An abbreviated name for NFTs in this contract
   function symbol() external view returns (string _symbol);

並提供了進一步的動力:

我們在元數據擴展中有必需的名稱和符號函式。我們審查的每個令牌 EIP 和草案(ERC-20、ERC-223、ERC-677、ERC-777、ERC-827)都包含這些功能。

我們提醒實現作者,如果您反對使用此機制,則空字元串是對名稱和符號的有效響應。我們還提醒大家,任何智能合約都可以使用與您的合約相同的名稱和符號。客戶如何確定哪些 ERC-721 智能合約是眾所周知的(規範的)超出了本標準的範圍。

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