ERC-5606 Multiverse NFT bundle standard (Multiverse NFTs)

Final · NFTs & multi-token · created 2022-09-06

This standard bundles NFTs of the same digital asset, issued separately across different metaverses and games, into a single multiverse NFT that can be owned and traded as one unit or unbundled back into individual tokens.

Why it is needed

Digital assets such as sneakers or game items are issued as separate ERC-721 or ERC-1155 tokens on each metaverse or blockchain game. Even when they are really the same asset, the tokens issued on different platforms have no relationship to each other, so it is hard to prove on-chain that the asset is truly scarce. An issuer has to mint the same asset again and again, once per platform, and a holder has no way to own or trade the versions on several platforms as one unit. NFTs were meant from the start to provide proof of scarcity and interoperability, but the interoperability problem was never solved and was left for each app to handle on its own. This standard provides a framework that bundles related NFTs scattered across multiple platforms into a single multiverse NFT, expressing their relationship and ownership through an on-chain standard rather than at the app level.

What to implement

In depth

DelegateData struct

Delegate token information is represented by the DelegateData struct. It has three fields, contractAddress, tokenId and quantity, which identify the NFT issued on each platform. A delegate NFT can follow either the ERC-721 or the ERC-1155 standard, and the quantity field allows it to hold ERC-1155 tokens that have a notion of quantity.

initBundle: initialization that fixes the configuration

initBundle mints a new multiverse NFT and assigns it to msg.sender. A freshly initialized multiverse NFT is empty and does not yet hold any delegate NFTs. The contract addresses and token IDs of the delegate tokens are set at initialization and cannot be changed afterward. This design prevents the unintended case where unrelated NFTs are bundled together by mistake.

bundle: transfer after approval

bundle takes the multiverse NFT token ID and an array of DelegateData, and transfers the delegate NFTs to the multiverse NFT contract. Before the call, the owner must have approved this multiverse NFT contract for the delegate NFTs so that the transfer can be done programmatically. Once bundled, the multiverse NFT owns the versions of this digital asset that exist on the various platforms.

unbundle: only the owner can take them out

unbundle takes the specified delegate NFTs out of the multiverse NFT contract and transfers them to msg.sender. This transfer happens only if msg.sender is the owner of that multiverse NFT. The delegate NFTs taken out can be used or sold individually on their platform.

Partial bundling and partial unbundling

bundle and unbundle take a DelegateData array in order to support partial bundling and partial unbundling. For example, a user who initialized a bundle with three delegate NFTs can bundle or unbundle fewer than three at any time. Conversely, they cannot bundle or unbundle more than three. Handling them selectively also requires the individual token ID of each delegate NFT.

Compatibility with existing standards

This standard is fully compatible with ERC-721 and ERC-1155. Third-party applications that do not support this proposal can keep using the original NFT standards without any problem. The original text has the status Final, so this is a finalized standard.

Things to watch out for

Original ERC · ← ERCs