区块链流程图2 命令行实现
Block结构实现
数据准备
prepare_hash_data:
- 把待哈希内容序列化
- 注:由于时间戳一开始就被计算出来,故并不是挖矿成功的时间戳
验证机制
validate:
- 调用prepare获取数据
- 注:每次要重新调用prepare是因为nonce每次都变化了
- 判断是否哈希值符合要求
工作量证明执行
run_proof_of_work:
- 循环调用validata
- 每次把nonce+1,成功了则把self.hash赋值
区块创建
new_block:
- 获取当前时间戳
- 新创建block,赋值好前哈希,data,时间戳
- 调用run_proof赋值哈希
创世块生成
new_genesis_block:
- 直接生成
Blockchain结构实现
成员变量
- 删除blockchains
- tip最新区块的哈希值
- db
- currentHash(用于迭代器)当前哈希
- 从尾到头部返回
构造函数
new():
- 返回blockchain
- 打开db
- 调用get(“last”)查询
- last为存储的最后一个哈希值
- 若不存在
- 创建创世块并insert
- 为last字段也insert赋值
- 初始化blockchain并flush返回
- 若存在
- 把tip和currentHash都赋值为这个哈希
- 赋值db之后返回
区块添加
add_block:
- 从last获取新块的前哈希
- 调用new_block(data, prev.get_hash())
- 每个块都是一个键值对存储key为hash,value是块的序列化
- 插入db,并更新last和tip和curretHash
迭代器实现
Iterator:
- next
- 调用currentHash来get块
- 返回这个块,并且把curretHash赋值为前hash
CLI实现
结构定义
- 就一个blockchain成员
初始化
new:
- 调用blockchain构造函数
命令行运行
run:
- 注册命令行app
- 判断是否输入了对应命令
- 执行addblock
- 执行print_chain
主程序实现
- 初始化日志系统
- 创建cli
- 调用run
评论