资源下载地址:https://download.csdn.net/download/sheziqiong/86831335
资源下载地址:https://download.csdn.net/download/sheziqiong/86831335文章来源地址https://www.toymoban.com/news/detail-713723.html
1.设计内容
利用 Python 实现一个 PoW 的仿真程序,模拟一定数量的节点生成区块链的状态。
- 设置参数包括:节点数量和每个轮次出块的成功率,测量区块链的增长速度。
- 设置一定数量的恶意节点实施攻击。
- 测量不同恶意节点比例(10%-40%)条件下,统计分叉攻击成功的长度测量
- 不同恶意节点比例条件下,自私挖矿收益比例
2.代码解析
- 程序入口是 simulate_pow.py,simulate_pow 函数参数为诚实节点数量,恶意节点数量和出块难度。默认参数设置如下:
- 修改
- 仿真结果保存在 log 目录下的日志中。
- 令恶意节点攻击第一个区块(genesis 块)
3.实验内容
3.1第一轮仿真
- 参数:honest node number = 10, evil node number = 0, difficulty = 000000
- 仿真结果:
- 平均出块时间: 66s,最短出块时间 3s,最长出块时间 202s
3.2第二轮仿真
- 参数:honest node number = 10, evil node number = 0, difficulty = 00000
- 仿真结果:
- 平均出块时间: 3s,最短出块时间 0s(精确到个位),最长出块时间 7s
3.3第三轮仿真
- 参数:honest node number = 10, evil node number = 1, difficulty = 00000
- 仿真结果:
- 恶意节点攻击失败
3.4第四轮仿真
- 参数:honest node number = 10, evil node number = 4, difficulty = 00000
- 1 到 10 号 miner 为 honest node,11 号到 14 号为 evil node
- 可以看到,诚实节点在领先一个区块的情况下被恶意节点瞬间反超,我认为这和 python 多线程的机制有关。python 多线程并不是真正意义上的并行,并且会先调度后创建的线程。为了更真实地模拟分叉攻击,我决定让诚实节点领先一个区块后再让恶意节点开始攻击,并且提高出块难度。
- 参数:honest node number = 10, evil node number = 4, difficulty = 000000
- 0 到 9 号 miner 为 honest node,10 号到 13 号为 evil node
文章来源:https://www.toymoban.com/news/detail-713723.html
- 可以看到,python 多线程优先调度后创建的线程,因此恶意节点攻击成功。
资源下载地址:https://download.csdn.net/download/sheziqiong/86831335
资源下载地址:https://download.csdn.net/download/sheziqiong/86831335
到了这里,关于基于Python实现一个PoW的仿真程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!