区块链中节点间的通信

一.本章导学

区块链网络节点间的通信相对于传统系统存在较为明显的区别,借助“P2P"通信技术,区块链网络中可实现节点与节点间的数据直传。本章节在此类知识将首先比较不同类别的区块链网络,分析相应优缺点,借用networkx绘制不同类别的区块链网络。接下来,本章节将介绍“P2P”通信,并借用Python相关依赖包实现点对点通信。最后,本章节将介绍Gossip协议,并借助Python相关依赖包实现基于Gossip协议通信的系统。

二.学习目标

1.掌握区块链网络的基本概念,能够使用外置依赖库绘制网络拓扑模型。

2.掌握P2P网络通信的基本概念以及Socket通信的实现方式。

3.掌握基于Socket通信的P2P通信原理,能够使用程序设计语言实现P2P通信。

4.掌握区块链网络通信的基本概念以及Gossip协议的实现方法。

5.掌握基于程序设计编码的定时器工具及实现方法。

三.思维导图

四.使用networkx绘制

第一步:

创建文件

第二步:

安装networkx和 matplotlib

Pip install network

Pip install matplotlib
第三步:

绘制图形,借助matplotlib依赖包实现,在导入matplotlib包之后使用networkx中的draw模块导入图形,完善相应的代码

创建一个简单的网络

 五.绘制不同的区块链网络

使用 NetworkX 绘制不同类型的区块链网络,包括私有链网络、联盟链网络以及公有 链网络

第一步:绘制私有链网络

创建空图形,并加入一个中心节点,创建若干节点,并绘制节点与中心节点的边。

代码:

效果图:

  • 第二步:绘制联盟链网络

创建空图形,并在其中加入若干中心节点,将中心节点通过相互联结,为每个中心节点创建若干子节点。

代码:

效果图:

  • 第三步:绘制公有链网络

加入节点数量参数以及节点连接的复杂度

代码:

效果图:

 六. 实现p2p客户端和服务器通信

第一步:

定义p2p的客户端(p2p_client.py)和服务端(p2p_server.py),运行代码实现点对点通信

1.使用Flask-scoketio创建socket接口需要基于Flask依赖创建app变量,再通过Flask-scoketio基于app创建了my_scoketio变量,在代码最后也是通过这个变量启动程序。通过@my_socket.on()方法实现socket接口定义,然后终端中启动。

代码:

效果图:

第二步: 

2.首先通过socketio.Client()创建sio 变量,这一步 的sio 为创建客户端请求的主体,通过sio可实现客户端向服务端发送数据请求。再之后使用sio.connect(方法与建立客户端与服务端连接的通道,这里http://localhost:5000配置内容需要能够指向服务端,最后以循环的方式通过sio.emit0方法向服务端发送请求,其中“message" 配置了Socket 接口的要求项,‘hello, this is client’为向服务端发送的数据。最后,每次循环执行都将通过time.sleep(1)的方式休眠1秒。

代码:

效果图:

七.区块链节点通信

分别使用Flask-apcheduler中的配置文件形式以及装饰器形式实现定时器功能。

(1)配置文件形式

(2)定时器形式

八. Pow共识算法

定义Block对象以及pow算法函数。通过定义一个区块后调用pow算法,实现竞争记账权功能。

第一步:

创建models.py文件模块,在其中加入区块block的信息

第二步:

需要使用区块难度生成目标值,再通过目标值反复生成区块头的哈希值与其比较,最终得到符合条件的区块头,首先

创建区块难度difficult_bits

创建示例区块my_block

定义目标值Target的生成函数generate_target

定义Pow算法,具体为针对示例区块通过反复运算获取符合小于目标值的区块头。

输出结果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值