主页 > imtoken离线钱包 > 各区块链底层数据存储分析(二)

各区块链底层数据存储分析(二)

imtoken离线钱包 2023-01-17 04:19:56

目前市场上主流的区块链系统包括比特币、Ripple、以太坊和Hyperledger Fabric。昨天小编给大家介绍了比特币和瑞波币。今天,小编就继续分析目前主要流行的区块链——以太坊和Hyperledger Fabric的存储技术。

区块链简介

区块链(英文:blockchain或blockchain)是一种利用分布式数据库来识别、传播和记录信息的智能点对点网络,也称为价值互联网。中本聪在 2008 年的《比特币白皮书》中提出了“区块链”的概念,并于 2009 年创立了比特币社交网络并开发了第一个区块“创世区块”。区块链由一个称为块的列表组成,其中包含不断增长且排列整齐的记录。每个区块都包含一个时间戳和前一个区块的链接,因此区块链的设计是数据不可篡改,一旦记录,区块中的数据将不可逆。

各区块链底层数据存储分析(二)

数据存储(二)

1、以太坊

以太坊是一个具有智能合约功能的开源公链平台。它通过其专用的加密货币以太(Ether,也称为“以太”)提供一个去中心化的虚拟机(称为“以太虚拟机”)。 Machine) 来处理点对点合约。

以太坊的区块主要由区块头和交易组成。在区块的存储过程中,区块头和交易主体分别经过 RLP 编码,存储在 KV 数据中。其中,在以太坊数据存储过程中,每个值对应的key都有对应的前缀,不同类型的值对应不同的前缀。

区块交易体的存储过程如下:

1. RLP对区块中的交易数据和叔块头信息进行编码,生成存储值;

2.前缀数据类型,编码后区块高度和区块哈希拼接生成key;

3. 将存储在 db 数据库中。

可以通过区块哈希获取区块的信息并检索区块高度,存储过程如下:

1.RLP编码块头信息生成存储值

2.对块高度进行编码(转发为大端格式数据)生成encNum

3. 数据类型前缀(headerPrefix)和encNum用于生成以块高为检索信息的key

4.会存储在db数据库中,生成以区块高度检索的信息

5.数据类型前缀(blockHashPrefix)和区块哈希会随着区块高度生成区块哈希是获取信息的关键

6.会存储在db数据库中,block hash就是从生成的block中检索到的信息

查询数据时区块链存储数据太大区块链存储数据太大,应用层只需提供交易hash、区块高度和区块hash即可获取交易key,从而查询相关交易信息。

2、超级账本结构

Hyperledger Fabric (HLF) 是由 Linux 基金会推动的开源区块链项目。在 Hyperledger Fabric 的基础上衍生出其他相关项目。 HyperLedger项目汇集了金融、银行、物联网、供应链、制造业等各行各业开发者的心血。目的是创建一个跨域的区块链应用。

HLF的存储系统和比特币一样,也是由普通文件和kv数据库(levelDB/couchDB)组成。在 HLF 中,每个通道对应一个账本目录,该账本目录由命名格式为 blockfile_000000、blockfile_000001 的文件名组成。每个文件的大小为 64 M 字节,用于快速检索块数据。每个区块的数据(区块头和区块内的所有交易)都会被序列化成字节码的形式写入到blockfile文件中。

HLF存储块数据的文件名格式如图:

各区块链底层数据存储分析(二)

HLF检索信息文件如图:

各区块链底层数据存储分析(二)

在序列化过程中,程序以追加方式打开blockfile文件,然后将块大小和块数据写入到blockfile文件中。

以下是块数据写入的具体说明:

1.写入区块头数据,依次写入的数据是区块高度、交易哈希和上一个区块的哈希;

2.写入交易数据,依次写入的数据是包含交易总金额和每笔交易明细数据的区块;

3. 写入块的元数据数据。依次写入的数据是Metadata数据总量和每个Metadata项的数据明细。

在写入数据的过程中,blockfile文件中的blocks和transactions的索引信息会以kv的形式保存起来,方便HLF的快速查询。

最终以HLF区块索引信息格式存储在kv数据库中的LevelKey值由前缀标志和区块hash组成,LevelValue的值由区块高度、区块hash、本地文件信息(文件名、文件偏移等信息),文件中每个事务的偏移列表和块的元数据组成。 HLF将上述信息按照特定的编码方式拼接到db数据库中的值中。

HLF交易索引信息格式将最终的LevelKey值存储在kv数据库中,由channel_name、chaincode_name和chaincode中的key值组成:

LevelKey = channel_name + []byte + chaincode_name + []byte + key

而LevelValue的值由BlockNum区块号、区块中的TxNum交易号组成,HLF通过特定的方式对区块号和交易号进行编码,最后与该值拼接生成db数据库中的值在链码中。

总结

综上所述,除了Ripple用来存储和检索区块数据的关系型数据库外,本文介绍的主要区块链还有其他三种类型的区块链。两者都使用 kv 数据库来存储区块链的检索信息。在存储和检索数据方面,Bitcoin 和 Hyperledger Fabric 高度一致,即使用普通文件存储区块数据,使用 kv 数据库存储检索信息;以太坊的区块数据和检索信息存储在kv数据库中,而Ripple的Block数据也存储在kv数据库中。