// SPDX-License-Identifier: CC0-1.0 pragma solidity ^0.8.0; interface IERC5334 { // Logged when the user of a token assigns a new user or updates expires /// @notice Emitted when the `user` of an NFT or the `expires` of the `user` is changed or the `level` of the `user` is changed /// The zero address for user indicates that there is no user address event UpdateUser(uint256 indexed tokenId, address indexed user, uint64 expires, uint8 level); /// @notice set the user and expires of a NFT /// @dev The zero address indicates there is no user /// Throws if `tokenId` is not valid NFT /// @param user The new user of the NFT /// @param expires UNIX timestamp, The new user could use the NFT before expires /// @param level user level function setUser(uint256 tokenId, address user, uint64 expires, uint8 level) external ; /// @notice Get the user address of an NFT /// @dev The zero address indicates that there is no user or the user is expired /// @param tokenId The NFT to get the user address for /// @return The user address for this NFT function userOf(uint256 tokenId) external view returns(address); /// @notice Get the user expires of an NFT /// @dev The zero value indicates that there is no user /// @param tokenId The NFT to get the user expires for /// @return The user expires for this NFT function userExpires(uint256 tokenId) external view returns(uint256); /// @notice Get the user level of an NFT /// @dev The zero value indicates that there is no user /// @param tokenId The NFT to get the user level for /// @return The user level for this NFT function userLevel(uint256 tokenId) external view returns(uint256); }