mrc-101
the first inter-blockchain NFT Transmigration protocol
Last updated
the first inter-blockchain NFT Transmigration protocol
Last updated
The purpose of the MRC-101 protocol is to facilitate the transmigration of NFTs from other chains to Ordinals. The term "transmigration" typically refers to the movement of the soul to another body after death, which, in my opinion, perfectly captures the essence of this protocol.
Compared to the previous protocols (brc-20c, mrc-721), this protocol is slightly more complex as which includes several participants. The relationships between these participants are shown in the diagram below.
The table below outlines the main participants in this protocol.
Source NFT
A ERC-721 compatible NFT to be transmigrated.
Portal contract
A smart contract is deployed on the original chain to burn the "Source NFT" and then generate an event that includes all the essential information of the "Source NFT" after the burn.
Soul
Composed by the binding rules defined in the "Protocol inscription", it carries essential information about the NFT on the original chain, such as its contract address, ID, traits, and image links, etc. It should be noted that the "Soul" can also carry protocol-specified attributes that were not present in the "Source NFT".
Target inscription
This inscription is used to carry visual content on Ordinals, representing the appearance of an NFT after transmigration. While the content of this inscription is primarily expected to be images, it can actually be of any type, including images, web pages, or even recursive inscriptions.
Bind inscription
This inscription includes the necessary information to bind the "Soul" and the "Target Inscription" together.
Protocol inscription
This inscription is used to define a new protocol instance, which can include its own tick and binding rules. Binding rules are used to define how to form a ”Soul“ and how to bind the ”Soul“ to the ”Target inscription“ based on the information provided by the ”Bind Inscription“.
The following steps are commonly use to deploy a protocol instance for devs.
deploy a "Protocol Inscription" to define your own tick and binding rules.
deploy a "Portal contract" to define lock logic and other portal rules (not necessary, you can also use existed portal).
The following steps are commonly use to complete a transmigration for general users.
Inscribe a "Target Inscription" on Ordinals (In fact, the previous inscription can also be used, it is not necessary to create a new one in this step).
Inscribe a "Bind inscription" on Ordinals (strongly recommend to finish this step before step4).
Ensure "Source NFT" approved the "Portal contract" as a handler.
Call method specified by "Portal contract" to transmigrate the "Source NFT".
Please use the following format to deploy an MRC-101 protocol instance. Each instance of MRC-101 can have its own tick, and each tick is represented as a collection. Additionally, each instance can define its own code to specify binding rules, such as setting start time, end time, and additional attributes, etc. For more details, please refer to the example in the next chapter. Similar to the MRC-721 protocol, the query result of the oops.bind
field represents all valid bindings.
meta.from
no
the name of the source chain
meta.portal
no
the portal contract address
As explained earlier, you can inscribe any image or other content that you desire.
p
true
protocol name, fill mrc-101 in this case.
tick
true
The specific name of the MRC-101 instance.
op
true
operation name, fill bind in this case.
collection
true
The contract address of the "Source NFT".
id
true
The id of the "Source NFT".
bindCode
true
Self defined code can be any bigint value. This code is used to ensure that the combination of collection + id + bindCode
is unique for a given address. If this combination is not unique, the first occurrence is considered valid.
bindTo
true
Specified the inscription ID of the "Target Inscription".
Each row in the "oops.bind" query result represents a valid "Soul". Each "Soul" should have the following fields:
bind
true
The inscription ID to which this soul is bound.
source
true
The chain name to which the "Source NFT" comes from.
name
true
The name of the "Source NFT".
symbol
true
The symbol of the "Source NFT".
collection
true
The contract address of the "Source NFT".
id
true
The id of the "Source NFT".
tokenUri
true
The token uri of the "Source NFT".
traits
false
payload
false
In order to develop your own MRC-101 protocol instance, it is recommended that you deploy your own smart contract on the original chain to lock the NFTs and define your portal rules. Typically, such a contract should have a method to lock the NFT, which should accept the following parameters at a minimum:
collection
no
The contract address of the "Source NFT" is required in most cases. However, in certain situations where a portal contract is only open for a specific NFT collection, this field may not be necessary as an input.
id
yes
The id of the ”Source NFT".
to
yes
BTC address that use to inscribe the "Bind inscription".
bindCode
yes
same as previous.
The following event should be emitted upon successful execution of this method.
collection
yes
The build-in contract address of the ”Source NFT" or "collection" from input parameters.
id
yes
"id" from input parameters.
bindCode
yes
"bindCode" from input parameters.
to
yes
"to" from input parameters.
name
yes
The return value of IERC721Metadata.name()
symbol
yes
The return value of IERC721Metadata.symbol()
uri
yes
The return value of IERC721Metadata.tokenURI(id)
Good question. The main difference is that MRC-101 does not involve actual cross-chain transfers. Instead, it proves the authenticity of a certain inscription by binding the soul to that inscription, indicating that the inscription truly originates from a specific NFT. The underlying blockchain system is not aware of the existence of these souls. On the other hand, Layer 0 enables the movement of assets in a way that is recognizable by the underlying blockchain system.
Interesting question, i suppose the answer is yes.
check
check