超级账本之账本篇

hyperledger Fabric 中的账本

转载自:https://www.javatree.cn/news/5040769a8bc34553afaf3d35d14ae46d

1.区块链的账本包含两部分,world state(世界的状态?整体的状态?)和区块链。

  • 首先是World state 通常使用数据库保存一组账本的当前的状态值,这样就不用遍历所有的交易日志(区块链)去计算当前的状态值,通常使用key-value键值对表示,状态值可被创建,更新和删除。
  • 其次是区块链,记录着决定world state状态的交易日志。交易的信息会收集起来追加到区块链,一旦写入,就不能修改了。
    超级账本之账本篇_第1张图片

2.world state

World state如上所述,程序和应用更多的时候需要获取账本当前的状态值。

World State数据库的选择 :
Hyperledger Fabric当前支持Level DB和CouchDB.

  • Level DB适合于简单的key-value键值对,嵌入网络的peer节点进程。
  • CouchDB适合于复杂些的world state状态要用JSON文档表示的场景,提供了更多的富查询特性,与peer节点进程隔离开。

重要的是,Hyperledger Fabric作为state DB实现的level DB或couchDB都是可插拔的设计, 完全可能用其它的关系型数据库或非关系型数据库实现。

3.区块链

区块链是交易日志,内部连接的区块,每个区块包含一系列的交易(一个区块中有不止一个交易),每个交易代表一个查询或更新world state的操作。

每个区块的头部包含了区块所有交易的哈希值,还有上一个区块头部的哈希值,
有点像链表,这样所有的交易就有序的串起来了,也可以保证数据的安全。即使保存账本的一个节点被篡改了,它不能让其它有正确区块记录的记账节点认同。
超级账本之账本篇_第2张图片
上图为例, B0是第一个区块,也称为genesis block创世块,没交易记录,只会保存有通道,orderer,peer等信息,后面我们实际部署配置的时候会用到创世块。

4.区块

(1)区块头部
头部的数字编号,从0开始递增。
当前区块的哈希值,例如下图的CH2
上一块区块的哈希值, 例如PH1
超级账本之账本篇_第3张图片
(2)区块数据段
B2开始保存的都是有序的交易日志。

(3)区块的元数据
包含区块写入的时间戳,证书,公钥,写入者的签名,是否合法的标记位等。

5.交易

交易数据的具体结构
超级账本之账本篇_第4张图片
(1)头部
即上图H4, 包含交易必要的元数据,例如对应的链码和版本等

(2)Sinature签名
上图S4, 由客户端应用创建,使用客户的私钥做签名。

(3)Proposal 提议
上图P4, 封装了应用提供给链码使用的输入参数,链码执行,使用这些入参, 与现有world state一起使用,就能计算出新的world state.

(4)响应
R4, 保存world state改变前后的状态值,作为读写的结合。 这个就是链码的响应,如果后面交易验证通过了,账本就按照响应去更新world state状态值。

(5)Endorsements背书记录
E4, 如之前章节所述,更新交易第一步发起提议后,需要背书节点的签名,就在这里记录了。

你可能感兴趣的:(超级账本)