Contract-Development
ERC721 標準 - 您應該在傳遞給建構子的名稱和符號參數中傳遞什麼?
我一直對 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的
name
和symbol
特性在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 智能合約是眾所周知的(規範的)超出了本標準的範圍。