区块链模拟器
Author: Hopeace
Data: 2023-06-08
Link: concept-inversion/blockchain-simulator: A blockchain simulator based on SimPy in python. (github.com)
blockchain-simulator-master
区块链模拟器代码分析
- 区块链模拟器
- 部件
- 相关函数介绍
- 总结
部件
+ 区块 blocks.py+ 网络结点管理器 network_state_graph.py+ 交易 transactions.py+ 监控日志 monitor.py+ 主程序 blockchain_simulation.py+ 每个用户被看作一个结点+ 随机选取一个记账先生+ 所维护资源包括+ 交易池txpool+ 缓冲池pendingpool+ 区块链链表block_list+ 上一个时刻同步的区块链链表known_blocks+ 上一个时刻同步的交易记录known_tx+ 上一时刻所有信息得到的哈希值prev_hash
相关函数介绍
主程序nodes类中包含以下函数
- add_transaction
建立新的交易行为
- 向tx池中加入交易信息
- 向known_tx表中加入id号
- 广播交易给所有结点
- receiver
其他用户结点接收交易信息以及区块广播
- 当前结点已记录交易信息则pass
- 如果没有,则添加id号,data数据等信息
- broadcaster
广播给其他用户结点并记录广播结点与其他结点的延迟
调用receiver
- create_block
创建区块block
交易从txpool中pop到pendingpool中
交易结束后,将其作为新的信息迭代到哈希值中
self.prev_hash = block.hash
在block列表首部插入最新的block
调用broadcaster函数广播当前区块同步给其它用户节点
- receive_block
其他结点同步新产生的区块
校验哈希值
self.prev_hash == self.intr_data.prev_hash
无误则同步
其他函数如node_generator、trans_generator、monitor、POA与模拟过程相关,不涉及到区块链技术本身
程序运行
python blockchain_simulation.py
总结
用户间进行交易产生交易行为并对外广播 => 记账先生(随机选取结点)发现交易行为后,利用自身算力,利用过去信息的哈希值与新的交易信息结合计算出新的哈希值,将其构建成新的区块,并将这个区块对外广播 => 其他所有用户结点接收到区块广播后,更新自己维护的区块链表 => 交易全过程结束,区块链更新实现