MRC400(NFT)

NFT(Non-fungible token) is a digital asset that has its own identifiers and unique such as game items or masterpiece and cannot be replaced by another.

  • Each has a unique ID.

  • This is like a ticket. Tickets to enter the show look the same, but have different seat numbers.

  • If you are showing a movie in a theater and selling tickets,

  • Create a "movie screening plan" using MRC400, and create an admission ticket using MRC401 under the created MRC400.

Support single assets for NFT.

MRC400 supports the single assets and shares some portion of commission to a copyright holder or a profit share holder on Sales/Auction.

It supports to create Token/MRC401 and Mint and Burn by QR Code or Deeplink on MetaWallet webpage.

Copyright Information

NFT is usually used in work of art.

However, there are so confused to users who want to own the NFT. because it is unclear which art is based on.

In MRC402, copyright information can be set only once when NFT is created.

It will ensure that those who wish to own the NFT recognize which work they have by reference this information.

Burn

Burn will reduce the total issuance and it can do by an issuer only.

If there is an initial asset, it will be returned equal to the burned amount * the initial asset.

Mint

Mint will increase the total issuance and can only be issued by issuer.

If there is an initial asset, it will be reduced from the creator’s wallet by the amount of mint * initial asset.

Transfer

If you want to send multiple MRC401s, you need to send them one by one.

This is equivalent to transferring ownership of each of the multiple homes when you purchase them.

If the MRC400 ID is the same MRC401, ownership can be transferred up to 100 at a time.

Melt

Users who has got NFT can do the Melting.

But, If you specify a date that Melting function can be executed on creating the NFT, you can not do Melting before that date.

  • James sends 100 MTC to Mary with a lockup until January.01.2025.

  • Mary can not give 100 MTC to someone until that date.

  • But, If James send to Mary it after setting the initial asset as 100 MTC and melting point as January.01.2025 and issuing 1 MRC402 Mary can transfer to someone at any time and the user who has got it get 100 MTC with melting after January.01.2015.

It has the same effect as a lockup and can also be used as a transferable token.

Support various media

It can publish the NFT by MP4 files as well as images.

It saves in zzal.io because the storing in blockchain consumes excessive traffic and capacity.

zzal.io is a service that stores with distributing images and videos.

Support Platform

  • We open a website “HotDeal.io” that supports NFT trading and provides a variety of information related trading NFT.

  • It can be expected to get advertising and transaction fees.

  • ADV can be carried out in various support methods.

  • If you want to get the commission at a certain percentage on the transaction, sellers send the NFT to “HotDeal.io”,

  • “HotDeal.io” send to the seller with deducted the commission after getting the transaction amount from buyers.

  • After all, it becomes subordinate to a web service called “HotDeal.io” not a decentralized transaction.

If it sell/auction in Metacoin Network after fill out the platform name, commission rate and receiver’s address for commission on registering MRC402,

Trading is made on the Metacoin Network. The fee is distributed according to the information.

Support ShareHolder

You can enter the copyright holder on creating NFT or a user who receive the commission on trading.

We called it “ShareHolder”.

ShareHolder can put the address and commission rate up to 5 addresses.

It’s set up at the time of initial creation and can not be changed.

It supports multiple copyright holders and give stable profits on the Metacoin Network.

It helps you to be more creative.

Create MRC400 token

  • It stores the common information of MRC401 Token.
  • MRC401 Token You can specify the token to be used for sale and auction.
  • It stores information about the creator of MRC401 Token.
  • If there is no ImageURL or URL of MRC401 Token, the information of MRC400 is used.
POSThttps://rest.metacoin.network:20923/mrc400
Query parameters
Response

successful operation

Body
string

new MRC400 Token ID

Request
const response = await fetch('https://rest.metacoin.network:20923/mrc400', {
    method: 'POST',
    headers: {},
});
const data = await response.json();
Response
text
<?php
define('MTC_HOST', 'https://testnetrest.metacoin.network:20923');

