This standard is an extension to EIP-721. It proposes a multi-layer filesystem-like hierarchical NFTs. This standard provides interfaces to get parent NFT or children NFTs and whether NFT is a leaf node or root node, maintaining the hierarchical relationship among them.
This EIP standardizes the interface of filesystem-like hierarchical NFTs and provides a reference implementation.
Hierarchy structure is commonly implemented for file systems by operating systems such as Linux Filesystem Hierarchy (FHS).

Websites often use a directory and category hierarchy structure, such as eBay (Home -> Electronics -> Video Games -> Xbox -> Products), and Twitter (Home -> Lists -> List -> Tweets), and Reddit (Home -> r/ethereum -> Posts -> Hot).

A single smart contract can be the root, managing every directory/category as individual NFT and hierarchy relations of NFTs. Each NFT's tokenURI may be another contract address, a website link, or any form of metadata.
The advantages and the advancement of the Ethereum ecosystem of using this standard include:
The use cases can include:
In the future, with the development of the data availability solutions of Ethereum and an external permissionless data retention network, the content (posts, listed items, or tweets) of these platforms can also be entirely stored on-chain, thus realizing fully decentralized applications.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 and RFC 8174.
Every compliant contract must implement this proposal, EIP-721 and EIP-165 interfaces.
Optional Extension: Enumerable
Optional Extension: Burnable
Optional Extension: ParentTransferable
Optional Extension: Access Control
As mentioned in the abstract, this EIP's goal is to have a simple interface for supporting Hierarchical NFTs. Here are a few design decisions and why they were made:
All NFTs will make up a hierarchical relationship tree. Each NFT is a node of the tree, maybe as a root node or a leaf node, as a parent node or a child node.
This proposal standardizes the event Minted to indicate the parent and child relationship when minting a new node. When a root node is minted, parentId should be zero. That means a token id of zero could not be a real node. So a real node token id must be greater than zero.
In a hierarchical tree, it's common to query upper and lower nodes. So this proposal standardizes function parentOf to get the parent node of the specified node and standardizes function childrenOf to get all children nodes.
Functions isRoot and isLeaf can check if one node is a root node or a leaf node, which would be very useful for many cases.
This proposal standardizes three functions as an extension to support enumerable queries involving children nodes. Each function all have param parentId, for compatibility, when the parentId specified zero means query root nodes.
In some cases, such as filesystem, a directory or a file could be moved from one directory to another. So this proposal adds ParentTransferable Extension to support this situation.
In a hierarchical structure, usually, there is more than one account has permission to operate a node, like mint children nodes, transfer node, burn node. This proposal adds a few functions as standard to check access control permissions.
This proposal is fully backward compatible with EIP-721.
Implementation: EIP-6150
No security considerations were found.
Copyright and related rights waived via CC0.