# mrc-721

The purpose of the MRC-721 protocol is to establish a framework on how to create objects (referred to "soul") in the META space, and to specify the attributes and operations that these soul should have.

### Soul

Basically, if we are describing a soul using JSON. Here is an example.

```json
{
    "id": "177",
    "bind": "5c97ca08........i0",
    "miner": "bc1q.....",
    "traits": {
        "rank": "gold"
    },
    "payload": {
        "contentType": "image/jpeg",
        "uri": "ipfs://QmWKtb65YtxHuiq6GR9C5cd3TquK........NnfZMo/gold.jpg"
    }
}
```

<table><thead><tr><th>field</th><th width="171">required</th><th width="136">type</th><th>desc</th></tr></thead><tbody><tr><td>id</td><td>yes</td><td>string</td><td>The unique identifier of this soul within the collection.</td></tr><tr><td>bind</td><td>yes</td><td>inscription id</td><td>The inscription to which this soul is bound.</td></tr><tr><td>miner</td><td>no</td><td>address</td><td>The miner who inscribed this inscription.</td></tr><tr><td>traits</td><td>no</td><td>object</td><td>check <a data-mention href="#traits">#traits</a></td></tr><tr><td>payload</td><td>yes</td><td>object</td><td>check <a data-mention href="#payload">#payload</a></td></tr></tbody></table>

#### traits

If this soul has traits, you can list the trait names and their corresponding values specified for this soul in typical JSON format. This field is not required if the soul does not have any traits. Here is an example.

```json
"traits": {
    "rank": "gold",
    ...
}
```

#### payload

The purpose of the "payload" field is to record the real content of this inscription. The content can be in any valid MIME type. Here is an example.

```json
"payload": {
    "contentType": "image/jpeg",
    "uri": "ipfs://QmWKtb65YtxHuiq6GR......WDWotRitNnfZMo/gold.jpg"
}
```

<table><thead><tr><th width="259">feild</th><th width="110">required</th><th width="119">type</th><th>desc</th></tr></thead><tbody><tr><td>contentType</td><td>yes</td><td>valid mime type</td><td>This MIME type is used to describe the type of resource that the following URI points  to.</td></tr><tr><td>uri</td><td>yes</td><td>valid uri</td><td>URI point to the actual resource.</td></tr></tbody></table>

\*for valid mime type, please check&#x20;

<https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types>

\*for valid URI format, please check&#x20;

<https://en.wikipedia.org/wiki/Uniform_Resource_Identifier>

### Deployment  <a href="#deployment" id="deployment"></a>

To deploy a collection, please use the following script. Most of the fields have already been explained in previous chapters.

```json
{
    "p": "mrc-721",
    "op": "deploy",
    "tick": "gene",
    "max": "881",
    "meta": {
        "name":"gene of oicp protocol",
        "desc":"hello gene",
        "traits":"rank,..."
    },
    "code": {
        "engine": "trino",
        "version": "400", //nothing i just update my local trino version....
        "body": "sql statements"
    },
    "oops": {
        "bind": "select * from gene"
    }
}
```

#### meta

<table><thead><tr><th width="259">feild</th><th width="110">required</th><th width="119">type</th><th>desc</th></tr></thead><tbody><tr><td>name</td><td>yes</td><td>string</td><td>collection name.</td></tr><tr><td>desc</td><td>yes</td><td>string</td><td>collection description.</td></tr><tr><td>traits</td><td>no</td><td>csv</td><td>If the items in your collection have traits, please list all the trait names here.</td></tr></tbody></table>

### Operations

#### bind

The query result of this operation represents all the valid souls in the collection. &#x20;

#### move

Not required, as the soul can only move with an inscription.

### Visual <a href="#deployment" id="deployment"></a>

The following just a visual example of how a platform might use these data to display mrc-721 Inscription.  Remember it's not a suggestion for third party dev as i'm not a good VI designer.&#x20;

<figure><img src="/files/c12sMIeX1bLl8wWB0iQW" alt=""><figcaption></figcaption></figure>

### Indexer and result verification

same as previous.

### FAQ

* Does Soul need to be bound to a specific inscription?
  * Yes
* Soul can only be permanently bound to one inscription?
  * For SOULs defined under the MRC-721 protocol, the answer is yes. These SOULs are permanently bound. However, in the future, there may be other protocols that support non-permanently bound SOULs. This would require us to refine the data model of the OICP protocol to enable better retrieval of inscription movement.
* Why is it called "soul"?
  * I prefer to call it as "灵体", just can't find a suitable term.&#x20;


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://tossbot.gitbook.io/oicp-protocol/mrc-721.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