// change it !!!
$from_addr = "MTPBF7OHamYp0luagfi2RcleKFyQf2qU9d530ee2";
$from_key = "-----BEGIN EC PRIVATE KEY-----\r\nMIGkAgEBBDAbXEsjPkxq54dEOS+KXquoNrJ+VK9+ukXqNLlCUCyZqcVWGxUmF9r1\r\nEURYodDy/f6gBwYFK4EEACKhZANiAARLba/Xyzdbsyq5XigDD8HhhhN0OGk87OSQ\r\n401nZISt5y8wX625P/0N+51jX8ohHks2A9di7GrMBREZKizVuM50pVUmlULRgeKU\r\nLYuguhRSvtxBIoGx5JX++Sk8SdZoRcI=\r\n-----END EC PRIVATE KEY-----\r\n";

$curl = curl_init();
curl_setopt_array($curl, array(
	CURLOPT_URL => MTC_HOST . '/nonce/' . $from_addr,
	CURLOPT_RETURNTRANSFER => true,
	CURLOPT_CONNECTTIMEOUT => 5,
	CURLOPT_TIMEOUT => 20,
	CURLOPT_SSL_VERIFYPEER => false,
	CURLOPT_SSL_VERIFYHOST => false,
	CURLOPT_POST => false,
	CURLOPT_CUSTOMREQUEST => 'GET',
));

$body = curl_exec($curl);
$err_code = curl_errno($curl);
if ($err_code) {
	$err_msg = curl_error($curl);
	throw new Exception($err_msg, $http_code);
}

$http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($http_code != '200') {
	throw new Exception($body, $http_code);
}
curl_close($curl);
$curl = null;
$tkey = $body;

$data = array(
	'owner' => $from_addr,
	'name' => 'MRC400 Project',
	'url' => 'http://mrc400-project.domain.com',
	'imageurl' => 'http://mrc400-project.domain.com/image/project.png',
	'allowtoken' => "0",                // or token id
	'category' => 'game',
	'description' => 'Metacoin MRC110 Project',
	'itemurl' => 'https://mrc400-project.domain.com/item/{id}',
	'itemimageurl' => 'https://mrc400-project.domain.com/image/item/{id}',
	'data' => 'project data',
	'socialmedia' => "",    // json_encode(array('twitter' => 'http://twitter.com/'))
	'partner' => "",        // json_encode(array($addr[1][0] => 'partner')),
	'tkey' => $tkey,
);

$sign_data = implode('|', array(
	$data['owner'], $data['name'], $data['url'], $data['imageurl'], $data['category'],
	$data['itemurl'], $data['itemimageurl'], $data['partner'], $data['data'], $tkey
));
openssl_sign($sign_data, $signature, $from_key, OPENSSL_ALGO_SHA384);
printf("Sign : [%s]\n", base64_encode($signature));

$data['signature'] = base64_encode($signature);

$curl = curl_init();
curl_setopt_array($curl, array(
	CURLOPT_URL => MTC_HOST . '/mrc400',
	CURLOPT_RETURNTRANSFER => true,
	CURLOPT_CONNECTTIMEOUT => 5,
	CURLOPT_TIMEOUT => 20,
	CURLOPT_SSL_VERIFYPEER => false,
	CURLOPT_SSL_VERIFYHOST => false,
	CURLOPT_POSTFIELDS => http_build_query($data),
	CURLOPT_POST => true,
	CURLOPT_HTTPHEADER => array('Content-Type: application/x-www-form-urlencoded')
));

$body = curl_exec($curl);
$err_code = curl_errno($curl);
if ($err_code) {
	$err_msg = curl_error($curl);
	throw new Exception($err_msg, $http_code);
}

$http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($http_code != '200') {
	throw new Exception($body, $http_code);
}
curl_close($curl);
$curl = null;


$r = json_decode($body, true);
printf("TXID : %s, MRC400 ID : %s\r\n", $r['txid'], $r['mrc400id']);

Update MRC400 token

  • It stores the common information of MRC401 Token.
  • MRC401 Token You can specify the token to be used for sale and auction.
  • If there is no ImageURL or URL of MRC401 Token, the information of MRC400 is used.
PUThttps://rest.metacoin.network:20923/mrc400/{mrc400id}
Path parameters
mrc400id*string

MRC400 Token Id

Example: "MRC400_db7da6bc848ba62e621aede40f75dc760"
Query parameters
Response

successful operation

Body
transaction_idstring

Transaction ID

Request
const response = await fetch('https://rest.metacoin.network:20923/mrc400/{mrc400id}', {
    method: 'PUT',
    headers: {},
});
const data = await response.json();
Response
{
  "transaction_id": "text"
}

