1. 查詢該擁有者持有的NFT數量 function balanceOf(address account) external view returns(uint256 balance);
- 給定一個位址owner, 回傳該位址所持有的NFT數量uint256
- 由於每個位址address, 對應到持有數量uint256
- 使用mapping(address => uint256) _balance 來儲存
- 特殊檢查
- address 0 不能為NFT的持有者
- 如一個NFT的擁有者為0, 通常代表該NFT已經被銷毀, 或者尚未被發行
2. 查詢該NFT的持有者 function ownerOf(uint256 tokenId) external view returns (address owner);
- 給定一個TokenID (uint256), 回傳該NFT的持有者address
- 由於是每個Token ID(uint256)對應到持有者位址address
- 使用 mapping(uint256 => address) _owners來儲存
pragma solidity ^0.8.23;
interface IERC20 {
function balanceOf(address account) external view returns(uint256 balance);
function ownerOf(uint256 tokenId) external view returns (address owner);
}
contract ERC721 is IERC721 {
mapping(address => uint256) _balances;
mapping(uint256 => address) _owners;
function balanceOf(address owner) public view returns(uint256){
require(owner != address(0), "ERROR: address 0 cannot be owner");
return _balances[owner];
}
function ownerOf(uint256 tokenId) public view returns (address){
address owner = _owners[tokenId];
require(owner != address(0), "ERROR: tokenId is not valid Id");
return owner;
}
}