DCIPs/assets/eip-5007/contracts/IERC5007Composable.sol

50 lines
1.4 KiB
Solidity

// SPDX-License-Identifier: CC0-1.0
pragma solidity ^0.8.0;
interface IERC5007Composable /* is IERC5007 */ {
/**
* @dev Returns the ancestor token id of the NFT.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function rootTokenId(uint256 tokenId) external view returns (uint256);
/**
* @dev Mint a new token from an old token.
* The rootTokenId of the new token is the same as the rootTokenId of the old token
*
* Requirements:
*
* - `oldTokenId` must exist.
* - `newTokenId` must not exist.
* - `newTokenOwner` cannot be the zero address.
* - `newTokenStartTime` require(oldTokenStartTime < newTokenStartTime && newTokenStartTime <= oldTokenEndTime)
*/
function split(
uint256 oldTokenId,
uint256 newTokenId,
address newTokenOwner,
int64 newTokenStartTime
) external;
/**
* @dev Merge the first token and second token into the new token.
*
* Requirements:
*
* - `firstTokenId` must exist.
* - `secondTokenId` must exist. require((firstToken.endTime + 1) == secondToken.startTime)
* - `newTokenOwner` cannot be the zero address.
* - `newTokenId` must not exist.
*/
function merge(
uint256 firstTokenId,
uint256 secondTokenId,
address newTokenOwner,
uint256 newTokenId
) external;
}