# 協議格式

### 協議格式

MetaID 協議的標準規範如下：

```jsx
<metaid_flag> 
<operation> 
<path> 
<encryption> 
<version>  
<content-type> 
<payload> 
```

MetaID 協議標準規範由 7 部分組成，分別是：

#### **\<metaid\_flag>**

固定為“`metaid`”，用作協議標識。

必要選項。

#### **\<operation>**

操作指令，支持 5 種操作指令：

* **`init`**，此指令為在鏈上初始化 MetaID，確定 MetaID 樹的根節點。約定 init 所在 PIN 的 ID 即為 MetaID。init 採用先見原則，後者 init 均無效。該指令將忽略後續的部分，後續的 5 個部分均可填默認值。
* **`create`** 創建內容，在 path 指定的路徑上創建 PIN。
* **`modify`** 修改內容，對 path 指定路徑的 PIN 進行修改。
* **`revoke`** 作廢內容，對 path 指定路徑的 PIN 聲明作廢。
* **`hide`** 創建並隱藏 PIN，使用該指令後，將不分配 PINNumber。

必要選項。

#### \<path>

PIN 所在的路徑。表示 path 有三種模式，如下：

* “/” 開頭，通過路徑定位需創建的 PIN，如 /protocols/simplebuzz。
* “#” 開頭，通過 PINNumber 定位 PIN。
* “@” 開頭，通過 PINID 定位的 PIN。

必要選項。

#### \<encryption>

針對 PIN 內容的加密方式。0 為不加密；1 為 ECIES 加密；2 為 ECDH 加密。

非必選項，若不傳必須默認使用`OP_0`占位，默認為`0`。

#### **\<v**ersion>

PIN 的版本號。不同版本號意味著 payload 內容的格式可能不相同。

非必選項，若不傳必須默認使用`OP_0`占位，默認為`0`。

#### \<content-type>

約定`payload`的文件格式，包含了`payload`的編碼方式。

所有的媒體類型可參考：<https://www.iana.org/assignments/media-types/media-types.xhtml>

非必選項，若不傳必須默認使用`OP_0`占位，默認值為`application/json`。

#### \<payload>

`payload`為任意數據內容，其數據格式由 `<content-type>` 規定。MetaID 協議對`payload` 長度沒限制，只應受該 PIN 所在區塊鏈的單條交易數據大小約束。

非必選項，若不傳必須默認使用`OP_0`占位。
