目前市场上主流的区块链系统有比特币,Ripple,以太坊和 Hyperledger Fabric 。昨天小编已经为大家介绍了比特币和瑞波币(Ripple),今天小编将继续为大家分析当前主要流行的区块链的存储技术——以太坊和Hyperledger Fabric。
区块链简介:
区块链(英语:blockchain或block chain)是用分布式数据库识别、传播和记载信息的智能化对等网络,也称为价值互联网。中本聪于2008年在《比特币白皮书》中提出“区块链”概念,并在2009年创立了比特币社会网络,开发出第一个区块,即“创世区块”。区块链包含一张被称为区块的列表,有着持续增长并且排列整齐的记录。每个区块都包含一个时间戳和一个与前一区块的链接,这样设计区块链使得数据不可篡改,一旦记录下来,在一个区块中的数据将不可逆。
数据存储(二)
1、以太坊
以太坊是一个开源的有智能合约功能的公共区块链平台。通过其专用加密货币以太币(Ether,又称为「以太币」)提供去中心化的虚拟机(称为「以太虚拟机」Ethereum Virtual Machine)来处理点对点合约。
以太坊的区块主要由区块头和交易组成,区块在存储的过程中分别将区块头和交易体经过 RLP 编码后存入至 KV 数据当中。以太坊在数据存储的过程中,每个 value 对应的key 都有相对应的前缀,不同类型的 value 对应不同的前缀。
区块交易体的存储过程如下:
- 将区块中的交易数据和叔块头信息进行 RLP 编码从而生成存储值value;
- 将数据类型前缀,编码后的区块高度和区块哈希拼接生成 key;3.将存储至db数据库中。区块的信息可以通过区块哈希和区块高度进行检索,其存储过程如下:1.将区块头信息进行 RLP 编码从而生成存储值 value2.将区块高度进行编码(转发成大端格式数据)生成encNum
- 将数据类型前缀 (headerPrefix) 和 encNum 生成以区块高度为检索信息的 key4.将存储至db数据库中,从而生成以区块高度为检索的信息5.将数据类型前缀(blockHashPrefix)和区块哈希生成以区块哈希为检索信息的key6.将存储至db数据库中,从生成区块哈希为检索的信息在数据查询的时候,应用层只需要提供交易 hash、区块高度和区块哈希就能得到交易 key,从而查询到相关的交易信息。2、Hyperledger FabricHyperledger fabric (HLF)是由Linux基金会主导推广的区块链开源项目。在Hyperledger Fabric的基础上又衍生出了其他一些相关的项目。HyperLedger项目汇集了金融、银行、物联网、供应链、制造等各界开发人员的心血。目的是为了打造一个跨领域的区块链应用。HLF 的存储系统和比特币一样,也是由普通的文件和 kv 的数据库(levelDB/couchDB)组成。在 HLF 中,每个 channel 对应一个账本目录,在账本目录中由 blockfile_000000、blockfile_000001 命名格式的文件名组成。为了快速检索区块数据每个文件的大小是64 M Bytes。每个区块的数据(区块头和区块里的所有交易)都会序列成字节码的形式写入 blockfile 文件中。HLF存储区块数据的文件名格式如图所示:HLF检索信息文件如图所示:
在序列化的过程中,程序以 append 方式打开 blockfile 文件,然后将区块大小和和区块数据写入至 blockfile 文件中。
以下是区块数据写入的具体描述:
1.写入区块头数据,依次写入的数据为区块高度、交易哈希和前一个区块哈希;
- 写入交易数据,依次写入的数据为区块包含交易总量和每笔交易详细数据;
- 写入区块的Metadata 数据,依次写入的数据为 Metadata 数据总量和每个 Metadata 项的数据详细信息。在写入数据的过程中会以 kv 的形式保存区块和交易在 blockfile 文件中的索引信息,以方便 HLF 的快速查询。HLF 区块索引信息格式在 kv 数据库中存储的最终的 LevelKey 值有前缀标志和区块 hash 组成,而 LevelValue 的值由区块高度,区块 hash,本地文件信息(文件名,文件偏移等信息),每个交易在文件中的偏移列表和区块的 MetaData 组成, HLF 按照特定的编码方式将上述的信息拼接成 db 数据库中的 value 。HLF交易索引信息格式在kv数据库中存储最终的LevelKey值由channel_name,chaincode_name和chaincode中的key值组合而成:LevelKey = channel_name + []byte + chaincode_name + []byte + key而 LevelValue 的值由BlockNum 区块号,TxNum 交易在区块中的编号组成, HLF 通过将区块号和交易编号按照特定的方式编码,然后与 chaincode 中的 value 相互拼接最终生成 db 数据库中的 value 。总结:综上所述,本文介绍的主要区块链除了 Ripple 使用的关系型数据库存储、检索区块数据外,其他三种类型的区块链都使用 kv 数据库存储区块链的检索信息。在存储、检索数据上,比特币和 Hyperledger Fabric 高度一致,即使用普通文件存储区块数据,使用 kv 数据库存储检索信息;以太坊的区块数据和检索信息都存储至 kv 数据库中,而 Ripple 的区块数据也会存储至 kv 数据库中。