0%

区块链系统数据格式的IEEE标准

1.概述

1.1 范围

该标准规定了区块链系统对数据格式的要求,确定了包括数据结构、数据类型与类型中所含元素在内的规范。

1.2 用途

这一标准为计划使用区块链技术来建立区块链系统的实体提供了数据格式上的参考,为提供区块链服务的实体给予了关于在区块链系统中建立数据结构方面的指导,并为在区块链系统中提供中间件服务的实体提供数据格式方面的参考

1.3 用词规范

  • 必须表示强制要求遵守以保证绝对一致,任何违背这一要求的行为都不会被承认
  • 应当表示建议某种行为但不作强制要求,也用于表示某一行为较其余更好但不否定其他选择
  • 能够表示某一行为在标准允许范围内
  • 可能用于一些概率事件或可行性的陈述中,不管是物质上的、心理上的抑或是用于表达因果连接的

2. 标准参考资料

以下资料对本标准的制定有参考意义(即标准中包含对这些资料的理解与使用,因此每项资料都以文本形式引用在下方并解释了其对标准的贡献)。对于注明日期的参考文献,仅引用的版本适用。而对于未注明日期的参考文献,引用文件的最新版本(包括任何修订或勘误)适用。

GB/T 18391.2-2009, Information Technology—Metadata registries (MDR)—Part 2: Classification.

3. 定义与缩写

3.1 定义

以下专业术语的定义适用于本文档。该条目中未定义的专业术语可以在IEEE Standards Dictionary Online上查找到

  • 属性:某一对象或实体的特征
  • 区块链(A)一种不可伪造、不可篡改且可追溯的链块数据结构和基于此的在点对点网络中具有透明与可信规则的交易工具和管理模式。(B)一种通过在点对点网络中建立不可伪造、不可篡改且可追溯的链块数据结构而实现的交易工具与管理模式
  • 数据单元:由一系列属性所描述的运算单元,这些属性包括定义、id、表现形式与可行值
  • 数据类型:一种由能对数据进行的基本运算而决定的底层设计,用于存储字符、图像或其余符号来描述数据单元的值
  • 数据ID:数据单元独有的身份
  • 智能合约:一种用二进制格式定义的合约,能够根据其条款自动执行

3.2 缩写

英文缩写 英文全拼 中文
ID identity 身份
PKI public key infrastructure 公钥基础设施

4. 数据结构

与区块链技术有关的数据结构包括六个部分,分别对应不同的数据对象,即如前所述的区块型、交易型、交易实体型、合约型、账户型与配置型数据对象。其中,区块型、交易型、交易实体型与合约型数据对象共同构成该结构的核心。每个区块对象都包含了一或多个交易型数据对象。每个交易型对象都有交易实体对象与业务逻辑(如合约数据对象)等数据对象作为其属性。在区块链系统的运作中,配置型数据对象对提供配置信息起到了重要作用。配置型数据对象与这些核心数据对象共同构成了可运作区块链的基石。区块链业务相关的交易人或组织与该数据结构间的联系由账户型数据对象来确定。

image-20211129195755157

5. 数据分类

该标准将区块链数据分成以下六个大类:

  1. 账户数据:描述与区块链上交易的相关账户的数据。在块中记录的所有交易信息都与相关的账户联系到了一起。使用区块链服务的客户可以拥有一个或多个账户。
  2. 区块数据:描述区块链网络中各节点所维护的链状结构的数据,用于将已经发生的交易信息写入区块链数据并在一定时间后保证永久保存。总的来说,区块由区块头与区块体组成。区块头包含与区块本身相关的控制信息,而区块体则包含具体的交易信息。
  3. 业务数据:描述由区块链系统所进行的具体交易行为的数据。这些交易行为可以是商业性的,也可以是非商业性的
  4. 交易实体数据:描述某一业务的静态属性数据。常常包含交易业务中双方的地址,交易数额,燃料费用,存储数据与交易实体所作的评论。
  5. 合约数据:描述一项交易的动态处理逻辑的数据。合约,又称智能合约,由某种工作量承诺组成,这种工作量承诺以计算机代码的形式给出,要想执行这些承诺必须要有条约各方的参与。从另一角度看,合约同样也是各参与方所达成的能够强制执行的共识协议。这里所提到的合约数据不仅包含了逻辑处理所需要的可执行代码,也包含了逻辑处理所得的结果。
  6. 配置数据:描述了区块链系统的日常运作所需要的配置信息。一般有共识协议的版本号,软件版本号与所在通信网络的节点信息

