用simwiz.py仿真区块链网络与共识算法【Python】-阿里云开发者社区

开发者社区> ezpod> 正文

用simwiz.py仿真区块链网络与共识算法【Python】

简介:
+关注继续查看

simwiz.py是一个用于区块链仿真系统开发的Python包,适合快速实现共识算法的仿真,或者进行大规模区块链网络的实验,例如物联网+区块链系统等。官方下载地址:http://sc.hubwiz.com/codebag/simwiz-python/

1、开发包概述

simwiz.py区块链仿真开发包的主要特点如下:

  • 基于离散事件仿真机制,可以单机模拟包含大量节点的区块链网络
  • 内置仿真网络和区块链数据结构,可快速进行共识算法和区块链网络的仿真实验
  • 简洁的API接口,非常容易上手,便于二次开发

simwiz.py运行在Python 3.x环境下,当前版本1.0.0,主要类及关系如下图所示:

在这里插入图片描述

simwiz.py的主要代码文件参见官网说明:http://sc.hubwiz.com/codebag/simwiz-python/

2、使用演示程序

在终端进入simwiz.py开发包目录,执行如下命令运行内置的演示程序:

~$ cd simwiz.py
~/simwiz.py$ python3 demo.py

演示程序中,4个节点构成的区块链网络会定期输出其内部区块链构成,结果如下:

在这里插入图片描述

可以看到各节点(0 ~ 3)在每个出块周期(1 ~ 7)都通过共识算法保持了区块链数据的一致。

3、启动仿真区块链

使用Simulation类来创建仿真实例,并调用其run()方法启动仿真。例如,下面的代码创建一个包含4个默认节点的区块链网络的仿真对象,并执行1000毫秒的仿真:

from simwiz import *                                    # 引入simwiz包  

minters = 4
nodes = [                                               # 创建4个节点
  BlockchainNode(interval=100,minters=minters) 
  for i in range(minters)
]  
net = Network(nodes)                                    # 4个节点组网 
sim = Simulation(net)                                   # 创建仿真对象 

sim.run(1000)                                           # 仿真1秒钟     

4、自定义共识算法的实现

simwiz.py开发包内置的BlockchainNode类采用的共识算法类似于DPoS,即根据时间槽来决定当前的出块节点。可以通过继承BlockchainNode并重写其on_timer方法与on_message方法,实现自定义的共识算法。例如,让每个节点按预设的概率出块:

from simwiz import *
import random

class PoxNode(BlockchainNode):
  def __init__(self,prob,interval,minters):
    super.__init__(interval,minters)
    self.prob = prob                                    # 当前节点的出块概率
    
  def on_timer(self,sim):
    if random.random() < self.prob:
      block = self.blockchain.create_next_block()       # 出块
      msg = pojo({                                      # 创建区块消息
        'type': 'block',
        'payload': block
      })
      sim.broadcast(self,msg)                           # 广播区块消息
          
  def on_message(self,sim,message):
    if message.type == 'block':                 
      self.blockchain.commit_block(message.payload)     # 提交收到的区块
    if message.type == 'transaction':
      self.blockchain.cache_tx(message.payload)         # 暂存收到的交易

按概率出块的区块链共识算法都可以采用这个PoxNode模型来仿真,例如PoW(工作量证明)共识算法,每个节点的出块概率是与节点算力相对应的,即:节点出块概率 = 节点算力 / 全网算力

下面的代码利用PoxNode来仿真一个包含100个节点的PoW网络:

miners = 100                                            # 100个挖矿节点
prob = 0.01                                             # 按均匀分布采样每个节点的出块概率
interval = 100                                          # 出块周期设置为100毫秒
nodes = [                                               # 创建节点对象
  PoxNode(prob,interval,miners) 
  for i in range(100) 
]
sim = Simulation(Network(nodes))                        # 创建仿真对象  
sim.run(10000)                                          # 执行10秒的仿真

SimWiz.Py官方下载地址:http://sc.hubwiz.com/codebag/simwiz-python/

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
一文详解神经网络 BP 算法原理及 Python 实现
  什么是梯度下降和链式求导法则 假设我们有一个函数 J(w),如下图所示。 梯度下降示意图 现在,我们要求当 w 等于什么的时候,J(w) 能够取到最小值。从图中我们知道最小值在初始位置的左边,也就意味着如果想要使 J(w) 最小,w的值需要减小。
2695 0
计算机网络 自顶向下方法 第三章 运输层
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a724888/article/details/78206492 第三章 运.
1114 0
【云计算的1024种玩法】1小时使用阿里云区块链服务创建一个区块链小游戏
区块链绝对是17 18年的热词,也是国家各种文件所重点支持的新型技术,几乎大家都会提区块链,企业也都很愿意基于区块链来解决的信任场景,但是苦于构建底层架构的复杂以及相关成本没有办法实施。而区块链服务就是为此而生的。
2464 0
区块链应用 | 以太坊网络交易量超 6 大币种总和
以太坊网络交易量超 6 大币种总和
967 0
网络安全与机器学习(一):网络安全中的机器学习算法
网络安全遇见机器学习,会摩擦出怎样的火花呢?
2979 0
计算机网络 自顶向下方法 第二章 应用层
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a724888/article/details/78197072 计算机网络 自顶向下方法 第二章 应用层  分类:计算机网络-笔记(2)  版权声明:本文为博主原创文章,未经博主允许不得转载。
1223 0
超级账本推出可商用区块链开源平台Sawtooth 1.0,支持以太坊智能合约
这是Hyperledger Fabric 1.0之后的第二个开放的Hyperledger项目。
1272 0
+关注
ezpod
汇智网,http://www.hubwiz.com
213
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载