/// @title ERC-7564
/// @dev See https://eips.ethereum.org/EIPS/eip-7564
/// @dev Note: the ERC-165 identifier for this interface is
pragmasolidity^0.8.20;interfaceIERC7564{/**
* @notice Used to notify listeners that owner has granted approval to the user to manage one nft.
* @param _asset Address of the nft
* @param _owner Address of the account that has granted the approval for nft‘s assets
* @param _operator Address of the operator
* @param _tokenId The unique identifier of the NFT
*/eventNftApproval(addressindexed_asset,addressindexed_owner,addressindexed_operator,uint256_tokenId);/**
* @notice Used to notify listeners that owner has granted approval to the operator to manage all nft of one asset contract.
* @param _asset Address of the nft
* @param _owner Address of the account that has granted the approval for nft‘s assets
* @param _operator Address of the operator
* @param _approved approve all nft of one asset contract
*/eventNftApprovalForOneAll(addressindexed_asset,addressindexed_owner,addressindexed_operator,bool_approved);/**
* @notice Used to notify listeners that owner has granted approval to the operator to manage all nft .
* @param _owner Address of the account that has granted the approval for nft‘s assets
* @param _operator Address of the operator
* @param _approved approve all nft
*/eventNftApprovalForAllAll(addressindexed_owner,addressindexed_operator,bool_approved);/**
* @notice Approve nft
* @dev Allows operator address to withdraw from your wallet one nft.
* @dev Emits an {nftApproval} event.
* @param _asset Address of the nft
* @param _operator Address of the operator
* @param _tokenId The unique identifier of the NFT
*/functionnftApprove(address_asset,address_operator,uint256_tokenId)external;/**
* @notice Approve all nft of one asset
* @dev Allows operator address to withdraw from your wallet all nft.
* @dev Emits an {nftApprovalForOneAll} event.
* @param _asset Address of the nft
* @param _operator Address of the operator
* @param _approved Approved all nfts of one asset
*/functionnftSetApprovalForOneAll(address_asset,address_operator,bool_approved)external;/**
* @notice Approve all nft
* @dev Allows operator address to withdraw from your wallet all nft.
* @dev Emits an {nftApprovalForAllAll} event.
* @param _operator Address of the operator
* @param _approved Approved all nfts
*/functionnftSetApprovalForAllAll(address_operator,bool_approved)external;/**
* @notice read operator approved
* @param _asset Address of the nft
* @param _operator Address of the operator
* @param _tokenId The unique identifier of the NFT
* @return _approved Whether to approved operator one nft
*/functionnftGetApproved(address_asset,address_operator,uint256_tokenId)externalviewreturns(bool_approved);/**
* @notice read operator approved
* @param _asset Address of the nft
* @param _operator Address of the operator
* @return _approved Whether to approved operator all nfts of this one asset
*/functionnftIsApprovedForOneAll(address_asset,address_operator)externalviewreturns(bool_approved);/**
* @notice read operator approved
* @param _operator Address of the operator
* @return _approved Whether to approved operator all nfts
*/functionnftIsApprovedForAllAll(address_operator)externalviewreturns(bool_approved);/**
* @notice Transfer nft
* @dev must call nft asset transfer() inside the function
* @dev If the caller is not wallet self, must verify the approve and update
* @param _asset Address of the nft
* @param _to Address of the receive
* @param _tokenId The transaction amount
* @return _success The bool value returns whether the transfer is successful
*/functionnftTransfer(address_asset,address_to,uint256_tokenId)externalreturns(bool_success);}