6. 数据单元的属性

区块链的数据单元有七种属性,包括数据ID,数据名,数据类型,数据长度,数据说明与必须性标识:

  • 数据ID是每个数据单元独有的ID,以分层分类的方式编码。数据分类与数据单元都以顺序编码并记录并分别对应码的前后部
  • 数据名是每个数据单元的名称,在特定上下文中,数据名需要保证唯一
  • 数据类型描述了数据单元的基本要素与特征。该标准中所使用的数据类型大部分是字符串(string)类型,整数(integer)类型与数组(array)类型
  • 数据长度描述了该数据单元的长度,在这一标准中,数据长度可以是有限的也可以是无限的。并且该标准给出了推荐的字节数
  • 数据说明具体描述了该数据单元的含义及内容
  • 强制性标识描述了该数据单元是必须的还是可选的

下一节对各种区块链数据的属性做出了描述与要求。

7. 数据格式规范

7.1 账户数据格式

账户数据包括以下数据单元:

  1. 账户公钥
  2. 账户私钥
  3. 账户资产
  4. 数字证书
  5. 所属组织

7.1.1 账户公钥

下面对账户公钥的数据格式进行了规范:

属性 属性说明
数据名称 账户公钥
数据类型 字符串
数据长度 固定长度,建议64字节
数据说明 通过PKI系统为用户生成的密钥对的公共部分
强制性标识 必须

7.1.2账户私钥

下面对账户私钥的数据格式进行了规范

属性 属性说明
数据名称 账户私钥
数据类型 字符串
数据长度 固定长度,建议32字节
数据说明 通过PKI系统为用户生成的密钥对的私有部分
强制性标识 必须

7.1.3 账户资产

下面对账户资产的数据格式进行了规范

属性 属性说明
数据名称 账户资产
数据类型 数组
数据长度 不固定
数据说明 对账户所持资产的说明,
包括资产名,资产清单,余额等等
强制性标识 可选

7.1.4 数字证书

下面对数字证书的数据格式进行了规范

属性 属性说明
数据名称 数字证书
数据类型 数组
数据长度 不固定
数据说明 一种由权威证书发放机构签名的文件,
包括公钥所有者的信息以及公钥本身
强制性标识 可选

7.1.5 附属机构

下面对附属机构的数据格式进行了规范

属性 属性说明
数据名称 附属机构
数据类型 数组
数据长度 不固定
数据说明 参与区块链网络的独立成员。可以是公司、组织、团体等等。
从组织关系的角度来看,账户可以从属于某一特定的机构
强制性标识 可选

7.2 区块数据格式

区块数据基本包括以下数据单元:

  1. 区块高度
  2. 区块ID
  3. 区块版本
  4. 前导区块哈希
  5. 默克尔根哈希
  6. 区块时间戳
  7. 区块nonce值
  8. 挖矿难度
  9. 交易列表

7.2.1 区块高度

下面对区块高度的数据格式进行了规范:

(原文中该处的定义与区块ID相同,疑似错误故留空)

属性 属性说明
属性名称 区块高度
数据类型
数据长度
数据说明
强制性标识

7.2.2 区块ID

下面对区块ID的数据格式进行了规范:

属性 属性说明
属性名称 区块ID
数据类型 字符串
数据长度 固定长度,推荐32字节
数据说明 该区块所独有的ID,作为该区块的摘要
强制性标识 必须

7.2.3 区块版本

下面对区块版本的数据格式进行了规范:

(原文中该处的定义与区块ID相同,疑似错误故留空)

属性 属性说明
属性名称 区块版本
数据类型
数据长度
数据说明
强制性标识

7.2.4 前序区块哈希

下面对前序区块哈希的数据格式进行了规范:

