我正在做一个nft租赁合同当调用setUser或合约中的任何函数时,会生成错误——ERC721:查询不存在的令牌.即使令牌是铸造的。猜猜为什么?合同内容如下https://github.com/shristivyas/SmartContracts/blob/main/nft-renting.sol
当令牌ID未生成时,由OpenZeppelin _isApprovedOrOwner()函数抛出错误。
当前实现中没有生成令牌的函数。
概念证明:当令牌存在时,错误不再出现。
function setUser(uint256 tokenId, address user, uint64 expires) public virtual override(IERC4907){
if (_exists(tokenId) == false) {
_mint(msg.sender, tokenId); // mint the token if it doesn't exist yet
}
require(_isApprovedOrOwner(msg.sender, tokenId), "ERC4907: transfer caller is not owner nor approved");
UserInfo storage info = _users[tokenId];
info.user = user;
info.expires = expires;
emit UpdateUser(tokenId, user, expires);
}