APP下载

网络共识区块链模型构建与实现

2022-03-15刘敏娜

电子设计工程 2022年5期
关键词:哈希记账共识

刘敏娜,尹 成,张 伟

(1.咸阳师范学院,陕西 咸阳 712000;2.微软-清华大学联合实验室,北京 100000)

互联网上浏览网页使用的是WWW 服务协议。WWW 协议普遍应用基于B/S 架构的网络模型。在B/S 服务架构中,服务器作为中心节点,为网络中的其他节点提供数据访问服务,浏览器请求数据服务[1]。B/S 架构建立在对中心服务器绝对信任的前提下,一旦失去信任,信息交换不再成立。同时,B/S 架构还存在对中心服务器依赖过大、服务器数据容易被窃取、数据无法追溯到原始状态等问题[2]。

区块链采用点对点(P2P)的去中心化的分布式存储结构。区块链的创造者中本聪提出“区块链中,节点按照既定的运算规则来计算哈希值,由获胜节点主张上链数据,其他节点对上链数据进行投票,同时将激励机制应用到共识上[3]”。区块链上没有中心节点,节点之间不需要建立信任,通过共识达成规则,从而达成信任。引入区块链技术,可以有效地解决B/S 架构中对服务器的依赖而产生的数据安全性问题。

文中提出在互联网的分布式环境中,基于区块链技术实现多个节点共识挖矿,存储交易数据的方案。方案根据交易数据的特点,设计了区块数据结构,利用区块链的哈希算法对交易数据进行加密,利用共识算法解决记账权的问题,利用最长链比较算法设计节点数据同步规则。

1 相关知识

1.1 B/S架构

B/S 是WWW 协议最主要的一种网络结构模型。B 代表Browser 浏览器,S 表示Server 服务器[4]。系统功能的核心部分集中在服务器端,用户通过浏览器访问互联网上的信息,服务器解析并处理用户请求。当需要提供数据访问服务时,服务器获取数据库服务器中的数据,并将数据经过动态拼凑后显示在客户端浏览器中,这种架构简化了系统的开发、维护和使用[5]。B/S 架构如图1 所示。

图1 B/S架构

B/S 架构存在以下问题:

1)对中心服务器依赖过大,一旦出现网络问题导致拥塞,无法继续为客户端提供服务[3];

2)如果中心服务器遭遇恶意攻击,则服务器数据容易被窃取;

3)服务器中存储的数据没有状态,一旦数据被修改,则无法追溯到原始状态。

1.2 区块链技术

区块链(Block Chain)是比特币应用的底层技术,使用区块链技术能独立完成价值转移,包括数字货币、交易、资产等转移,而且整个过程不依赖于中心机构[6]。

区块链具有如下特点:

1)系统中不存在自上而下的中心化管理,分布式节点之间通过竞争博弈的方式实现自组织和自适应;

2)采用基于共识的数据更新机制。新生成的区块必须获得大多数节点验证通过之后,才可以写入节点的共享账本中,因此数据难篡改和伪造[7]。

1.2.1 区块链的核心概念

1)区块

区块是区块链的基本元素,比特币中区块以文件形式存储,以太坊中以数据库形式存储[8]。区块由区块头和区块体组成。区块头中封装了前一个区块的哈希值、当前区块共识的解随机数、时间戳等信息[9]。区块体中包括当前区块的交易数量以及经过验证的区块创建过程中生成的所有交易记录。

2)节点

网络中所有交易数据都记录在节点服务器里[10]。节点分为轻节点和全节点。全节点拥有全网的区块链结构,其中包括所有的交易数据,轻节点只拥有和自己相关的交易数据。

3)共识机制

区块链中没有中心化节点,因此在交易数据传输、价值转移时,通过共识机制解决交易在所有记账节点上的一致性和正确性问题[11]。共识机制是区块链的核心组成部分,是保障区块链系统能长久运行的关键机制。共识算法有工作量证明POW、权益证明POS、委托权益证明DPOS。

工作量证明POW 算法要求证明方在使用服务或资源之前完成一定难度的复杂运算,且这种工作量很容易被验证方核实。权益证明POS 是具有最高权益的节点最有可能获得记账权,其权益体现为节点对特定数量货币的所有权。委托权益证明DPOS 是通过共识节点的权益投票将记账权赋予特定的节点,从而实现公平和民主的共识过程和区块链治理。

区块链共识算法使用最多的是POW。文中使用POW 共识算法,以便使最快计算出符合要求的随机数的节点具有记账权。

1.2.2 点对点模式

点对点模式中每个节点的地位是对等的。网络中的节点可以自由地加入和退出,网络中所有节点都具有存储和转发功能,可以提高通信效率[13];单个节点的故障不会影响整体系统,可以提高网络的健壮性;同时网络的扩展性强,有利于网络负载均衡[14]。

1.2.3 区块链运行流程

1)源节点创建交易,验证目的节点地址,对交易签名加密,将交易广播至网络上的其他节点。

2)网络上节点接收交易,判断交易数据来源是否正确。全网大多数节点验证通过之后,节点将交易信息保存在交易池中。

3)节点争夺记账权,拥有记账权的节点将交易数据打包到本地区块中。全网共识验证之后,获胜节点将新区块追加到主链。

