中國區塊鏈技術和產業發展論壇標準
CBD-Forum-002-2017
區塊鏈數據格式規範
Blockchain—Data format specification
2017- 12 - 22 發佈
目次
前言III
1 範圍1
2 術語和縮略語1
2.1 其他標準中定義的術語1
2.2 縮略語2
3 數據對象結構2
4 數據分類3
5 數據元屬性3
6 數據格式規範3
6.1 賬戶數據格式3
6.2 區塊數據格式5
6.3 事務數據格式8
6.4 實體數據格式9
6.5 合約數據格式11
6.6 配置數據格式12
附錄 A (資料性附錄) 數據項標識符15
附錄 B (資料性附錄) 共識機制相關數據格式16
B.1 類拜占庭容錯16
B.2 基於權益的證明19
B.3 基於工作量的證明20
參考文獻21
區塊鏈數據格式規範
1 範圍
本標準規定了區塊鏈的數據格式規範。具體規定了以下內容:
a) 區塊鏈技術相關的數據結構;
b) 區塊鏈技術相關的數據分類及其相互關係;
c) 區塊鏈技術相關的數據元的數據格式要求。本標準適用於:
a) 爲計劃使用區塊鏈的組織建設區塊鏈系統提供數據格式參考;
b) 指導區塊鏈服務提供組織建立區塊鏈系統數據結構;
c) 爲區塊鏈系統建設過程的中間件服務組織提供數據格式參考。
2 術語和縮略語
2.1 其他標準中定義的術語
GB/T 19488.1-2004、GB/T 18391.2-2009、GB/T 18391.1-2002 和 CBD-Forum-001-2017 界定的以下
術語和定義適用於本文件。
2.1.1 屬 性 attribute
一個對象或實體的特徵。
[GB/T 18391.2-2009]
2.1.2 區塊鏈 blockchain
一種在對等網絡環境下,通過透明和可信規則,構建不可僞造、不可篡改和可追溯的塊鏈式數據結構,實現和管理事務處理的模式。
注:事務處理包括但不限於可信數據的產生、存取和使用等。
[CBD-Forum-001-2017]
2.1.3 數據元 data element
通過定義、標識、表示和允許值等一系列屬性描述的一個數據單元。
[GB/T 19488.1-2004]
2.1.4 數據類型 data type
由數據元操作決定的用於採集字母、數字和(或)符號的格式,以描述數據元的值。
[GB/T 18391.1-2002]
2.1.5 標識符 identifier
數據元的唯一標識。
[GB/T 18391.1-2002]
2.1.6 智能合約 smart contract
以數字形式定義的能夠自動執行條款的合約。
注:在區塊鏈技術領域,智能合約是指基於預定事件觸發、不可篡改、自動執行的計算機程序。
[CBD-Forum-001-2017]
2.2 縮略語
下列縮略語適用於本標準。
PKI公鑰基礎設施(Public Key Infrastructure)
ID標識(Identity)
3 數據對象結構
區塊鏈技術相關的數據對象結構包括上述區塊、事務、實體、合約、賬戶、配置六個主要數據對象。其中區塊鏈核心的數據對象包括區塊、事務、實體和合約。每一區塊數據對象中包含一個或多個事務數據對象,每個事務對象包括屬性類的實體數據對象,還包括事務的業務邏輯,即合約數據對象。在區塊鏈核心數據對象之外,包括配置數據對象,提供區塊鏈系統正常運行過程中所需的配置信息。配置數據對象和區塊鏈核心數據對象共同構建了區塊鏈運行所需的基礎數據基礎。而賬戶數據對象表示區塊鏈業務的實際發起者和相關方對應的數據結構。圖 1 給出了數據視圖相關的實體間關係。
注: 區塊鏈技術數據結構中所包含的關鍵要素是區塊鏈技術中涉及到的必要數據,在不同區塊鏈技術相關的平臺中可能包含其他非必要數據未在本標準的範圍中。
圖 1
4 數據分類
本標準以數據對象的類別爲依據,將區塊鏈數據分爲以下六類:
a)賬戶數據:指描述區塊鏈事務的實際發起者和相關方的數據。區塊中記錄的事務信息均被關聯到相關的賬戶之上,每個區塊鏈服務客戶擁有一個或多個賬戶來使用區塊鏈服務。
b)區塊數據:指區塊鏈網絡的底層鏈式數據,用來把一段給定時間內發生的事務處理結果持久化爲成塊鏈式數據結構。通常情況下,區塊由區塊頭和區塊體組成。區塊頭包含區塊相關的控制信息,區塊體包含具體的事務數據。
c)事務數據:指描述區塊鏈系統上承載的具體業務動作的數據。其中,事務既包括交易類型事務, 也包括非交易類型事務。
d)實體數據:指描述事務的靜態屬性的數據。通常包括髮起方地址、接收方地址、交易發生額、交易費用、存儲數據和實體數據備註。
e)合約數據:指描述事務的動態處理邏輯的數據。合約又稱智能合約,是一套以計算機代碼形式定義的承諾,以及合約參與方可執行承諾的協議。這裏的合約數據既包括處理邏輯的可執行代碼,也包括處理邏輯的執行結果。
f)配置數據:指區塊鏈系統正常運行過程中所需的配置信息。通常包括共識協議版本號、軟件版本號和網絡通信底層對等節點配置信息等。
5 數據元屬性
區塊鏈數據元通過數據標識符、中文名稱、英文名稱、數據類型、數據長度、數據說明、數據備註
7個屬性來描述。具體屬性說明見表1。
表1
屬性名稱 |
屬性說明 |
數據標識符 |
各數據元的唯一標識,編號是以階層式分類,分別將數據分類和數據元依順序進行流水號編碼記錄。 前段碼爲數據分類號碼,後段碼以數據元的流水號,詳見附錄A。 |
中文名稱 |
數據元的中文名稱,在一定語境下名稱應保持唯一。 |
英文名稱 |
數據元的英文名稱,在一定語境下名稱應保持唯一。 |
數據類型 |
描述數據元的特徵和基本要素,本標準中使用的數據類型主要包括:字符串類型、整數類型、數組類 型。 |
數據長度 |
描述該數據元的長度,在本標準中用定長或不定長表示,並給出了推薦字節長度。 |
數據說明 |
詳細描述該數據元的內容和表達的含義。 |
數據備註 |
描述該數據元是否必要,在本標準中分爲必選和可選。 |
第6章給出了對各種區塊鏈數據元屬性的說明和要求。對各數據元的數據標識符的參考性規範見附錄A。
6 數據格式規範
6.1 賬戶數據格式
賬戶數據主要包括以下幾種數據元:
a)賬戶公鑰;
b)賬戶私鑰;
c)賬戶資產;
d)數字證書;
e)賬戶所屬機構。
6.1.1 賬戶公鑰
賬戶公鑰的數據格式要求見表2。
表2
屬性 |
內容 |
中文名稱 |
賬戶公鑰 |
英文名稱 |
Account Public Key |
數據類型 |
字符串 |
數據長度 |
定長,推薦64字節 |
數據說明 |
根據PKI體系爲用戶生成的密鑰對裏,可公開的部分。 |
數據備註 |
必選 |
6.1.2 賬戶私鑰
賬戶私鑰的數據格式要求見表3。
表3
屬性 |
內容 |
中文名稱 |
賬戶私鑰 |
英文名稱 |
Account Private Key |
數據類型 |
字符串 |
數據長度 |
定長,推薦32字節 |
數據說明 |
根據PKI體系爲用戶生成的密鑰對裏,不公開的部分。 |
數據備註 |
必選 |
6.1.3 賬戶資產
賬戶資產的數據格式要求見表4。
表4
屬性 |
內容 |
中文名稱 |
賬戶資產 |
英文名稱 |
Account Asset |
數據類型 |
數組 |
數據長度 |
不定長 |
數據說明 |
賬戶擁有的資產說明,包括資產名稱,資產列表,餘額等。 |
數據備註 |
可選 |
6.1.4 數字證書
數字證書的數據格式要求見表5。
表5
屬性 |
內容 |
中文名稱 |
數字證書 |
英文名稱 |
Digital Certificate |
數據類型 |
數組 |
數據長度 |
不定長 |
數據說明 |
數字證書是一個經證書授權中心數字簽名的包含公開密鑰擁有者信息以及公開密鑰的文件。 |
數據備註 |
可選 |
6.1.5 賬戶所屬機構
賬戶所屬機構的數據格式要求見表6。
表6
屬性 |
內容 |
中文名稱 |
賬戶所屬機構 |
英文名稱 |
Institution |
數據類型 |
數組 |
數據長度 |
不定長 |
數據說明 |
機構爲加入到區塊鏈網絡的,獨立運作的成員,可以爲企業,組織,團體等,賬戶可以在組織關係上歸 屬於某個機構。 |
數據備註 |
可選 |
6.2 區塊數據格式
區塊數據主要包括以下幾種數據元:
a)區塊高度;
b)區塊標識;
c)版本信息;
d)前一區塊摘要值;
e)默克爾樹根;
f)區塊時間戳;
g)區塊隨機數;
h)難度係數;
i)事務列表。
6.2.1 區塊高度
區塊高度的數據格式要求見表7。
表7
屬性 |
內容 |
中文名稱 |
區塊高度 |
英文名稱 |
Block Height |
數據類型 |
整數 |
數據長度 |
定長 |
數據說明 |
標識區塊序號,描述區塊在區塊鏈中的位置。 |
數據備註 |
可選 |
6.2.2 區塊標識
區塊標識的數據格式要求見表8。
表8
屬性 |
內容 |
中文名稱 |
區塊標識 |
英文名稱 |
Block ID |
數據類型 |
字符串 |
數據長度 |
定長,推薦長度32字節 |
數據說明 |
通常指區塊摘要,區塊在區塊鏈中的唯一標識。 |
數據備註 |
必選 |
6.2.3 版本信息
版本信息的數據格式要求見表9。
表9
屬性 |
內容 |
中文名稱 |
版本信息 |
英文名稱 |
Block Version |
數據類型 |
字符串 |
數據長度 |
不定長 |
數據說明 |
當前區塊版本號,主要對應當前區塊頭的結構及各個字段的含義。 |
數據備註 |
可選 |
6.2.4 前一區塊摘要值
前一區塊摘要值的數據格式要求見表10。
表10
屬性 |
內容 |
中文名稱 |
前一區塊摘要值 |
英文名稱 |
Previous Block Hash |
數據類型 |
字符串 |
數據長度 |
定長,推薦長度32字節 |
數據說明 |
通常指前一區塊的區塊摘要,區塊在區塊鏈中的唯一標識。 |
數據備註 |
必選 |
6.2.5 默克爾樹根
默克爾樹根的數據格式要求見表11。
表11
屬性 |
內容 |
中文名稱 |
默克爾樹根 |
英文名稱 |
Merkle Tree Root |
數據類型 |
字符串 |
數據長度 |
定長,推薦長度32字節 |
數據說明 |
由本區塊裏相關的信息通過樹狀結構算法彙總生成的摘要值。 |
數據備註 |
事務樹根必選,狀態和回執樹根可選 |
6.2.6 區塊時間戳
區塊時間戳的數據格式要求見表12。
表12
屬性 |
內容 |
中文名稱 |
區塊時間戳 |
英文名稱 |
Block Timestamp |
數據類型 |
整數 |
數據長度 |
定長,推薦長度8字節 |
數據說明 |
表示本區塊的生成時間刻度(正整數),從1970年起的時間計數,精度爲毫秒數,正序增加。 |
數據備註 |
必選 |
6.2.7 區塊隨機數
區塊隨機數的數據格式要求見表13。
表13
屬性 |
內容 |
中文名稱 |
區塊隨機數 |
英文名稱 |
Block Nonce |
數據類型 |
整數 |
數據長度 |
定長 |
數據說明 |
區塊隨機數,通常用於記賬節點競爭記賬權的Hash計算的可變參數。 |
數據備註 |
可選 |
6.2.8 難度係數
難度係數的數據格式要求見表14。
表14
屬性 |
內容 |
中文名稱 |
難度係數 |
英文名稱 |
Difficulty |
數據類型 |
整數 |
數據長度 |
定長,推薦長度8字節 |
數據說明 |
通常用於表示記賬節點競爭記賬權的Hash計算難度的參數。 |
數據備註 |
可選 |
6.2.9 事務列表
事務列表的數據格式要求見表15。
表15
屬性 |
內容 |
中文名稱 |
事務列表 |
英文名稱 |
Transaction List |
數據類型 |
數組 |
數據長度 |
不定長 |
數據說明 |
區塊中的事務列表,每個事務通常表示一個業務操作。 |
數據備註 |
必選 |
6.3 事務數據格式
事務數據主要包括以下幾種數據元:
a)事務標識;
b)事務類型;
c)簽名者;
d)事務時間戳。
6.3.1 事務標識
事務標識的數據格式要求見表16。
表16
屬性 |
內容 |
中文名稱 |
事務標識 |
英文名稱 |
Transaction ID |
數據類型 |
字符串 |
數據長度 |
定長 |
數據說明 |
事務處理中,可保證事務數據的唯一標識,通常爲哈希值。 |
數據備註 |
必選 |
6.3.2 事務類型
事務類型的數據格式要求見表17。
表17
屬性 |
內容 |
中文名稱 |
事務類型 |
英文名稱 |
Transaction Type |
數據類型 |
字符串或整數 |
數據長度 |
定長 |
數據說明 |
進行事務操作時,定義事務操作的事件類型,可以有一或多種類型。 |
數據備註 |
可選 |
6.3.3 簽名者
簽名者的數據格式要求見表18。
表18
屬性 |
內容 |
中文名稱 |
簽名者 |
英文名稱 |
Signers |
數據類型 |
字符串 |
數據長度 |
定長 |
數據說明 |
進行事務操作時,對事務進行簽名的簽名者的集合。 |
數據備註 |
可選 |
6.3.4 事務時間戳
事務時間戳的數據格式要求見表19。
表19
屬性 |
內容 |
中文名稱 |
事務時間戳 |
英文名稱 |
Transaction Timestamp |
數據類型 |
整數 |
數據長度 |
32字節 |
數據說明 |
正整數,從1970年起的時間計數,精度爲毫秒,正序增加。 |
數據備註 |
可選 |
6.4 實體數據格式
實體數據主要包括以下幾種數據元:
a)發起方地址;
b)接收方地址;
c)事務處理髮生額;
d)事務處理費用;
e)附件數據;
f)實體數據備註。
6.4.1 發起方地址
發起方地址的數據格式要求見表20。
表20
屬性 |
內容 |
中文名稱 |
發起方地址 |
英文名稱 |
Sender Address |
數據類型 |
字符串 |
長度 |
定長 |
說明 |
事務操作的發起者或源賬戶,作爲該事務發起方的唯一標識。 |
備註 |
必選 |
6.4.2 接收方地址
接收方地址的數據格式要求見表21。
表21
屬性 |
內容 |
中文名稱 |
接收方地址 |
英文名稱 |
Recipient Address |
數據類型 |
字符串 |
數據長度 |
定長 |
數據說明 |
事務操作中的接收方,作爲事務操作對象的唯一標識。 |
數據備註 |
可選 |
6.4.3 事務處理髮生額
事務處理髮生額的數據格式要求見表22。
表22
屬性 |
內容 |
中文名稱 |
事務處理髮生額 |
英文名稱 |
Transaction Amount |
數據類型 |
整數或字符串 |
數據長度 |
定長 |
數據說明 |
事務操作中涉及到賬戶資產的變更數量,交易額。 |
數據備註 |
可選 |
6.4.4 事務處理費用
事務處理費用的數據格式要求見表23。
表23
屬性 |
內容 |
中文名稱 |
事務處理費用 |
英文名稱 |
Transaction Fee |
數據類型 |
整數或字符串 |
數據長度 |
定長 |
數據說明 |
事務操作中通常會產生一定的交易費用,以防止垃圾交易、流量攻擊等。 |
數據備註 |
可選 |
6.4.5 附加數據
附加數據的數據格式要求見表24。
表24
屬性 |
內容 |
中文名稱 |
附加數據 |
英文名稱 |
Additional Data |
數據類型 |
字符串 |
數據長度 |
定長 |
數據說明 |
爲部分業務需要提供的備選字段,可增加與業務需求相關的附加數據。 |
數據備註 |
可選 |
6.4.6 實體數據備註
實體數據備註的數據格式要求見表25。
表25
屬性 |
內容 |
中文名稱 |
實體數據備註 |
英文名稱 |
Memo |
數據類型 |
字符串 |
數據長度 |
不定長 |
數據說明 |
事務操作中,可對應該事務的text、ID和hash類型的備註字段。 |
數據備註 |
可選 |
6.5 合約數據格式
合約數據主要包括以下幾種數據元:
a)合約標識;
b)合約版本號;
c)合約代碼;
d)合約存儲。
6.5.1 合約標識
合約標識的數據格式要求見表26。
表26
屬性 |
內容 |
中文名稱 |
合約標識 |
英文名稱 |
Contract ID |
數據類型 |
字符串 |
數據長度 |
定長 |
數據說明 |
合約在區塊鏈上部署後,通過一個唯一的確定的地址標識,供調用方訪問合約的代碼,狀態存儲等。 |
數據備註 |
該標識一般由創建該合約的賬戶信息+序列號+其他合約信息(可選)通過可選的摘要算法生成,要求 生成的標識唯一,確定,可用。可選 |
6.5.2 合約版本號
合約版本號的數據格式要求見表27。
表27
屬性 |
內容 |
中文名稱 |
合約版本號 |
英文名稱 |
Contract Version |
數據類型 |
字符串 |
數據長度 |
不定長 |
數據說明 |
針對智能合約的代碼和編譯發佈到區塊鏈上的二進制代碼數據,使用版本號標識不同的版本。 |
數據備註 |
某個智能合約持續提供某個業務功能,但因需求更迭,或面向不同的問題域而具備不同的特性,需要進 行版本劃分。可選 |
6.5.3 合約代碼
合約代碼的數據格式要求見表28。
表28
屬性 |
內容 |
中文名稱 |
合約代碼 |
英文名稱 |
Contract Code |
數據類型 |
字符串 |
數據長度 |
不定長 |
數據說明 |
合約的可執行指令,經過指定編譯器編譯生成,供區塊鏈上的虛擬機調用執行。 |
數據備註 |
根據不同的虛擬機體系,合約代碼採用不同的計算機語言編寫,並由不同的編譯器生成二進制可執行指 令。可選 |
6.5.4 合約存儲
合約存儲的數據格式要求見表29。
表29
屬性 |
內容 |
中文名稱 |
合約存儲 |
英文名稱 |
Contract Storage |
數據類型 |
數組 |
數據長度 |
不定長 |
數據說明 |
合約執行過程生成的狀態數據的集合,其內容與合約的邏輯密切相關。 |
數據備註 |
可採用key-value格式或關係型數據庫保存。可選 |
6.6 配置數據格式
配置數據主要包括以下幾種數據元:
a)協議版本號;
b)版本軟件號;
c)節點標識;
d)節點地址;
e)節點公鑰。
6.6.1 協議版本號
協議版本號的數據格式要求見表30。
表30
屬性 |
內容 |
採用協議版本號進行區分,一套軟件可以對使用不同的協議的各種客戶端提供服務。可選 |
6.6.2 軟件版本號
軟件版本號的數據格式要求見表31。
表31
屬性 |
內容 |
中文名稱 |
軟件版本號 |
英文名稱 |
Software Version |
數據類型 |
字符串 |
數據長度 |
不定長 |
數據說明 |
針對區塊鏈軟件本身,含代碼和二進制軟件形態,使用版本號標識不同的發行版本。 |
數據備註 |
區塊鏈軟件可以針對不同的軟件生命週期,以及不同的應用場景,不同的目標用戶,採用不同的版本。 必選 |
6.6.3 節點標識
節點標識的數據格式要求見表32。
表32
屬性 |
內容 |
中文名稱 |
節點標識 |
英文名稱 |
Peer ID |
數據類型 |
字符串 |
數據長度 |
不定長 |
數據說明 |
區塊鏈節點的唯一標識,可選用節點的公鑰做爲唯一標識。 |
數據備註 |
必選 |
6.6.4 節點地址
節點地址的數據格式要求見表33。
表33
屬性 |
內容 |
||||||||||||||
中文名稱 |
6.6.4 節點地址 節點地址的數據格式要求見表33。 表33
6.6.5 節點公鑰 節點公鑰的數據格式要求見表34。 表34 |