# MRC-721

## 介绍

MRC-721 是一个基于 MetaID 的 NFT 专辑协议。尽管在 MetaID 协议中，每条数据均为 NFT，但我们仍需要一个专门的 NFT 专辑协议，以方便 NFT 以专辑方式展示和销售。本协议适用于各种 NFT 专辑，包括音乐 NFT 专辑、艺术创作 NFT 专辑、图书 NFT 专辑等。

***

## 协议格式

### 专辑

#### 基础路径

`/nft/mrc721/{collection_name}`

MRC-721 采用路径区分不同的专辑，用户应该将 NFT PIN 创建在 `/nft/mrc721/{collection_name}` 下，即约定了相关 NFT 归属于专辑 `{collection_name}`，PIN 格式不限。

例如，用户要创建名字为“metabot”的 NFT 专辑，则需要将所有相关 NFT PIN 文件创建在 `/nft/mrc721/metabot` 路径下。

#### 要点说明

1. 存放在 `/nft/mrc721/` 路径下的所有 NFT 文件以及其他文件，均不接受 `modify`、`revoke` 和 `hide` 操作符。也就是说，MRC-721 协议下的所有文件都不能修改、撤销和隐藏。
2. `{collection_name}` 为任意字符，只要最后的路径符合 MetaID PIN 的路径规范即可。

***

### 专辑说明协议

#### 路径

`/nft/mrc721/{collection_name}/collection_desc`

该协议为对其所在路径的专辑的说明和介绍。只有存在 `collection_desc` 协议文件的 NFT 专辑才会被后端索引器索引。

#### 专辑说明协议格式

```json
{
  "name": "the full name of the collection",
  "totalSupply": 5, // 该专辑的最大发行量，可接受值范围[-1~1e12]；默认值为 -1，表示无限制；可选
  "royaltyRate": 5, // 该专辑的销售版税设置，单位为百分比，5 即为 5%，范围 0-20，默认值为 0；可选
  "desc": "description of the collection", // 可选
  "website": "https://the-website-of-the-collection", // 可选
  "cover": "metafile://your-nft-cover-pinid", // 可选
  "metadata": "any data if needed" // 可选
}
```

#### 要点说明

1. `collectionid` 为 `collection_desc` 协议的 PINID，`collectionid` 为专辑的索引值。
2. `totalSupply` 为专辑的最大发行量，索引器只索引专辑路径下与 `totalSupply` 值对应的 PIN。超过 `totalSupply` 数量的 PIN 视为不是该专辑的有效 PIN。例如，`totalSupply` 为 999，则只认为首先创建的前 999 个 PIN 为该专辑下的有效 PIN。
3. 每个专辑下只有一个 `collection_desc` 协议。如果一个 NFT 专辑有多个 `collection_desc` 协议，则只采用第一个，忽略后来的协议。

***

### NFT Item 说明协议

#### 路径

`/nft/mrc721/{collection_name}/item_desc`

该协议用于对专辑内各个 Item 的说明。此协议为可选项，是对相关 NFT Item 的补充性、额外性说明。即使缺失，也不会影响 NFT 专辑的创建和索引。

#### NFT Item 说明协议格式

```json
{
  "items": [
    {
      "pinid": "the-pinid-of-nft", // 可选
      "name": "the-name-of-the-NFT-Item", // 可选
      "desc": "the description of the specific NFT", // 可选
      "cover": "metafile://your-nft-cover-pinid", // 可选
      "metadata": "any arbitrary data you can place here" // 可选
    }
    // 可重复添加 item 对象
  ]
}
```

#### 要点说明

1. `item_desc` 是对专辑内各个 NFT 的描述性文件。
2. `item_desc` 为可选项，缺失时不影响后端索引器对该 NFT 专辑的索引。
3. 一个 NFT 专辑下允许存在多个 `item_desc` 协议文件。
4. 如有多个重复的 `pinid`，则采用先见原则。对于已存在的 `pinid` 的相关信息将忽略处理。
5. 如果 `pinid` 指向非本专辑的 `pinid`，则忽略处理。
