区块链核心代码2
区块链存储机制
理论上任何的数据库都可以,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成员函数,创建迭代器
当前类图:
评论