基于Python实现一个PoW的仿真程序

这篇具有很好参考价值的文章主要介绍了基于Python实现一个PoW的仿真程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

资源下载地址: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 函数参数为诚实节点数量,恶意节点数量和出块难度。默认参数设置如下:

基于python实现一个pow的仿真程序.,区块链,Python,PoW仿真,PoW的仿真程序,课程设计

  • 修改

基于python实现一个pow的仿真程序.,区块链,Python,PoW仿真,PoW的仿真程序,课程设计

  • 仿真结果保存在 log 目录下的日志中。
  • 令恶意节点攻击第一个区块(genesis 块)

基于python实现一个pow的仿真程序.,区块链,Python,PoW仿真,PoW的仿真程序,课程设计

3.实验内容

3.1第一轮仿真

  • 参数:honest node number = 10, evil node number = 0, difficulty = 000000
  • 仿真结果:

基于python实现一个pow的仿真程序.,区块链,Python,PoW仿真,PoW的仿真程序,课程设计
基于python实现一个pow的仿真程序.,区块链,Python,PoW仿真,PoW的仿真程序,课程设计

  • 平均出块时间: 66s,最短出块时间 3s,最长出块时间 202s

3.2第二轮仿真

  • 参数:honest node number = 10, evil node number = 0, difficulty = 00000
  • 仿真结果:

基于python实现一个pow的仿真程序.,区块链,Python,PoW仿真,PoW的仿真程序,课程设计

  • 平均出块时间: 3s,最短出块时间 0s(精确到个位),最长出块时间 7s

3.3第三轮仿真

  • 参数:honest node number = 10, evil node number = 1, difficulty = 00000
  • 仿真结果:

基于python实现一个pow的仿真程序.,区块链,Python,PoW仿真,PoW的仿真程序,课程设计

  • 恶意节点攻击失败

3.4第四轮仿真

  • 参数:honest node number = 10, evil node number = 4, difficulty = 00000
  • 1 到 10 号 miner 为 honest node,11 号到 14 号为 evil node

基于python实现一个pow的仿真程序.,区块链,Python,PoW仿真,PoW的仿真程序,课程设计

  • 可以看到,诚实节点在领先一个区块的情况下被恶意节点瞬间反超,我认为这和 python 多线程的机制有关。python 多线程并不是真正意义上的并行,并且会先调度后创建的线程。为了更真实地模拟分叉攻击,我决定让诚实节点领先一个区块后再让恶意节点开始攻击,并且提高出块难度。
  • 参数:honest node number = 10, evil node number = 4, difficulty = 000000
  • 0 到 9 号 miner 为 honest node,10 号到 13 号为 evil node

基于python实现一个pow的仿真程序.,区块链,Python,PoW仿真,PoW的仿真程序,课程设计

  • 可以看到,python 多线程优先调度后创建的线程,因此恶意节点攻击成功。

资源下载地址:https://download.csdn.net/download/sheziqiong/86831335
资源下载地址:https://download.csdn.net/download/sheziqiong/86831335