Get information of MRC400

GEThttps://rest.metacoin.network:20923/mrc400/{mrc400id}
Path parameters
mrc400id*string

MRC400 Token ID

Response

successful operation

Body
ownerstring
Example: "MTPBF7OHamYp0luagfi2RcleKFyQf2qU9d530ee2"
namestring
Example: "MRC400 Project"
urlstring
Example: "https://metacoin.mrc400project.com/"
image_urlstring
Example: "https://metacoin.mrc400project.com/image/logo.png"
allow_tokenstring (int32)
Example: 0
categorystring
Example: "PFP type NFT"
datastring
descriptionstring
Example: "This project is MRC400 base PFP"
item_image_urlstring
Example: "https://metacoin.mrc400project.com/image/mrc401/{id}"
item_urlstring
Example: "https://metacoin.mrc400project.com/mrc401/{id}"
socialmediastring
partnerstring (json_encode)
createdateinteger (UnixTimestamp (UTC))

MRC400 Token generation time.

Request
const response = await fetch('https://rest.metacoin.network:20923/mrc400/{mrc400id}', {
    method: 'GET',
    headers: {},
});
const data = await response.json();
Response
{
  "owner": "MTPBF7OHamYp0luagfi2RcleKFyQf2qU9d530ee2",
  "name": "MRC400 Project",
  "url": "https://metacoin.mrc400project.com/",
  "image_url": "https://metacoin.mrc400project.com/image/logo.png",
  "allow_token": 0,
  "category": "PFP type NFT",
  "data": "text",
  "description": "This project is MRC400 base PFP",
  "item_image_url": "https://metacoin.mrc400project.com/image/mrc401/{id}",
  "item_url": "https://metacoin.mrc400project.com/mrc401/{id}",
  "socialmedia": {
    "facebook": "https://facebook.com/demo",
    "homepage": "https://homepage.com"
  },
  "partner": {
    "MTrqP2QkpBgBfNwgXsyGk3aWKtt3lQp369797277": "partner",
    "MTL97iMddTPADBUethWmlIzx3e6mawn724e865aa": "creator",
    "MT7LMaOd9bREtTUP23m0Ge83yA7VNzhUf0399772": "saller"
  }
}

Create MRC401 Token

POSThttps://rest.metacoin.network:20923/mrc401/{mrc400id}
Path parameters
mrc400id*string

MRC400 Token ID

Query parameters
Response

successful operation

Body
transaction_idstring

Transaction ID

Request
const response = await fetch('https://rest.metacoin.network:20923/mrc401/{mrc400id}', {
    method: 'POST',
    headers: {},
});
const data = await response.json();
Response
{
  "transaction_id": "text"
}

GET MRC401 Token

GEThttps://rest.metacoin.network:20923/mrc401/{mrc401id}
Path parameters
mrc401id*string

MRC401 Token ID

Example: "MRC400_db7da6bc848ba62e621aede40f75dc760_0000000000000000000000000000000000000001"
Response

successful operation

Body
ownerstring
  • You are the owner of this token.
  • If it is empty. The owner has not changed since it was created.
  • If this value is MELTED, it has melted.
mrc400string

This is the ID of the MRC400 token to which this token belongs.

item_urlstring
  • This is the URL where the information of this item is stored.
  • If this value is empty, the item_url value defined in MRC400 is used.
  • This value can be changed by the MRC400 owner.
item_image_urlstring
  • This is the URL where the image of this item is stored.
  • If this value is empty, the item_image_url value defined in MRC400 is used.
  • This value can be changed by the MRC400 owner.
groupidstring
  • A separator that groups MRC401 items of the same or similar characteristics into one.
  • This value can be changed by the MRC400 owner.
createdateinteger (UnixTimestamp (UTC))

MRC400 Token generation time.

initial_reservestring
  • The amount of tokens or coins paid by the creator at the time of item creation.
  • When melting, the owner can receive coins or tokens as much as initial_reserve.
initial_tokenstring (integer)
  • This is the ID of the token or coin paid at the time of item creation.
meltint_feestring (float)
  • This is a fee to be paid to the owner of the MRC400 upon melting.
  • This value can be changed by the MRC400 owner.
melting_dateinteger (UnixTimestamp (UTC))
  • Melted time
  • If this value is 0, it has not melted.
