/// @title ERC-7204
/// @dev See https://eips.ethereum.org/EIPS/eip-7204
/// @dev Note: the ERC-165 identifier for this interface is 0xf73edcda
pragmasolidity^0.8.20;interfaceIERC7204/* is ERC165 */{/**
* @notice Used to notify listeners that owner has granted approval to the user to manage assets tokens.
* @param asset Address of the token
* @param owner Address of the account that has granted the approval for token‘s assets
* @param spender Address of the spender
* @param value The amount allowed to spend
*/eventTokenApproval(addressindexedasset,addressindexedowner,addressindexedspender,uint256value);/**
* @notice Used to notify listeners that owner has granted approval to the spender to manage all token .
* @param asset Address of the token
* @param owner Address of the account that has granted the approval for token‘s assets
* @param approved approve all token
*/eventTokenApprovalForAll(addressindexedowner,addressindexedspender,boolapproved);/**
* @notice Approve token
* @dev Allows spender address to withdraw from your account multiple times, up to the value amount.
* @dev If this function is called again it overwrites the current allowance with value.
* @dev Emits an {TokenApproval} event.
* @param asset Address of the token
* @param spender Address of the spender
* @param value The amount allowed to spend
* @return success The bool value returns whether the approve is successful
*/functiontokenApprove(addressasset,addressspender,uint256value)externalreturns(boolsuccess);/**
* @notice read token allowance value
* @param asset Address of the token
* @param spender Address of the spender
* @return remaining The asset amount which spender is still allowed to withdraw from owner.
*/functiontokenAllowance(addressasset,addressspender)externalviewreturns(uint256remaining);/**
* @notice Approve all token
* @dev Allows spender address to withdraw from your wallet all token.
* @dev Emits an {TokenApprovalForAll} event.
* @param spender Address of the spender
* @param approved Approved all tokens
* @return success The bool value returns whether the approve is successful
*/functiontokenApproveForAll(addressspender,boolapproved)externalreturns(boolsuccess);/**
* @notice read spender approved value
* @param spender Address of the spender
* @return approved Whether to approved spender all tokens
*/functiontokenIsApproveForAll(addressspender)externalviewreturns(boolapproved);/**
* @notice Transfer token
* @dev must call asset.transfer() inside the function
* @dev If the caller is not wallet self, must verify the allowance and update the allowance value
* @param asset Address of the token
* @param to Address of the receive
* @param value The transaction amount
* @return success The bool value returns whether the transfer is successful
*/functiontokenTransfer(addressasset,addressto,uint256value)externalreturns(boolsuccess);}