// SPDX-License-Identifier: CC0-1.0 pragma solidity ^0.8.16; interface IERC6059 { struct DirectOwner { uint256 tokenId; address ownerAddress; bool isNft; } event NestTransfer( address indexed from, address indexed to, uint256 fromTokenId, uint256 toTokenId, uint256 indexed tokenId ); event ChildProposed( uint256 indexed tokenId, uint256 childIndex, address indexed childAddress, uint256 indexed childId ); event ChildAccepted( uint256 indexed tokenId, uint256 childIndex, address indexed childAddress, uint256 indexed childId ); event AllChildrenRejected(uint256 indexed tokenId); event ChildTransferred( uint256 indexed tokenId, uint256 childIndex, address indexed childAddress, uint256 indexed childId, bool fromPending ); struct Child { uint256 tokenId; address contractAddress; } function ownerOf(uint256 tokenId) external view returns (address owner); function directOwnerOf( uint256 tokenId ) external view returns (address, uint256, bool); function burn( uint256 tokenId, uint256 maxRecursiveBurns ) external returns (uint256); function addChild( uint256 parentId, uint256 childId, bytes memory data ) external; function acceptChild( uint256 parentId, uint256 childIndex, address childAddress, uint256 childId ) external; function rejectAllChildren(uint256 parentId, uint256 maxRejections) external; function transferChild( uint256 tokenId, address to, uint256 destinationId, uint256 childIndex, address childAddress, uint256 childId, bool isPending, bytes memory data ) external; function childrenOf( uint256 parentId ) external view returns (Child[] memory); function pendingChildrenOf( uint256 parentId ) external view returns (Child[] memory); function childOf( uint256 parentId, uint256 index ) external view returns (Child memory); function pendingChildOf( uint256 parentId, uint256 index ) external view returns (Child memory); function nestTransferFrom( address from, address to, uint256 tokenId, uint256 destinationId, bytes memory data ) external; }