402. 查詢 - ERC721 (ep.24)

閱讀時間約 5 分鐘

1. 查詢該擁有者持有的NFT數量 function balanceOf(address account) external view returns(uint256 balance);

  1. 給定一個位址owner, 回傳該位址所持有的NFT數量uint256
  2. 由於每個位址address, 對應到持有數量uint256
  3. 使用mapping(address => uint256) _balance 來儲存
  4. 特殊檢查
  • address 0 不能為NFT的持有者
  • 如一個NFT的擁有者為0, 通常代表該NFT已經被銷毀, 或者尚未被發行

2. 查詢該NFT的持有者 function ownerOf(uint256 tokenId) external view returns (address owner);

  1. 給定一個TokenID (uint256), 回傳該NFT的持有者address
  2. 由於是每個Token ID(uint256)對應到持有者位址address
  3. 使用 mapping(uint256 => address) _owners來儲存
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.23;

interface IERC20 {
// Event
// event Transfer(address indexed from, address indexed to, uint256 tokenId);
// event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
// event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

//Query
function balanceOf(address account) external view returns(uint256 balance);
function ownerOf(uint256 tokenId) external view returns (address owner);

//Transfer
// function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
// function safeTransferFrom(address from, address to, uint256 tokenId) external;
// function transferFrom(address from, address to, uint256 tokenId) external;

// Approve
// function approve(address to, uint256 tokenId) external;
// function setApprovalforAll(address operator, bool _approved) external;
// function getApproved(uint256 tokenId) external view returns (address operator);
// function isApprovedForAll(address owner, address operator) external view returns(bool);
}

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;
}
}


在 2022 年,我們該如何寫智能合約 - 24 - ERC721 實作 查詢篇

尋大神腳印, 亦步亦趨。
留言0
查看全部
發表第一個留言支持創作者!
從 Google News 追蹤更多 vocus 的最新精選內容