属性 属性说明
属性名称 前序区块哈希
数据类型 字符串
数据长度 固定长度,建议32字节
数据说明 该区块的前序区块的摘要,为当前区块所独有
强制性标识 必须

7.2.5 默克尔根哈希

下面对默克尔根哈希的数据格式进行了规范:

属性 属性说明
属性名称 默克尔根哈希
数据类型 字符串
数据长度 固定长度,建议32字节
数据说明 通过默克尔树的构造算法生成的区块中有关联性信息(如交易信息)的摘要
强制性标识 交易树根:必须
状态树根与收据树根:可选

7.2.6 区块时间戳

下面对区块时间戳的数据格式进行了规范:

属性 属性说明
属性名称 区块时间戳
数据类型 整数
数据长度 固定长度,建议8字节
数据说明 用于确定区块生成的事件。从1970年开始计数,精确到毫秒且只能正向递增
强制性标识 必须

7.2.7区块nonce值

下面对区块nonce值的数据格式进行了规范:

属性 属性说明
属性名称 区块nonce值
数据类型 整数
数据长度 固定长度
数据说明 挖矿节点争夺记账权时通过hash计算证明自己正确性的一个可变参数
强制性标识 可选

7.2.8 挖矿难度

下面对挖矿难度的数据格式进行了规范:

属性 属性说明
属性名称 挖矿难度
数据类型 整数
数据长度 固定长度,建议8字节
数据说明 挖矿节点间争夺记账权时所需要的hash计算的难度参数
强制性标识 可选

7.2.9 交易列表

下面对交易列表的数据格式进行了规范:

属性 属性说明
属性名称 j交易列表
数据类型 数组
数据长度 不固定
数据说明 该区块中包含的所有交易,每笔交易都对应一笔业务
强制性标识 必须

7.3 交易数据格式

交易数据基本包括以下数据单元:

  1. 交易ID
  2. 交易类型
  3. 签名者
  4. 交易时间戳

7.3.1 交易ID

下面对交易ID的数据格式进行了规范:

属性 属性说明
属性名称 交易ID
数据类型 字符串
数据长度 固定长度
数据说明 交易过程中的数据的独有ID,通常是一个哈希值
强制性标识 必须

7.3.1 交易类型

下面对交易类型的数据格式进行了规范:

属性 属性说明
属性名称 交易属性
数据类型 字符串或整数
数据长度 固定长度
数据说明 用于定义交易事件的类型,可以有一种或多种
强制性标识 可选

7.3.1 签名者

下面对签名者的数据格式进行了规范:

属性 属性说明
属性名称 签名者
数据类型 字符串
数据长度 固定长度
数据说明 指对该笔交易签名的所有人
强制性标识 可选

7.3.1 交易时间戳

下面对交易时间戳的数据格式进行了规范:

属性 属性说明
属性名称 交易时间戳
数据类型 整数
数据长度 32字节
数据说明 正整数。从1970年开始计数,精确到毫秒且只能正向递增
强制性标识 可选

7.4 交易实体数据格式

交易实体数据包括以下数据单位:

  1. 转出地址
  2. 转入地址
  3. 交易金额
  4. 燃料费用
  5. 附加数据
  6. 备忘录

7.4.1 转出地址

下面对转出地址的数据格式进行了规范:

属性 属性说明
属性名称 转出地址
数据类型 字符串
数据长度 固定长度
数据说明 该笔交易的转出方,在该笔交易中唯一确定
强制性标识 必须

7.4.2 转入地址

下面对转入地址的数据格式进行了规范:

属性 属性说明
属性名称 转入地址
数据类型 字符串
数据长度 固定长度
数据说明 该笔交易的转入方,在该笔交易中唯一确定
强制性标识 可选

7.4.3 交易金额

下面对交易金额的数据格式进行了规范:

属性 属性说明
属性名称 交易金额
数据类型 整数或字符串
数据长度 固定长度
数据说明 与该笔交易有关的资产变动
强制性标识 可选

7.4.4 燃料费用

下面对燃料费用的数据格式进行了规范:

属性 属性说明
属性名称 燃料费用
数据类型 整数或字符串
数据长度 固定长度
数据说明 为了预防垃圾交易与流量攻击而设置的交易费用
强制性标识 可选

