A subordinate ERC721 contract is a type of non-fungible token (NFT) that follows the ownership of a dominant NFT. The dominant NFT can be an ERC721 contract that does not have any additional features.
ADD-ON, Jan, 15th To avoid confusion with hierarchical structures, a subordinate token does not perform any minting, transfer, approval, etc. When it is deployed, if address 0xA owns the token ID #100 of the dominant token, address 0xA also owns token ID #100 of the subordinate.
If dominant #100 is tranferred, it emits a Transfer event, but the subordinate will be also “transferred” but no events will be emitted.
This is a very specific case, and it is best to look at the implementation to fully understand what it means.
Why
In 2021, when we started Everdragons2, we had in mind using the head of the dragons for a PFP token based on the Everdragons2 that you own. Here is an example of a full dragon
https://github.com/ndujaLabs/ds-protocol/blob/main/assets/Soolhoth.png
and here is just the head
https://github.com/ndujaLabs/ds-protocol/blob/main/assets/Soolhoth_PFP.png
The question was, “Should we allow people to transfer the PFP separately from the primary NFT?” It didn’t make much sense. At the same time, how to avoid that?
ERC721Subordinate introduces subordinate tokens that are owned by whoever owns the dominant token. As a result, the subordinate token cannot be approved or transferred separately from the dominant token. It is transferred when the dominant token is transferred.
Some use cases
- A token that represents a specific aspect of a dominant token (like the Everdragons2 PFP).
- A token that represents an asset of the dominant token (think of the dominant as a wallet).
- A token that adds missed features to the dominant token.
You can see an ERC721Subordinate like a soulbound token, where the soul is not a wallet, but an NFT. Starting from this very simple concept, there are plenty of services that become possible thanks to it.
Update April
Most markeplaces do not see subordinate tokens because they listen to Transfer events. In latest version of the DS-protocol, I implemented a deferred emission that happens anytime the dominant is transferred. This, however, is not applicable to existing, immutable standard tokens.