到了这里,关于基于Python实现一个PoW的仿真程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c++中的pow函数

    目录 简介: 实例: 可能出现的错误: 负指数问题:pow 函数可以计算负指数,但它不处理负数的复数结果。如果计算负指数并且结果应该是复数,您需要使用复数库或手动处理。 2 溢出问题: 3头文件不包含: 简介: 在C++中, pow 函数用于计算一个数的指数幂(就是几次方

    2024年02月07日
    浏览(34)
  • PoW 、PoS , DPoS 算法

    PoW 、PoS , DPoS 算法 在区块链领域,多采用 PoW 工作量证明算法、PoS 权益证明算法,以及 DPoS 代理权 益证明算法,以上三种是业界主流的共识算法,这些算法与经典分布式一致性算法不同的是 融入了经济学博弈的概念。 PoW:通常是指在给定的约束下,求解一个特定难度的数

    2024年02月02日
    浏览(28)
  • LeetCode——Pow(x, n)

    50. Pow(x, n) - 力扣(Leetcode) 实现 pow(x, n) ,即计算  x  的整数  n  次幂函数(即, x ⁿ )。 示例 1: 示例 2: 示例 3: 提示: -100.0 x 100.0 -2 ³ ¹ = n = 2 ³ ¹-1 n  是一个整数 要么  x  不为零,要么  n 0  。 -10 ⁴  = x ⁿ  = 10 ⁴ 题目要求我们实现 pow(x, n) 函数,即求解

    2024年02月09日
    浏览(25)
  • LeetCode ! 50. Pow(x, n)

    参考资料:左程云算法课 , 《程序员代码面试指南》 思路: 以求 1 0 75 10^{75} 1 0 75 为例, 75 = 64 + 8 + 2 + 1 = ( 1001011 ) 2 75 = 64+8+2+1=(1001011)_2 75 = 64 + 8 + 2 + 1 = ( 1001011 ) 2 ​ so, 1 0 75 = 1 0 64 × 1 ⋅ 1 0 32 × 0 ⋅ 1 0 16 × 0 ⋅ 1 0 8 × 1 ⋅ 1 0 4 × 0 ⋅ 1 0 2 × 1 ⋅ 1 0 1 × 1 = 1 0 ( 1001011 ) 2

    2024年02月08日
    浏览(24)
  • 区块链学习Day03(Pow算法)

    声明:笔记用作自己学习,本人也不太讲的清,请见谅。 生成新的区块,再返回新的块,也会包含上面的属性,前一个哈希也会变得,就是preHash:前一个节点得哈希。 代码继续跟着上一章文章,不懂得看下面 链接:区块链学习Day02(Pow算法) 结果: 省略… 4b5ffc524ced8f17059a

    2024年02月04日
    浏览(35)
  • 求数值的整数次方(模拟pow函数)

    实现函数 double Power(double base, int exponent),求base的exponent次方。 注意: 1.保证base和exponent不同时为0。 2.不得使用库函数,同时不需要考虑大数问题 3.有特殊判题,不用考虑小数点后面0的位数。 具体实现: 本方法中利用不断扩大原本的base,实现在O(logn)的时间复杂度。其中判

    2024年02月11日
    浏览(36)
  • eth入门之工作量证明 (POW)

    文档:工作量证明 (PoW) | ethereum.org 以太坊目前使用的共识协议被称为工作量证明 (PoW)。 这允许以太坊网络的节点就以太坊区块链上记录的所有信息的状态达成共识,并防止经济攻击。 接下来一年,工作量证明将被逐步淘汰,这有利于权益证明 (PoS) 的发展。 向权益证明 (Po

    2024年02月06日
    浏览(32)
  • 算法leetcode|50. Pow(x, n)(rust重拳出击)

    实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即, x n )。 解释: 2 -2 = 1/2 2 = 1/4 = 0.25 -100.0 x 100.0 -2 31 = n = 2 31 -1 n 是一个整数 -10 4 = x n = 10 4 面对这道算法题目,二当家的再次陷入了沉思。 直接想到的就是模拟, x 循环 n - 1 次乘以 x ,时间可以抹平一切,但是会非常慢。 还

    2024年02月05日
    浏览(31)
  • C++斩题录|递归专题 | leetcode50. Pow(x, n)

    个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助 🍓希望我们一起努力、成长,共同进步。

    2024年02月07日
    浏览(27)
  • 学习C#必备的编程软件——pow_na的博客

    c#可有的编程软件:Visual Studio、Visual Studio Code、MonoDevelop、SharpDevelop、Rider、SlickEdit、C# Pad、Jdoodle、.NET Fiddle、Scriptcs等等。 C#是微软公司发布的一种面向对象的、运行于.NET Framework和.NET Core(完全开源,跨平台)之上的高级程序设计语言。 C#是一种安全的、稳定的、简单的、优雅

    2024年02月05日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包