# 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 用计算时间来达成共识,这令我感到非常新奇。
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
资源包含文件:设计报告word+源码 利用Python实现一个PoW的仿真程序,模拟一定数量的节点生成区块链的状态。详细介绍你参考:https://blog.csdn.net/newlw/article/details/125868975
资源推荐
资源详情
资源评论
收起资源包目录
基于Python实现一个PoW的仿真程序.zip (29个子文件)
log
honest=10 evil=1 difficulty=00000.log 3KB
honest=10 evil=4 difficulty=000000.log 6KB
honest=10 evil=0 difficulty=00000.log 3KB
block
test.py 142B
__pycache__
__init__.cpython-38.pyc 147B
block.cpython-38.pyc 2KB
__init__.py 1024B
block.py 2KB
LICENSE 1KB
.idea
misc.xml 192B
vcs.xml 180B
modules.xml 276B
myBlockchain.iml 478B
inspectionProfiles
profiles_settings.xml 174B
POW仿真报告.doc 485KB
chain
__pycache__
__init__.cpython-38.pyc 147B
chain.cpython-38.pyc 2KB
__init__.py 1024B
chain.py 3KB
README.md 3KB
util
performance.py 1KB
__pycache__
__init__.cpython-38.pyc 146B
log.cpython-38.pyc 675B
performance.cpython-38.pyc 1KB
gen.cpython-38.pyc 709B
__init__.py 1024B
log.py 615B
gen.py 613B
simulate_pow.py 2KB
共 29 条
- 1
shejizuopin
- 粉丝: 9533
- 资源: 1288
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- JavaScript《基于自动分析数据并给出营业建议的餐厅管理系统(接入AI) 》+源代码+项目说明及资料
- 355670834783295707ad04e-427f-4cde-9589-e578224a8459.zip
- 动态sql解析引擎,类似mybatis动态sql的功能
- EDA365-Skill-V2.5安装包,支持Allegro17.x版本
- C# 常用单词汇总,常用单词汇总
- 【ERP标准流程-标准流程-库内业务管理】(DOC 14页).doc
- Python《数据库期末作业-餐厅点单系统 》+源代码+设计资料
- 学生成绩管理系统(C++课程设计
- 双指针法判断链表有环-go语言实现
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
前往页