# 1.作业内容
利用 Python 实现一个 PoW 的仿真程序,模拟一定数量的节点生成区块链的状态。
- 设置参数包括:节点数量和每个轮次出块的成功率,测量区块链的增长速度。
- 设置一定数量的恶意节点实施攻击。
- 测量不同恶意节点比例(10%-40%)条件下,统计分叉攻击成功的长度测量
- 不同恶意节点比例条件下,自私挖矿收益比例
# 2.代码解析
- 程序入口是 simulate_pow.py,simulate_pow 函数参数为诚实节点数量,恶意节点数量和出块难度。默认参数设置如下:
![](https://www.writebug.com/myres/static/uploads/2022/7/19/f43e8ab0bdcf46077412046ba2e0c434.writebug)
- 修改
![](https://www.writebug.com/myres/static/uploads/2022/7/19/05e4ab48304a185e198ee45a2ceda470.writebug)
- 仿真结果保存在 log 目录下的日志中。
- 令恶意节点攻击第一个区块(genesis 块)
![](https://www.writebug.com/myres/static/uploads/2022/7/19/a92e3312ddc92b554eda53f7cc81a4df.writebug)
# 3.实验内容
## 3.1第一轮仿真
- 参数:honest node number = 10, evil node number = 0, difficulty = 000000
- 仿真结果:
![](https://www.writebug.com/myres/static/uploads/2022/7/19/d1810348a8b829f1b0cb4bd3fd085e54.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/7/19/bbd2b9ac12708be3a87bed5bcae4e488.writebug)
- 平均出块时间: 66s,最短出块时间 3s,最长出块时间 202s
## 3.2第二轮仿真
- 参数:honest node number = 10, evil node number = 0, difficulty = 00000
- 仿真结果:
![](https://www.writebug.com/myres/static/uploads/2022/7/19/25a22ee0eb0571c1bbbc2d52d929f155.writebug)
- 平均出块时间: 3s,最短出块时间 0s(精确到个位),最长出块时间 7s
## 3.3第三轮仿真
- 参数:honest node number = 10, evil node number = 1, difficulty = 00000
- 仿真结果:
![](https://www.writebug.com/myres/static/uploads/2022/7/19/b885a706e911e4a1a9b0610475a010a1.writebug)
- 恶意节点攻击失败
## 3.4第四轮仿真
- 参数:honest node number = 10, evil node number = 4, difficulty = 00000
- 1 到 10 号 miner 为 honest node,11 号到 14 号为 evil node
![](https://www.writebug.com/myres/static/uploads/2022/7/19/ca31c5e9d6a1c4687c48fee61d0dd839.writebug)
- 可以看到,诚实节点在领先一个区块的情况下被恶意节点瞬间反超,我认为这和 python 多线程的机制有关。python 多线程并不是真正意义上的并行,并且会先调度后创建的线程。为了更真实地模拟分叉攻击,我决定让诚实节点领先一个区块后再让恶意节点开始攻击,并且提高出块难度。
- 参数:honest node number = 10, evil node number = 4, difficulty = 000000
- 0 到 9 号 miner 为 honest node,10 号到 13 号为 evil node
![](https://www.writebug.com/myres/static/uploads/2022/7/19/e6e18f9883f19782ecf0054ae832fc3f.writebug)
- 可以看到,python 多线程优先调度后创建的线程,因此恶意节点攻击成功。
# 4.实验心得
由于 python 多线程的机制,本次仿真并不能很好地模拟分叉攻击。攻击成功与否极度依赖于线程调度顺序。通过本次实验,我理解了 Prove of Work 共识协议,与 Raft 和 Paxos 达成共识的方法完全不同,POW 用计算时间来达成共识,这令我感到非常新奇。
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
100011193-基于Python实现一个PoW的仿真程序.zip (30个子文件)
smulation
POW仿真报告.doc 482KB
LICENSE 1KB
.idea
myBlockchain.iml 478B
vcs.xml 180B
misc.xml 192B
inspectionProfiles
profiles_settings.xml 174B
modules.xml 276B
POW仿真报告.pdf 695KB
simulate_pow.py 2KB
block
__init__.py 1024B
block.py 2KB
__pycache__
block.cpython-38.pyc 2KB
__init__.cpython-38.pyc 147B
test.py 142B
util
__init__.py 1024B
performance.py 1KB
log.py 615B
gen.py 613B
__pycache__
log.cpython-38.pyc 675B
gen.cpython-38.pyc 709B
__init__.cpython-38.pyc 146B
performance.cpython-38.pyc 1KB
chain
__init__.py 1024B
__pycache__
chain.cpython-38.pyc 2KB
__init__.cpython-38.pyc 147B
chain.py 3KB
README.md 3KB
log
honest=10 evil=1 difficulty=00000.log 3KB
honest=10 evil=0 difficulty=00000.log 3KB
honest=10 evil=4 difficulty=000000.log 6KB
共 30 条
- 1
资源评论
- weixin_527887612023-11-01终于找到了超赞的宝藏资源,果断冲冲冲,支持!
- 努力上进。2023-10-24资源很好用,有较大的参考价值,资源不错,支持一下。
- m0_496171602024-01-04超级好的资源,很值得参考学习,对我启发很大,支持!
- dianxin20232023-10-23资源很好用,有较大的参考价值,资源不错,支持一下。
神仙别闹
- 粉丝: 2672
- 资源: 7640
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于matlab实现对表面肌电信号进行归一化处理,并对归一化后的图形显示 .rar
- 基于matlab实现单级倒立摆的 T-S 模型 包括 LMI 程序源码
- 图书管理系统(struts+hibernate+spring+ext).rar
- 基于matlab实现此压缩包包含语音信号处理中的语音变声代码加音频.rar
- STM32使用PWM驱动舵机并通过OLED显示
- 基于matlab实现车辆路径规划;遗传算法;matlab代码.rar
- 图书管理系统(struts+hibernate+spring)130225.rar
- 基于matlab实现采用标量衍射理论,实现菲涅尔衍射和夫琅禾费衍射,对光波的波前传播和数字全息的应用有帮助.rar
- JavaScript版去除链表重复元素
- 微信小程序项目-功德木鱼(带设置面板-自定义文字、可选字体颜色、可选木鱼样式)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功