# Interoperability

<figure><img src="https://1456550285-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoWTlPaoHd1McSakqMigu%2Fuploads%2Fgit-blob-1057fd6c3004f60f35bd6245dacd4e5af511f4c9%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

MSquared, besides being a platform for building high-density virtual world experiences, also features object interoperability as a first-class feature. This enables users to take their virtual possessions between many worlds with minimal work from you as a developer.

This interoperability is achieved through a combination of on-chain NFT records, an omnichain blockchain indexer, MML for interoperable object definition, and a mechanism for permissioned object storage and content moderation.

This guide explains in more detail how this mechanism works, and the current and in-development capabilities.

{% hint style="info" %}
NFTs don't necessarily need to be owned and custodied by users in a financially tradeable way - the same standard can be used for more traditional digital "entitlements" by using a mechanism called [Soulbound Tokens](https://www.coindesk.com/learn/what-are-soulbound-tokens-the-non-transferrable-nft-explained/)
{% endhint %}

### Interoperability Commitment

MSquared wants to help grow a network of interconnected experiences which the whole is greater than the sum of the parts - enabling free movement of users and their possessions between metaverses.

Part of the terms of using MSquared's platform is the commitment to this interoperability for at least user's appearance - their Characters, Clothing, Accessories and Emotes, given they pass your [moderation policy](https://docs.msquared.io/creation/unreal-development/features-and-tutorials/communication/moderation).

### Types of Interoperable Object

Below are currently planned types of interoperable objects, and their current implementation status

<table data-full-width="false"><thead><tr><th>Type</th><th>Description</th><th width="91.5" data-type="checkbox">Status</th><th>Mechanism</th></tr></thead><tbody><tr><td>🖼️📷 Image</td><td>Typical picture-based NFTs - could be used as profile pictures or placing in world into photo frames etc</td><td>true</td><td>Reading the <code>image</code> field on the NFT metadata</td></tr><tr><td>💃🕺 Character</td><td>Humanoid characters that can be used as the player's avatar, or used for non-player characters</td><td>true</td><td>Reading the <code>mml</code> field on the NFT metadata linking to an MML <code>&#x3C;m-character></code> - see <a href="../creation/unreal-development/features-and-tutorials/avatars/creating-mml-avatars-with-blender-and-free-rigging-tools">MML Avatars</a></td></tr><tr><td>🪩🪑 Dynamic Object</td><td>Spawnable items that may be static or interactable - a chair, a jukebox, a quiz machine, etc</td><td>true</td><td>Reading the <code>mml</code> field for a <code>wss://</code> to a live MML object - see <a href="#types-of-interoperable-object">https://mml.io</a></td></tr><tr><td>👜🎩 Accessory</td><td>Static 3D models attached to particular part of a Character such as hats, glasses, backpacks, etc</td><td>false</td><td>Currently supported as part of a Character</td></tr><tr><td>👕👖 Clothing</td><td>Skeletal meshes layered on top of a base Character</td><td>false</td><td>Currently supported as part of a Character</td></tr><tr><td>🥳👏 Emotes</td><td>Short animations that can be played to express emotions or interact</td><td>false</td><td>Currently in exploration</td></tr></tbody></table>

### Interoperable Ownership

Ownership between different metaverses is established by associating one or many web3 wallets with a particular user.

MSquared supports users linking self-owned web3 wallets such as [MetaMask ](https://metamask.io/)out of the box. Enterprise customers can request more bespoke integrations if they have existing web3 identity systems.

<figure><img src="https://1456550285-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoWTlPaoHd1McSakqMigu%2Fuploads%2Fgit-blob-ff29128080926eb0c91775120d007f5fb082042c%2Fimage.png?alt=media" alt="" width="320"><figcaption><p>Wallet linking is a bundled feature of the reference web portal</p></figcaption></figure>

#### Delegation

Delegation is a method for NFTs (often high value ones) to be non-permanently granted in a read-only manner to another "hot" wallet which is used for more day-to-day interaction. MSquared supports both [https://warm.xyz/](https://warm.xyz) and <https://delegate.xyz/> (v1 and v2) mechanisms.

#### Ownership Logic

While delegation protocols technically support concurrent delegation of an NFT to multiple wallets, the following logic is in place to prevent scenarios where an NFT being used for access gating could be used to allow large numbers of people to share the same "ticket":

* For any wallet, it can only be linked to one user account at a time
* For any token, it can only be delegated to one wallet a time
  * If there are multiple delegations, the most recent delegation is prioritized
  * This is true across all supported delegation methods (e.g. a recent [warm.xyz](https://warm.xyz) delegation would take priority over a less recent [delegate.xyz](https://delegate.xyz) delegation)

#### User Collections

Successfully imported interoperable objects will be visible in the user's [Collection](https://docs.msquared.io/creation/unreal-development/features-and-tutorials/user-collections#theinventorysystem-overview), which combines both "foreign" interoperable objects across multiple blockchains with "native" off-chain digital goods for your metaverse.

### Supported NFT Tokens & Metadata

We currently support ERC-721 and ERC-1155 tokens

{% hint style="info" %}
Delegation of ERC-1155 balances is not currently supported
{% endhint %}

The following fields within an ERC-721/ERC-1155 metadata JSON are respected.\\

| Field         | Usage                                                                                                         |
| ------------- | ------------------------------------------------------------------------------------------------------------- |
| `name`        | The canonical name of the object in a user’s collection                                                       |
| `description` | The additional descriptive text for a user, used in the collections frontend react components                 |
| `image`       | Used as a preview image for any collection item, and allows its usage as a profile picture                    |
| `mml`         | The URL to a static MML document containing an `<m-character>`. Allows the user to use it as a default avatar |
| ….            | Other fields are imported, and available for querying in Unreal and Web APIs                                  |

### Classification & Moderation

{% hint style="warning" %}
While the interoperable network is in Early Access, interoperable objects are currently restricted to those approved by MSquared directly, rather than being moderated - the wider moderated network will be launching later in 2025
{% endhint %}

Some types of interoperable objects may not be suitable for your particular experience. All objects within the interoperable network will be subject to a classification process, resulting in tags being applied to the object.

Metaverses will be able to define your interoperable object import policy based upon these tags.

<figure><img src="https://1456550285-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoWTlPaoHd1McSakqMigu%2Fuploads%2Fgit-blob-c0d424546e6f3b806a30e977606393e1ccfd981e%2Fimage.png?alt=media" alt=""><figcaption><p>All interoperable content is classified with tags, and metaverses are able to filter inbound objects by those tags</p></figcaption></figure>

### Permissioned Storage

While many NFT projects host their interoperable object content in a publicly accessible location, for many projects this many be unwanted or impractical.

Permissioned Storage is a mechanism where interoperable object content URLs can be placed on-chain, but the underlying asset is not publicly available for download. The service ensures any reader owns the underlying NFT to get access to the content.

{% hint style="info" %}
Permissioned objects are currently in Early Access with our Enterprise partners - please reach out via support if you are interested
{% endhint %}

### Adding Objects to the Network

While the interoperability network is in Early Access we’re interested in any interoperable content, starting with Avatars and Accessories.

If you have an NFT collection you’d like to be part of the network please reach out on Discord!
