区块链存储机制

理论上任何的数据库都可以,bitcoin本质上是分布式存储。

但是这边先讨论存储,若使用字节型数据库则需要把block给序列化存储。

bitcoin的存储一般分为了blocks和chainstate:

  • blocks里面就是每个区块的内容
  • chainstate存放着剩余的比特币数量

注意:为了性能可以单独存储每一块,这样就不需要把整个链拿出来,但是一起存较为简单。

核心实现

1. 序列化

提供序列化的block成员函数,把自身序列化。

2. 反序列化

提供反序列化的非成员函数,会返回一个block。

3. 创世块存储

修改创建创世块函数,打开数据库(键值对),读取blocksBucket:

  • 若没有则创建并往里面放入创世块和l键
  • 若已经存在了则读取l键,然后返回blockchain(这个blockchain,内部加一个了db的成员指针)

注意:l键始终存储了最后一个块的哈希值,且存放一个块的时候以他的哈希为key,序列化为value,可以通过get(key)获取value。

4. 区块添加修改

修改addblock函数,修改前哈希的来源为数据库中的l键。

5. 遍历功能

添加遍历blockchain函数,l键到创世块,先通过l键获取最后一个区块,然后用每个区块的前哈希来更新当前哈希继续遍历。

6. 迭代器实现

  • 新增迭代器类
  • 新增blockchain成员函数,创建迭代器

当前类图: