Erc-721
ERC721合約怎麼會有餘額?
看看這個實現,我可以看到 ERC721 合約跟踪每個單個令牌(由其令牌 ID,一個 256 位數字標識)的所有者(由其地址標識):
mapping (uint256 => address) internal tokenOwner;
因此,當有轉移時,必須提供令牌 ID。到現在為止還挺好。
我不明白的是balance操作的語義。
/** * @dev Returns the number of NFTs owned by `_owner`. NFTs assigned to the zero address are * considered invalid, and this function throws for queries about the zero address. * @param _owner Address for whom to query the balance. */ function balanceOf( address _owner ) external view returns (uint256) { require(_owner != address(0)); return ownerToNFTokenCount[_owner]; }
如果每個代幣都是不可替代的,因此根據定義是唯一的,那麼每個代幣怎麼可能不止一個呢?即當 balance 函式返回大於 1 時是什麼意思?
balanceOf
不返回特定令牌的編號。它返回特定使用者擁有的令牌數量。例如,如果您想知道“Jane 擁有多少 CryptoKitties?”,您可以使用該
balanceOf
函式來回答這個問題。該
balanceOf
功能的存在有兩個主要原因。首先,它使 ERC721 向後兼容 ERC20,標準化非常有幫助。其次,它可用於迭代使用者擁有的所有代幣。例如,如果您為 ERC721實現可列舉擴展
balanceOf
,您可以使用它來檢查您是否沒有為使用者請求索引之外的令牌。這將允許您創建一個頁面,您可以在其中輕鬆查看所有 NFT。