pragmasolidity^0.8.0;/**
* @title ERC-7629 Unify Token Interface
* @dev This interface defines the ERC-7629 Unify Token, which unifies ERC-721 and ERC-20 assets.
* @dev 此接口定义了 ERC-7629 统一代币,它统一了 ERC-721 和 ERC-20 资产。
*/interfaceIERC7629isIERC165{// ERC-20 Transfer event
// ERC-20 转移事件
eventERC20Transfer(addressindexedfrom,addressindexedto,uint256amount);// ERC-721 Transfer event
// ERC-721 转移事件
eventERC721Transfer(addressindexedfrom,addressindexedto,uint256indexedtokenId);// ERC-721 Transfer event
// ERC-721 转移事件
eventTransfer(addressindexedfrom,addressindexedto,uint256indexedtokenId);// Approval event for ERC-20 and ERC-721
// ERC-20 和 ERC-721 的批准事件
eventApproval(addressindexedowner,addressindexedapproved,uint256indexedtokenId);// Approval event for ERC-20 and ERC-721
// ERC-20 和 ERC-721 的批准事件
eventApproval(addressindexedowner,addressindexedapproved,uint256indexedtokenId);// Approval event for ERC-20
// ERC-20 的批准事件
eventERC20Approval(addressindexedowner,addressindexedapproved,uint256indexedtokenId);// ApprovalForAll event for ERC-721
// ERC-721 的 ApprovalForAll 事件
eventApprovalForAll(addressindexedowner,addressindexedoperator,boolapproved);// ERC-20 to ERC-721 Conversion event
// ERC-20 到 ERC-721 转换事件
eventERC20ToERC721(addressindexedto,uint256amount,uint256tokenId);// ERC-721 to ERC-20 Conversion event
// ERC-721 到 ERC-20 转换事件
eventERC20ToERC721(addressindexedto,uint256amount,uint256[]tokenIds);/**
* @dev Returns the name of the token.
* @dev 返回代币的名称。
*/functionname()externalviewreturns(stringmemory);/**
* @dev Returns the symbol of the token.
* @dev 返回代币的符号。
*/functionsymbol()externalviewreturns(stringmemory);/**
* @dev Returns the number of decimals used in the token.
* @dev 返回代币中使用的小数位数。
*/functiondecimals()externalviewreturns(uint8);/**
* @dev Returns the total supply of the ERC-20 tokens.
* @dev 返回 ERC-20 代币的总供应量。
*/functiontotalSupply()externalviewreturns(uint256);/**
* @dev Returns the balance of an address for ERC-20 tokens.
* @dev 返回地址的 ERC-20 代币余额。
* @param owner The address to query the balance of.
* @param owner 要查询余额的地址。
*/functionbalanceOf(addressowner)externalviewreturns(uint256);/**
* @dev Returns the total supply of ERC-20 tokens.
* @dev 返回 ERC-20 代币的总供应量。
*/functionerc20TotalSupply()externalviewreturns(uint256);/**
* @dev Returns the balance of an address for ERC-20 tokens.
* @dev 返回地址的 ERC-20 代币余额。
* @param owner The address to query the balance of.
* @param owner 要查询余额的地址。
*/functionerc20BalanceOf(addressowner)externalviewreturns(uint256);/**
* @dev Returns the total supply of ERC-721 tokens.
* @dev 返回 ERC-721 代币的总供应量。
*/functionerc721TotalSupply()externalviewreturns(uint256);/**
* @dev Returns the balance of an address for ERC-721 tokens.
* @dev 返回地址的 ERC-721 代币余额。
* @param owner The address to query the balance of.
* @param owner 要查询余额的地址。
*/functionerc721BalanceOf(addressowner)externalviewreturns(uint256);/**
* @notice Get the approved address for a single NFT
* @dev Throws if `tokenId` is not a valid NFT.
* @dev 如果 `tokenId` 不是有效的 NFT,则抛出异常。
* @param tokenId The NFT to find the approved address for
* @param tokenId 要查找批准地址的 NFT
* @return The approved address for this NFT, or the zero address if there is none
* @return 此 NFT 的批准地址,如果没有则为零地址
*/functiongetApproved(uint256tokenId)externalviewreturns(address);/**
* @dev Checks if an operator is approved for all tokens of a given owner.
* @dev 检查某个 operator 是否已获得特定所有者的所有代币的批准。
* @param owner The address of the token owner.
* @param owner 代币所有者的地址。
* @param operator The address of the operator to check.
* @param operator 要检查的 operator 的地址。
*/functionisApprovedForAll(addressowner,addressoperator)externalviewreturns(bool);/**
* @dev Returns the remaining number of tokens that spender will be allowed to spend on behalf of owner.
* @dev 返回 spender 将被允许代表 owner 花费的剩余代币数量。
* @param owner The address of the token owner.
* @param owner 代币所有者的地址。
* @param spender The address of the spender.
* @param spender spender 的地址。
*/functionallowance(addressowner,addressspender)externalviewreturns(uint256);/**
* @dev Returns the array of ERC-721 token IDs owned by a specific address.
* @dev 返回特定地址拥有的 ERC-721 代币 ID 数组。
* @param owner The address to query the tokens of.
* @param owner 要查询代币的地址。
*/functionowned(addressowner)externalviewreturns(uint256[]memory);/**
* @dev Returns the address that owns a specific ERC-721 token.
* @dev 返回拥有特定 ERC-721 代币的地址。
* @param tokenId The token ID.
* @param tokenId 代币 ID。
*/functionownerOf(uint256tokenId)externalviewreturns(addresserc721Owner);/**
* @dev Returns the URI for a specific ERC-721 token.
* @dev 返回特定 ERC-721 代币的 URI。
* @param tokenId The token ID.
* @param tokenId 代币 ID。
*/functiontokenURI(uint256tokenId)externalviewreturns(stringmemory);/**
* @dev Approve or disapprove the operator to spend or transfer all of the sender's tokens.
* @dev 批准或不批准 operator 花费或转移发送者的所有代币。
* @param spender The address of the spender.
* @param spender spender 的地址。
* @param amountOrId The amount of ERC-20 tokens or ID of ERC-721 tokens.
* @param amountOrId ERC-20 代币的数量或 ERC-721 代币的 ID。
*/functionapprove(addressspender,uint256amountOrId)externalreturns(bool);/**
* @dev Set or unset the approval of an operator for all tokens.
* @dev 设置或取消设置 operator 对所有代币的批准。
* @param operator The address of the operator.
* @param operator operator 的地址。
* @param approved The approval status.
* @param approved 批准状态。
*/functionsetApprovalForAll(addressoperator,boolapproved)external;/**
* @dev Transfer ERC-20 tokens or ERC-721 token from one address to another.
* @dev 将 ERC-20 代币或 ERC-721 代币从一个地址转移到另一个地址。
* @param from The address to transfer ERC-20 tokens or ERC-721 token from.
* @param from 从中转移 ERC-20 代币或 ERC-721 代币的地址。
* @param to The address to transfer ERC-20 tokens or ERC-721 token to.
* @param to 将 ERC-20 代币或 ERC-721 代币转移到的地址。
* @param amountOrId The amount of ERC-20 tokens or ID of ERC-721 tokens to transfer.
* @param amountOrId 要转移的 ERC-20 代币的数量或 ERC-721 代币的 ID。
*/functiontransferFrom(addressfrom,addressto,uint256amountOrId)externalreturns(bool);/**
* @notice Transfers the ownership of an NFT from one address to another address
* @dev Throws unless `msg.sender` is the current owner, an authorized
* operator, or the approved address for this NFT. Throws if `_rom` is
* not the current owner. Throws if `_to` is the zero address. Throws if
* `tokenId` is not a valid NFT. When transfer is complete, this function
* checks if `to` is a smart contract (code size > 0). If so, it calls
* `onERC721Received` on `to` and throws if the return value is not
* `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`.
* @dev 只有当 `msg.sender` 是当前所有者、授权的 operator 或此 NFT 的批准地址时,才会抛出异常。如果 `_rom` 不是当前所有者,则抛出异常。如果 `_to` 是零地址,则抛出异常。如果 `tokenId` 不是有效的 NFT,则抛出异常。传输完成后,此函数检查 `to` 是否为智能合约(代码大小 > 0)。如果是,它会在 `to` 上调用 `onERC721Received`,如果返回值不是 `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`,则抛出异常。
* @param from The current owner of the NFT
* @param from NFT 的当前所有者
* @param to The new owner
* @param to 新所有者
* @param tokenId The NFT to transfer
* @param tokenId 要转移的 NFT
* @param data Additional data with no specified format, sent in call to `to`
* @param data 没有指定格式的附加数据,在调用 `to` 时发送
*/functionsafeTransferFrom(addressfrom,addressto,uint256tokenId,bytescalldatadata)externalpayable;/**
* @notice Transfers the ownership of an NFT from one address to another address
* @dev This works identically to the other function with an extra data parameter,
* except this function just sets data to "".
* @dev 此函数的工作方式与带有额外数据参数的另一个函数相同,只是此函数将数据设置为“”。
* @param from The current owner of the NFT
* @param from NFT 的当前所有者
* @param to The new owner
* @param to 新所有者
* @param tokenId The NFT to transfer
* @param tokenId 要转移的 NFT
*/functionsafeTransferFrom(addressfrom,addressto,uint256tokenId)externalpayable;/**
* @dev Transfer ERC-20 tokens to an address.
* @dev 将 ERC-20 代币转移到地址。
* @param to The address to transfer ERC-20 tokens to.
* @param to 将 ERC-20 代币转移到的地址。
* @param amount The amount of ERC-20 tokens to transfer.
* @param amount 要转移的 ERC-20 代币的数量。
*/functiontransfer(addressto,uint256amount)externalreturns(bool);/**
* @dev Retrieves the unit value associated with the token.
* @dev 检索与代币关联的单位值。
* @return The unit value.
* @return 单位值。
*/functiongetUnit()externalviewreturns(uint256);/**
* @dev Converts ERC-721 token to ERC-20 tokens.
* @dev 将 ERC-721 代币转换为 ERC-20 代币。
* @param tokenId The unique identifier of the ERC-721 token.
* @param tokenId ERC-721 代币的唯一标识符。
*/functionerc721ToERC20(uint256tokenId)external;/**
* @dev Converts ERC-20 tokens to an ERC-721 token.
* @dev 将 ERC-20 代币转换为 ERC-721 代币。
* @param amount The amount of ERC-20 tokens to convert.
* @param amount 要转换的 ERC-20 代币数量。
*/functionerc20ToERC721(uint256amount)external;}