4)交易在主链上被后续区块确认。

5)不同节点之间根据最长链原则,定期同步区块链数据。

方案是基于该区块链运行流程设计的,方案中包括新节点加入、新交易创建、新区块生成、区块上链、节点间同步数据等环节。

2 网络共识区块链模型

2.1 方案架构

为了简化模型,网络中包括3 个具备独立记账能力的全节点,如图2 所示。全节点上保存不同长度的区块链,节点同步时选择区块链长度值最大的区块进行拷贝操作。目前网络中节点2 的区块链高度值最大,因此节点1 和3 将区块链2 的数据拷贝,更新自身区块链。

图2 多节点区块链模型

2.2 方案核心要素

2.2.1 区块数据结构

区块中包括索引、时间戳、交易记录、工作量证明、前一块哈希值等属性[15]。区块结构如图3 所示。索引是在当前区块链高度基础上增加1,也可用来表示区块链的高度。时间戳得到的是区块数据写入的时间,交易记录中保存的是交易池中按照优先级别排序的交易列表。工作量证明用来设置争夺记账权的计算难度。前一区块的哈希值用来将当前区块与前一区块相连。

图3 区块结构

2.2.2 共识算法

将当前区块的难度值(可变的数值,从1 开始取值)和前一个区块的难度值相乘,取得二进制编码,将二进制值进行哈希运算。当哈希运算结果中后四位取值为“0000”时,认为解题成功,取得记账权。网络中其他节点收到解题的结果之后,进行工作量校验,检查节点是否具有记账权。

3 方案实现

方案包括交易数据上链和节点数据同步。交易数据上链由发起交易的节点创建新的交易,将交易存在交易池中,等待具有记账权的节点将交易打包至区块链;数据同步需要获取全网中所有节点的区块链高度,计算最大高度,使用高度最大的区块链数据同步其他节点区块链。

3.1 交易数据上链

交易数据上链产生新交易,将交易打包到区块。

1)抓取网络传输的交易,验证信息中是否包含“sender”,“recipient”和“amount”,如果不包含,则提示数据不完整,返回400 错误。

2)读取网络上的交易发送方、接收方和金额数据,创建新交易。

3)对交易数据进行哈希运算,随后写入区块中。交易数据添加之后清空交易列表。

区块表示如下。

4)将交易添加成功的信息写在网络响应response 对象上,并返回给客户端。

3.2 节点间区块链同步

1)遍历网络中的所有节点self.nodes;

2)获取当前的区块链长度len(self.chain);

3)依次访问网络中的所有节点,取出节点的区块链长度,判断区块链长度是否小于当前节点的长度,为真则更新区块链。

代码如下:

4 仿真结果及分析

方案在Windows 环境实施,采用Python 语言编写仿真实验程序,使用flask 框架搭建Web 模型,模拟3 个节点的共识操作。实验中因为有post 请求,因此需要传递一定的参数,使用Postman 进行Web API&HTTP 请求调试[16]。实验分别模拟新节点入网、新交易创建、交易保存至区块、区块上链及节点数据同步等操作。

实验中部署了3 个区块链节点,端口号分别为5000、5002 和5004。这3 个节点都参与记账权争夺操作。表1 为这3 个节点在60 min 内的在线情况。

表1 节点的可用性测试

4.1 新节点入网测试

在Postman 中创建post 请求,请求url 为http://127.0.0.1:5000/new_node,在body 中输入参数{"nodes":["http://127.0.0.1:5002"]},返回提示信息:

网络节点添加成功。

4.2 新交易生成测试

创建post 请求,请求url 为http://127.0.0.1:5002/new_trainsactions,在body 中输入参数:

返回提示信息:

目前节点2 上已经生成了5 个区块,新产生的交易放入交易池,并随着第6 个区块的生成而被写入其中。

4.3 节点同步测试

Pycharm中启动flask服务器,运行http://127.0.0.1:5000/mine 进行记账权争夺。运行一段时间之后,网络上3 个节点拥有的区块链情况如表2 所示。目前节点2 上的区块链高度最大,拥有6 个区块。

表2 网络节点区块及交易情况

当发送http://127.0.0.1:5000/node_refresh 请求时,网络上的3 个节点进行数据同步,3 个节点的区块链数据完全一致,如表3 所示。

表3 同步操作之后网络节点区块及交易情况

5 结束语

为了解决B/S 架构中对中心服务器过于依赖的问题,文中设计了一种真实网络环境下的共识区块链方案。方案利用flask 框架模拟了3 个网络节点,包括新节点加入网络、交易的生成和加密、新区块生成、共识算法验证、节点数据同步。在节点数据同步中根据最长区块链来更新网络节点数据。

实验仿真表明,方案能实现交易数据上链,实现多个节点数据同步。因为基于区块链技术,所以交易数据不可篡改、不可否认。产生的交易放入交易池,随着第6 个区块的生成而被写入其中。

猜你喜欢

哈希记账共识
财务自由第1步,从记账开始
共识 共进 共情 共学:让“沟通之花”绽放
哈希值处理 功能全面更易用
Windows哈希值处理不犯难
记账类APP
文件哈希值处理一条龙
商量出共识
记账理财的好处有哪些
让手机帮你记账吧!
巧用哈希数值传递文件