transferableenum
  • Whether transmission, sale or auction is possible.
  • If this value is Permanent, you can send, sell, or auction.
  • If this value is Bound, it cannot be transmitted, sold or auctioned.
  • If this value is Temporary, you can transfer, sell, or auction. However, the owner of the MRC400 can change it to Bound.
PermanentBoundTemporary
sell_dateinteger (UnixTimestamp (UTC))
  • The time the sale began.
  • If this value is "0", it is not on sale.
sell_feestring (float)
  • This is the commission (%) that the seller will pay to the MRC400 owner when purchasing the item.
  • This value can be changed by the MRC400 owner.
sell_pricestring (integer)
sell_tokenstring (integer)
auction_dateinteger (UnixTimestamp (UTC))
  • The time the auction began.
  • If this value is "0", it is not on aution.
auction_endinteger (UnixTimestamp (UTC))
  • The time the auction finish.
auction_bidding_unitstring (integer)

POST /mrc401/auction

auction_start_pricestring (integer)

POST /mrc401/auction

auction_buynow_pricestring (integer)

POST /mrc401/auction

auction_current_pricestring (integer)
  • Last auction bid amount
  • If it is 0, there are no bidders.
auction_current_bidderstring (Metacoin Adderess)
  • Last auction bidder Metacoin Address
  • If it is empty string, there are no bidders.
last_trade_dateinteger (UnixTimestamp (UTC))
  • This is the last time the purchase or auction was successful.
last_trade_amountstring (integer)
  • The amount used for a recent purchase or auction.
last_trade_tokenstring (integer)
  • The Token ID used for a recent purchase or auction.
last_trade_typeenum
  • This is how the current owner owns the item.
  • Auction : The final trading method is an auction.
  • Sell : The final trading method is Sell/Buy.
  • "" : It has never been auctioned or sold.
AuctionSell
Request
const response = await fetch('https://rest.metacoin.network:20923/mrc401/{mrc401id}', {
    method: 'GET',
    headers: {},
});
const data = await response.json();
Response
{
  "owner": "text",
  "mrc400": "text",
  "item_url": "text",
  "item_image_url": "text",
  "groupid": "text",
  "initial_reserve": "text",
  "initial_token": "text",
  "meltint_fee": "text",
  "transferable": "Permanent",
  "sell_fee": "text",
  "sell_price": "text",
  "sell_token": "text",
  "auction_bidding_unit": "text",
  "auction_start_price": "text",
  "auction_buynow_price": "text",
  "auction_current_price": "text",
  "auction_current_bidder": "text",
  "last_trade_amount": "text",
  "last_trade_token": "text",
  "last_trade_type": "Auction"
}

Transfer ownership of the MRC401 token to another user.

POSThttps://rest.metacoin.network:20923/mrc401/transfer/{mrc401id}
Path parameters
mrc401id*string

MRC401 Token ID

Query parameters
Response

successful operation

Body
transaction_idstring

Transaction ID

Request
const response = await fetch('https://rest.metacoin.network:20923/mrc401/transfer/{mrc401id}', {
    method: 'POST',
    headers: {},
});
const data = await response.json();
Response
{
  "transaction_id": "text"
}

Sell MRC401 Token

  • Sell ​​MRC401 tokens.
  • If other users purchase tokens, they will receive the specified amount of sales.
  • If sell_fee is 10, 10% of the transaction amount will be transferred to the MRC400 token holder designated in the MRC401 token, and only 90% of the fee excluding the 10% fee will be received by the MRC401 token holder.
  • If the value of sell_fee is 0, no commission is paid.
POSThttps://rest.metacoin.network:20923/mrc401/sell
Query parameters
Response

successful operation

Body
transaction_idstring

Transaction ID

Request
const response = await fetch('https://rest.metacoin.network:20923/mrc401/sell', {
    method: 'POST',
    headers: {},
});
const data = await response.json();
Response
{
  "transaction_id": "text"
}

MRC401 token sale canceled

POSThttps://rest.metacoin.network:20923/mrc401/unsell
Query parameters
Response

successful operation

Body
transaction_idstring

Transaction ID

Request
const response = await fetch('https://rest.metacoin.network:20923/mrc401/unsell', {
    method: 'POST',
    headers: {},
});
const data = await response.json();
Response
{
  "transaction_id": "text"
}

