用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/
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【云栖号案例 | 新零售】蒙牛教你如何云上养牛
云栖号案例库:【点击查看更多上云案例】不知道怎么上云?看云栖号案例库,了解不同行业不同发展阶段的上云方案,助力你上云决策! 2019年是蒙牛创业20周年,这家成立于内蒙古的公司是全球增长最快的乳企,2018年蒙牛乳业实现收入689.77亿元,同比增长14.66%。随着业务的迅速发展,蒙牛也和其他国际领先的乳业公司一样,面临着商品销售费用迅速增加、利润摊薄等问题。如何通过改善内部运营效率、降低经销成本,是蒙牛目前面临的重要挑战之一。 数字化转型困惑一:奶牛今天状态好不好? 你可能不知道,其实牛也有情绪好坏。奶牛的健康状况、情绪好坏,会直接影响到产奶量和产奶品质。 目前蒙牛有100万头牛,将近800个牧场。以前大多数传统牧场主要依靠人工经验来管理。现在,蒙牛和阿里巴巴合作在奶牛养殖的许多环节进行了数字化,阿里云还正在帮助蒙牛旗下牧场的奶牛逐步连接上物联网,从饲养到产奶,对奶牛及牧场运营实现数字化监控,逐步提高牛奶质量产量,提升牧场运营效益。 在牧场里,每头牛的脖子上都挂着智能脖环。安装在特定区域的物联网网关通过这些智能脖环监测奶牛每日活动量、产奶信息、每日反刍次数等实时数据。比如监测奶牛一...
- 下一篇
一分钟了解生活物联网平台概述
云栖号快速入门:【点击查看更多云产品快速入门】不知道怎么入门?这里分分钟解决新手入门等基础问题,可快速完成产品配置操作! 生活物联网平台是阿里云IoT针对生活领域推出的物联网平台,以解决家电智能化的问题。本文带您了解生活物联网平台的简要使用流程。 原理图 准备工作 请确保您已经注册了阿里云账号,并完成实名认证。注册操作请参见阿里云账号注册流程。 请确保账号已开通生活物联网平台服务。 请安装好设备固件开发所需的Linux开发环境,建议使用64位Ubuntu 16.04开发环境。 请安装好用于烧录设备证书和固件的串口烧录调试工具。设备使用SDK和证书接入生活物联网平台。由于各类设备的烧录方式略有差异,本文以烧录经平台认证的MK3060模组为例,安装了SecureCRT串口烧录工具。 操作步骤 1.创建项目:项目不仅便于您管理产品,还可以实现多方协同工作。2.创建产品并定义功能:产品相当于同类设备的集合,例如,产品可以是某种型号的设备。您可以通过属性、服务和事件三个维度定义产品的功能。平台将根据您定义的功能构建出产品的数据模型,用于云端与设备端的数据通信。3.添加设备:设备指某个具体设备。每...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,CentOS7官方镜像安装Oracle11G
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Red5直播服务器,属于Java语言的直播服务器
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7