πŸ“™mrc-721

introduce to MRC-721 protocol, the first object protocol within meta layer

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.

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

id

yes

string

The unique identifier of this soul within the collection.

bind

yes

inscription id

The inscription to which this soul is bound.

miner

no

address

The miner who inscribed this inscription.

traits

no

object

check traits

payload

yes

object

check payload

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.

"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.

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

feild
required
type
desc

contentType

yes

valid mime type

This MIME type is used to describe the type of resource that the following URI points to.

uri

yes

valid uri

URI point to the actual resource.

*for valid mime type, please check

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

*for valid URI format, please check

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

Deployment

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

{
    "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

feild
required
type
desc

name

yes

string

collection name.

desc

yes

string

collection description.

traits

no

csv

If the items in your collection have traits, please list all the trait names here.

Operations

bind

The query result of this operation represents all the valid souls in the collection.

move

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

Visual

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.

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.

Last updated