> ## Documentation Index
> Fetch the complete documentation index at: https://docs.therootnetwork.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Off-Chain Assets

> Off-chain assets, as the name implies, lives on an off-chain database and ownership is managed by the creator.

## Identifier

Off-chain assets need to be globally unique and identifiable just like on-chain assets. To achieve this for Futureverse assets, we have built an off-chain ownership repository to register any off-chain assets against the Asset Register.

<table><thead><tr><th width="175">Property</th><th width="373.3333333333333">Description</th><th>Example</th></tr></thead><tbody><tr><td>Creator ID</td><td>Randomly generated UUID for the creator. This will be provided to you and only you will be able access it.</td><td><code>40877d72-9957-4de7-af77-1ee9f54a529e</code></td></tr><tr><td>Creator Collection ID</td><td>A creator’s collection ID. This should be unique for each creator. It can be any string.</td><td><code>12</code> | <code>pb\_1232124</code>| <code>bedde205-5af2-423b-9092-088c8951a2ea</code></td></tr><tr><td>Token ID (optional)</td><td>The token ID is for uniquely identifying NFT assets in a collection. It will be empty if it is SFT (ERC1155 equivalent). This can be any string (like a UUID), however, it is best practice to stick to a number.</td><td><code>4637</code> | <code>61d21cf3-6e0d-4b9d-a2c8-55583eb81a84</code></td></tr><tr><td>Asset ID</td><td>This is the combination of <code>creatorAddress</code>,<code>creatorCollectionId</code> & <code>tokenId</code>. SFT assets will not have a Token ID.</td><td><code>40877d72-9957-4de7-af77-1ee9f54a529e:12:4637</code></td></tr></tbody></table>

### DID

Since ownership resolution needs to be globally unique we can use the `did:fv-asset` DID method directly with the already globally unique Asset ID.

#### Example

`did:fv-asset:off-chain:40877d72-9957-4de7-af77-1ee9f54a529e:12:4637`

***

## Asset types

Just like on-chain assets which are classified as ERC721 (NFT) and ERC1155 (equivalent to an SFT), off-chain assets can be defined in the same way.

### NFT

A unique asset just like ERC721.

#### Defined by

`off-chain:{creatorId}:{creatorCollectionId}:{tokenId}`

For example: `off-chain:40877d72-9957-4de7-af77-1ee9f54a529e:12:4637`

### SFT

A collection that can store an infinite amount of assets defined by the same asset ID.

#### Defined by

`off-chain:{creatorId}:{creatorCollectionId}`

For example: `off-chain:40877d72-9957-4de7-af77-1ee9f54a529e:12`

***

## Register Off-Chain Asset 🔒

Unlike creating assets on the chain, off-chain assets must be registered with the Asset Register before they can then be [registered with the schema](/asset-register/guides/schema-management/register-asset-with-schema).

Assuming the schema for the off-chain asset is already created, the following illustrates the process of fully registering a new off-chain asset with the Asset Register to generate an asset tree.

```mermaid
flowchart TD

  A[Experience Backend] --> B{Is the Off-Chain Asset registered with AR}
  B -->|Yes| C{Is the Off-Chain Asset linked to a schema?}
  B ---->|No| E[Register Asset]
  C --> |Yes| F[Registration Complete]
  C --> |No| D[Register Off-Chain Asset with schema]
  E --> C
  D --> F
```

### Register Asset - GraphQL Mutation

```graphql
mutation RegisterOffChainAsset($input: RegisterOffChainAssetInput!) {
  registerOffChainAsset(input: $input) {
    ... on RegisterOffChainAssetSuccess {
      offChainAsset {
        assetId
        creator
        tokenId
        creatorCollectionId
        type
      }
    }
    ... on RegisterOffChainAssetFailure {
      errors {
        message
        extensions {
          code
        }
      }
    }
  }
}
```

```json
{
  "input": {
    "creatorCollectionId": "20001",
    "creatorId": "eb117567-e455-4abd-b8e1-a7e451b96b23",
    "tokenId": "1"
  }
}
```
