50 lines
1.4 KiB
Solidity
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;
|
|
}
|