7.4.5 附加数据

下面对发送人地址的数据格式进行了规范:

属性 属性说明
属性名称 附加数据
数据类型 字符串
数据长度 固定长度
数据说明 为了满足某些业务需求而提供的可选域。对应附加性的业务
强制性标识 可选的

7.4.6 备忘录

下面对备忘录的数据格式进行了规范:

属性 属性说明
属性名称 备忘录
数据类型 字符串
数据长度 不固定
数据说明 与文本,ID与交易中的hash类型对应的评论区
强制性标识 可选的

7.5 合约数据格式

合约数据格式包含以下数据单元:

  1. 合约ID
  2. 合约版本
  3. 合约代码
  4. 合约变量

7.5.1 合约ID

下面对合约ID的数据格式进行了规范

属性 属性说明
属性名称 合约ID
数据类型 字符串
数据长度 固定长度
数据说明 在合约部署在区块链后,调用方就可以根据该合约ID访问合约代码与存储状态等等信息
强制性标识 这一ID通过“账户信息+索引+(可选的)另一合约信息”的可选的摘要算法所生成
生成的ID必须是唯一确定且可用的。可选

7.5.2 合约版本

下面对合约版本的数据格式进行了规范

属性 属性说明
属性名称 合约版本
数据类型 字符串
数据长度 不固定
数据说明 指考虑到代码与智能合约的编译设定的二进制码。用于识别不同的版本
强制性标识 由于智能合约持续提供某一特定的业务功能,
应根据需求导向与问题导向的变化来设定不同的版本分类。可选

7.5.3 合约代码

下面对合约代码的数据格式进行了规范

属性 属性说明
属性名称 合约代码
数据类型 字符串
数据长度 不固定
数据说明 指合约中的可执行指令,
由经过设计的能够实现对区块链上虚拟机的调用与执行的编译器编译并生成
强制性标识 根据不同的虚拟机系统与编译器,
合约代码能以不同的计算机语言形式所编译。可选

7.5.4 合约变量

下面对合约变量的数据格式进行了规范

属性 属性说明
属性名称 合约变量
数据类型 数组
数据长度 不固定
数据说明 指合约运行过程中生成的一系列状态数据。
其内容与合约逻辑密切相关
强制性标识 键值对形式或关系型数据库形式。可选

7.6 配置数据格式

配置数据格式包括以下数据单元

  1. 协议版本
  2. 软件版本
  3. 节点ID
  4. 节点地址
  5. 节点公钥

7.6.1 协议版本

下面对协议版本的数据格式进行了规范

属性 属性说明
属性名称 协议版本
数据类型 字符串
数据长度 不固定
数据说明 使用协议版本号以识别用于节点间通信和交互和节点与外界交互的协议
强制性标识 随着软件版本的更新,区块链协议可以具有不同的接口与功能。
一般的区块链软件须提供协议层面的下载兼容性并通过协议版本号来区分。
通过不同的协议。这些软件要能为不同的客户提供不同的服务。可选

7.6.2 软件版本

下面对软件版本的数据格式进行了规范

属性 属性说明
属性名称 软件版本
数据类型 字符串
数据长度 不固定
数据说明 根据软件本身包含了计算机代码与二进制代码。版本号用于区分不同的发行版本
强制性标识 必须。根据不同的软件生命周期,应用场景与目标人群可以部署区块链软件的不同版本

7.6.3 节点ID

下面对节点ID的数据格式进行了规范

属性 属性说明
属性名称 节点ID
数据类型 字符串
数据长度 不固定
数据说明 区块链网络中某一节点独有的ID,公钥可被选为该节点的ID
强制性标识 必须

7.6.4 节点地址

下面对节点地址的数据格式进行了规范

属性 属性说明
属性名称 节点地址
数据类型 字符串
数据长度 根据网络协议而定(IPv4或IPv6)
数据说明 区块链网络中其他节点的地址信息
强制性标识 必须

7.6.5 节点公钥

下面对节点公钥的数据格式进行了规范

属性 属性说明
属性名称 节点公钥
数据类型 字符串
数据长度 固定长度
数据说明 区块链网络中其他节点的公钥信息
强制性标识 可选