Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...







Mint your first NFT derivative work











interface INRC20 is IERC20Metadata {
function initialize(
address share_,
address initialMintTo_,
uint256 initialMintAmount_,
string memory name_,
string memory symbol_
) external;
function burn(address account, uint256 value) external returns (uint256);
function mint(address account, uint256 value) external returns (uint256);
function consume(address account, uint256 value) external returns (uint256);
function consumed() external view returns (uint256);
}
// SPDX-License-Identifier: CC0-1.0
pragma solidity ^0.8.10;
interface IERC721X {
// Events
/// @dev Emits when a combo is minted.
/// @param owner The owner address of the newly minted combo
/// @param comboId The newly minted combo identifier
event ComboMinted(address indexed owner, uint256 indexed comboId);
// Structs
/// @param tokenAddress The NFT's collection address
/// @param tokenId The NFT identifier
struct Token {
address tokenAddress;
uint256 tokenId;
}
/// @param amount The number of NFTs used
/// @param licenseId Which license to be used to verify this component
struct Component {
Token token;
uint256 amount;
uint256 licenseId;
}
// Functions
/// @dev Mints a NFT by remixing multiple existing NFTs.
/// @param components The NFTs remixed to mint a combo
/// @param hash The hash representing the algorithm about how to generate the combo's metadata when remixing multiple existing NFTs.
function mint(
Component[] calldata components,
string calldata hash
) external;
/// @dev Retrieve a combo's components.
function getComponents(
uint256 comboId
) external view returns (Component[] memory);
}// SPDX-License-Identifier: CC0-1.0
pragma solidity ^0.8.10;
import "./IERC721X.sol";
interface INFTNetIndexer {
/// @dev Verify if the `child` was created by remixing the `parent` with other NFTs.
/// @param parent Any NFT
/// @param child Any NFT
function isParent(
IERC721X.Token calldata parent,
IERC721X.Token calldata child
) external view returns (bool);
/// @dev Verify if `a` and `b` have common `parent`s
/// @param a Any NFT
/// @param b Any NFT
function isSibling(
IERC721X.Token calldata a,
IERC721X.Token calldata b
) external view returns (bool, IERC721X.Token[] memory commonParents);
/// @dev Return all parents of a `token`
/// @param token Any NFT
/// @return parents All NFTs used to mint the `token`
function getParents(
IERC721X.Token calldata token
) external view returns (IERC721X.Token[] memory parents);
}// SPDX-License-Identifier: CC0-1.0
pragma solidity ^0.8.10;
import "./IERC721X.sol";
interface ILicense {
/// @dev Verify the permission when minting a combo
/// @param user The minter
/// @param combo The new NFT to be minted by remixing multiple existing NFTs
/// @return components The multiple existing NFTs used to mint the new combo
function verify(
address user,
IERC721X.Token calldata combo,
IERC721X.Component[] calldata components
) external returns (bool);
}