Buy MRC401 Token

POSThttps://rest.metacoin.network:20923/mrc401/buy/{mrc401id}
Path parameters
mrc401id*string

MRC401 Token ID

Example: "MRC400_dd1605be6960d9d6ba7bbeed9da033980_0000000000000000000000000000000000000001"
Query parameters
Response

successful operation

Body
transaction_idstring

Transaction ID

Request
const response = await fetch('https://rest.metacoin.network:20923/mrc401/buy/{mrc401id}', {
    method: 'POST',
    headers: {},
});
const data = await response.json();
Response
{
  "transaction_id": "text"
}

Melt MRC401

  • Melt the MRC401 token.
  • Once melted, the item cannot be transferred or sold to others.
  • When the MRC401 Token is created, it will be received in the owner's wallet as much as the initial_price.
  • If the meltint_fee is 10, 10% of the initial_price will be transferred to the MRC400 token holder specified in the MRC401 token, and only 90% of the fee excluding the 10% fee will be received by the MRC401 token holder.
  • If the value of meltint_fee is 0, no fee is paid.
POSThttps://rest.metacoin.network:20923/mrc401/melt/{mrc401id}
Path parameters
mrc401id*string

MRC401 Token ID

Query parameters
Response

successful operation

Body
transaction_idstring

Transaction ID

Request
const response = await fetch('https://rest.metacoin.network:20923/mrc401/melt/{mrc401id}', {
    method: 'POST',
    headers: {},
});
const data = await response.json();
Response
{
  "transaction_id": "text"
}

Auction MRC401 Token

  • Auction ​​MRC401 tokens.
  • You can cancel an auction using the /mrc401/unauction protocol.
  • If there is a bidder, the auction cannot be canceled.
  • If sell_fee is 10, 10% of the transaction amount will be transferred to the MRC400 token holder designated in the MRC401 token, and only 90% of the fee excluding the 10% fee will be received by the MRC401 token holder.
  • If the value of sell_fee is 0, no commission is paid.
POSThttps://rest.metacoin.network:20923/mrc401/auction
Query parameters
Response

successful operation

Body
transaction_idstring

Transaction ID

Request
const response = await fetch('https://rest.metacoin.network:20923/mrc401/auction', {
    method: 'POST',
    headers: {},
});
const data = await response.json();
Response
{
  "transaction_id": "text"
}

MRC401 token auction canceled

  • If there is a bidder, the auction cannot be canceled.
POSThttps://rest.metacoin.network:20923/mrc401/unauction
Query parameters
Response

successful operation

Body
transaction_idstring

Transaction ID

Request
const response = await fetch('https://rest.metacoin.network:20923/mrc401/unauction', {
    method: 'POST',
    headers: {},
});
const data = await response.json();
Response
{
  "transaction_id": "text"
}

Bid MRC401 Token

POSThttps://rest.metacoin.network:20923/mrc401/bid/{mrc401id}
Path parameters
mrc401id*string

MRC401 Token ID

Example: "MRC400_dd1605be6960d9d6ba7bbeed9da033980_0000000000000000000000000000000000000001"
Query parameters
Response

successful operation

Body
transaction_idstring

Transaction ID

Request
const response = await fetch('https://rest.metacoin.network:20923/mrc401/bid/{mrc401id}', {
    method: 'POST',
    headers: {},
});
const data = await response.json();
Response
{
  "transaction_id": "text"
}

Finish MRC401 token auction

  • Process the auction closing.
  • This replaces the JobScheduler inside the BlockChain.
  • It can be called without permission or signature, and the auction is closed according to the already established procedure.
  • If you call it before the auction end time, you will get an error.
  • If you call for an auction that has already ended, you will get an error.
GEThttps://rest.metacoin.network:20923/mrc401/auctionfinish/{mrc401id}
Path parameters
mrc401id*string

MRC401 Token ID

Example: "MRC400_dd1605be6960d9d6ba7bbeed9da033980_0000000000000000000000000000000000000001"
Response

successful operation

Body
transaction_idstring

Transaction ID

Request
const response = await fetch('https://rest.metacoin.network:20923/mrc401/auctionfinish/{mrc401id}', {
    method: 'GET',
    headers: {},
});
const data = await response.json();
Response
{
  "transaction_id": "text"
}

Last updated