APP下载

一种联盟区块链共识机制

2022-07-20全立新

宜宾学院学报 2022年6期
关键词:主链共识区块

全立新

(湖南财政经济学院信息技术与管理学院,湖南长沙 410205)

自2008 年比特币[1]诞生以来,区块链正在形成席卷互联网和传统经济界的一股浪潮. 目前区块链在重塑金融基础设施、金融服务、产品溯源、政务民生、电子存证、数字身份、供应链协同、物联网、教育等多个领域都有应用的开展和探索[2-3]. 从区块链的类型来看,可分公有链、私有链和联盟链三种类型[4],不同的类型应用场景和采用的共识机制也会不同. 以比特币、以太坊等成熟的公有链为例,这些系统的交易速率低、能耗高是它们的痛点,且这些系统需要使用加密货币,不好监管,不符合我国国情[5].而物流、物联网等这类交易频繁、要求交易手续低、系统运行要求低能耗的应用,目前还没有较好的公有链解决方案或者是遇到项目实践落地困难的瓶颈. 联盟链由联盟企业和注册会员组成,访问权限也仅限于联盟企业和注册的会员. 联盟链从理论层面上希望解决公有链的痛点问题,但是目前还没有行业标准和比较成熟的应用. 本文致力于实现高频交易、低廉手续费、低能耗的联盟链共识机制研究,以期为联盟链的创新发展提供借鉴.

1 相关工作

1.1 区块链技术

区块链技术是指通过去中心化的方式集体维护一个不可篡改的数据库的技术方案. 该技术方案主要让区块通过密码学方法相关联起来,每个区块包含了一定时间内的系统交易,并且生成数字签名以验证信息的有效性并链接到前一个区块形成一条主链.

区块链技术的核心是所有当前参与的节点共同维护交易及数据库,即共识机制. 共识机制使交易基于密码学原理而不是基于信任,使得任何达成一致的双方能够直接进行交易,不需第三方的参与.

从技术上来讲,交易是一种数据结构,反映一笔交易的价值流向. 区块是某段时间被认证的交易的集合,通过梅克尔树根对区块内交易进行加密,通过对上一个区块头签名形成关联,使系统中已经达成交易的区块连接在一起形成一条主链,所有参与计算的节点都记录了主链或主链的一部分.

1.2 联盟链的共识协议研究

共识协议作为区块链的核心技术,近年来得到学术界和产业界的广泛重视[6],已成为国内外区块链的研究热点之一[2,3,6,7].夏清等[6]提出将共识机制分为出块节点的选举和区块链共识两个阶段,并针对每个阶段对目前流行的协议进行分析比较、总结共识机制的发展现状和趋势,给出了未来的重要研究方向;刘懿中等[8]学者从系统模型、共识机制本质、激励设置和安全攻击等视度对现有共识机制进行分析,对于经典分布式共识的一致性算法给出具体流程和优缺点分析,对于区块链共识,根据应用场景的不同将共识机制其分为授权和非授权两类共识机制,指出共识机制在安全、扩容、启动、激励等层面的研究热点和发展方向;冷基栋等[9]检索WoS、中国知网等数字资源,梳理区块链共识机制及其分类方法,总结拜占庭问题、布鲁尔定理、拜占庭系统和拜占庭容错机制的内在联系,指出联盟链共识机制的容错能力、通信时延、转换效率等维度的改进共识机制是联盟链共识机制未来的研究方向.

在联盟区块链应用领域方面,文献[10]首次将经典拜占庭容错协议应用到纯异步联盟链中. 所有节点收到交易密文集合后,通过对一组位向量达成共识,当交易大小为250字节、节点数量为104个时,可以达到1 500 TPS 和时延小于6 min 的性能效果;文献[11]在联盟链系统中采用轮询机制加经典拜占庭容错算法对新区块达成共识,在网络弱同步且诚实节点至少达到2/3 票数的情况下可以满足安全性和活性. 本文将结合要求交易频率高、交易手续费低的行业应用的需求,提出一种无需挖矿、高吞吐量的共识机制,作为这类联盟区块链应用的技术参考.

2 联盟区块链通用架构的设计

2.1 基于联盟链的应用架构设计理论

从系统的角度来看,区块链本质上就是一个分布式系统. 布鲁尔定理[9]是分布式系统设计的重要理论之一,它将分布式系统的基本需求定义为一致性、可用性和分区容错性. 其中,一致性是指分布式系统中一个操作的结果在同一时刻各个节点上都是一致的;可用性是指在分布式系统中出现部分故障节点时,系统在有限时间内仍然具有处理请求的能力;分区容错性是指如果分布式系统允许数据分成不同的集群节点区域,其中一个区域出现故障,不会影响整个系统的运作[9].

本文在设计联盟链架构时,考虑到时分区容错是无法避免的,底层网络采用了P2P 网络,提高了节点间通信的鲁棒性和系统的可用性. 对于系统一致性需求,比如出现消息丢失或延迟的情况,系统一致性得不到满足,这正是本文要解决的问题之一.

2.2 联盟链的通用架构

联盟链的通用架构分为应用层、扩展层、网络层和存储层四层,如图1所示.

图1 联盟链通用架构

⑴应用层. 应用层类似电脑中的各种应用软件,是注册用户、联盟企业、各级行政管理部门、金融机构、工商税务等用户可以直接使用的软件产品.为了方便与集成相关组织、企业现有的管理信息系统,在应用层可以提供Web Services服务的接口[12].

⑵扩展层. 扩展层类似于电脑驱动程序,是为了让联盟区块链系统更加实用,主要包括交易、用户信用画像等类的智能合约;用户管理类组件,比如用户注册、钱包等功能;管理部门监管类组件;金融服务类组件;数据服务类组件等.

⑶网络层. 网络层类似于个人电脑的操作系统是整个联盟区块链核心,由一个联盟主席节点和若干个委员会节点组成. 主席节点负责仲裁,委员会节点负责交易认证和交易打包. 网络层负责实施共识机制;维护P2P网络节点和节点安全性.它仅仅提供各种API以供调用来实现联盟区块链项目的网络编程、分布式算法、密码学和数据存储功能等最核心的功能.

需要注意的是联盟链企业户要进行实名认证来证明身份. 这种认证包括工商执照、CA(Certificate Authority)机构颁发的数字证书等.只有通过联盟链认证的企业才有可能成为联盟链节点.

⑷存储层. 负责存储联盟链项目的区块链.所有节点和用户访问区块链数据都需要通过联盟链官方的CA 认证. 本文建议联盟链项目可以采用双链结构[13]. 一条是交易区块链用来存储交易相关的数据,另一条是信用画像区块链用来存储联盟企业和注册用户信用画像相关数据. 如果说存储交易区块链是项目的业务需要,它维护区块链的一致性和合法性,那么,存储信用画像区块链则是建立线上和线下信用生态圈的一项制度保障. 联盟链中所有企业和用户都是实名的,信用生态圈的建立有利于联盟链的健康发展和系统安全.

可以根据项目实际情况制定两类区块链的区块生成周期.它们的区块周期可以相同也可以不同.

3 基于联盟链的共识机制设计

共识机制是区块链技术的核心,从技术角度来看,共识机制要解决两个核心问题,即记账节点的选举和新区块如何达成共识. 本节将从出块节点的选举、区块随机数和主链共识三个方面阐述.

3.1 出块节点选举算法

联盟链上节点都是通过CA 认证才能加入的节点,所有节点的身份对全网来说是已知的,为了节约能源,没有必要通过算力竞争获得记账权. 下面给出一种出块节点的选举算法.

本文设想通过节点的算力大小、服务质量等特征值为参考值,通过全网投票产生N个委员会节点. 并约定只有委员会节点才能充当区块出块节点也称为当值节点,负责在某个时间间隔生成区块.当最新区块全网共识结束,新的出块节点选举开始,算法如图2所示.

图2 当值节点选举算法

由图2 知:算法以网络时间作为随机种子,首先按1+mod(rand(),N)的公式计算选择本次出块节点的编号,公式中N表示委员会节点数(注:所有委员会节点按注册先后次序从1编号到N),然后,判断新当值节点是否连续当值,如果连续当值就回到上一步,否则,选出了新的当值节点,本次选举结束.

采用这种函数生成随机数的选举方式,节省了选举时间和各节点算力,为缩短区块周期提高交易吞吐量提供了算法理论保障. 出块节点的选举除了选举效率外,选举结果的公平性也非常重要. 这里的公平性体现在各委员会节点在一段时间内当值次数基本相同和当值顺序节点间没有相关性. 下节将通过实验来证明选举算法的公平性.

3.2 区块头的随机数生成算法

区块头的随机数是节点验证最新区块的重要数据字段. 当所有委员会节点接收到新区块以后,通过用本地区块链数据检验随机数即可得出新区块是否按共识机制产生的区块,是另一种工作量证明.本文拟定的区块头核心部分结构为:区块头={上一个区块哈希,梅克尔根,随机数,出块节点,时间戳}.新区块的随机数由出块节点与最近N个区块进行N次哈希计算得到,N为委员会节点数.这样设计的目的是要用最近N个已取得共识的区块作为新区块的前向证明[14].具体算法流程如下:

⑴出块节点获得本地最近区块的高度H.

⑵根据H来确定哈希计算次数K. 如果H<N(即还没有生成N 个区块的情况),K=实际区块数,否则K=N.

⑶计算p=hash32(当值节点公钥),即计算随机数p的初始值.

⑷p=hash(block[head-i]+p),即依次把最近区块的区块头与p进行哈希迭代K次,i的初始为0.

⑸输出p,随机数生成完毕.

p是一个真正的随机数没有重复,不能提前生成可作为出块节点的“工作量证明”.

3.3 主链共识算法

主链共识是指出块节点产生的新区块如何取得全网认可. 通过3.2 节知,理论上出块节点生成的新区块一定是链接在最近的一个区块的,但是不排队委员会节点中拜占庭节点产生的区块链接到非最近区块,这样出现区块链分叉. 如何保证主链不分叉是主链共识的主要内容.

主链共识有弱共识和强共识两类[3]. 像比特币、以太坊采用弱共识,共识效率低,即交易确认需要的时间长,交易吐吞量小,区块链容易产生分叉,理论上不适合交易数量大和交易频繁的应用. 联盟区块链具有出块节点固定且节点规模不大的特点,故本文采用强共识来克服弱共识的不足,采用“全有全无”的共识原则.

在主链共识开始时,联盟主席节点需要确认所有的委员会节点在线,如果有节点不在线将采取“熔断”机制,系统停止交易打包进区块. 这里牺牲可用性来保证安全性. 联盟会调查节点不在线原因,将按照联盟章程处理. 下面给出一种改进的PBFT 强共识算法,共识过程分归约阶段和认可阶段,算法如图3所示.

(I)归约阶段:是在所有委员会节点对各自本地区块链的高度和最近区块达成一致共识的过程.

为了提高归约效率,考虑到主链上区块将会有很多,系统固定周期向区块链中插入检查点,每次区块高度归约都是从最近检查点开始,如果主链上还没有检查点,则从创世区块开始.由图3知:

图3 改进的PBFT算法

⑴当值节点以最后一个检查点为标准,计算本地最近区块的高度H.

⑵当值节点发起H提议投票并广播所有委员会节点.

⑶如果某节点的本地最近区块高度与提议的H不同,则投反对票并广播.

⑷当值节点如果收到反对票,请联盟主席节点仲裁. 联盟主席节点以半数以上节点的H 为仲裁结果,凡是不是这个H值的节点同步本地区块链,然后重新第1步.

⑸当值节点广播本地最近的区块哈希,发起最近区块投票.

⑹其他节点哈希各自本地最近区块并与提议区块的哈希对比,如果不同投反对票并广播.

⑺当值节点如果收到反对票,请联盟主席节点仲裁. 联盟主席节点以半数以上节点的最近区块为最近区块仲裁结果,凡是最近区块不是仲裁区块的节点同步本地区块链,然后重新第1步.

⑻联盟主席节点监测到两次投票没有反对票,通过各节点准备进行认可阶段,归约阶段结束.

(II)认可阶段:是对最新区块二进制认可. 由图3知:

⑴只有当值节点收到本次归约结束通知后,开始广播最新区块给其他委员会节点.

⑵各委员会节点利用本地主链数据验证当值节点发来的随机数,如果与本地计算结果不同,则投反对票并广播结果.

⑶各委员会节点检查收到的最新区块梅克尔根、出块节点公钥、时间戳等区块头字段是否正确,只要有其中一项不正确将投反对票且说明原因并广播.

⑷如果各节点统计发现没有反对票,则把收到的最新区块存储到本地区块链中.

⑸如果各节点统计发现有反对票,则存储一个空区块(只有区块头没有区块体的区块)存储到本地区块链中.本次主链共识结束.

如果本次共识不成功,联盟主席节点将启动问责制,将审计认可阶段不成功原因. 如果被系统认定为拜占庭节点将强行取消该节点为委员会节点的角色(注:创世区块在系统中正式启动后由系统自动产生,不需要共识. 新加入的委员会节点在初始化时会自动拷贝创世区块).

4 实验与分析

4.1 共识机制安全性分析

区块链共识协议的安全性一般围绕持久性和活性进行[3]. 从持久性和活性两方面对本文提出的共识协议进行安全性分析.

⑴持久性. 根据3.3 节主链共识算法知,主链在取得强共识之前需要进行归约处理,使得每个委员会节点所存储的区块链高度一致,即某区块在节点本地区块链中拥有H个区块的高度,该区块在其他节点的本地区块链中也拥有H个区块的高度. 由于网络传播延时的原因可能造成各个委员会节点区块高度暂时不一致,但通过多个多轮归约后,最近区块在各个委员会节点的主链上已会保持相同,说明通过主链共识算法可以保证区块链数据的一致性.

⑵活性. 活性指非拜占庭节点发起的交易最终被打包进区块链中并满足持久性[3]. 现在的共识机制不一定都会满足活性要求,比如,比特币网络因交易吞吐量和交易手续费等原因,也造成很多交易被积压. 这些被积压的交易有一部分是因吞吐量造成的,但是还有一部分是因为矿工认为交易手续费出价低的原因造成的. 矿工更愿意先打包手续费出价高的交易,这样就有可能造成有些交易“活锁”,永远不能打包进区块进行交易确认,即没有满足活性的要求.

在本文的共识机制中没有“挖矿”环节,即委员会节点不需要消耗大量算力获得记账权,各节点没有很大利益竞争关系,故设定交易确认顺序的规则是“先提交先确认”.本文共识机制的具体做法是:用户提交某委员会节点上的交易通过验证后进入本地交易缓冲池,该节点当值在生成新区块时按“先进先出”原则打包缓冲池交易. 系统可以平衡各节点缓冲池交易的数量,同时,当某节点被取消委员会节点资格之前,系统自动转发该节点缓冲池的交易给其他委员会节点. 通过这样的规则约束就可以保证所有满足要求的交易最终都会打包进区块得到确认.也就是说明了本文共识机制是满足活性的要求.

从网络安全来看,出块节点是通过随机函数产生,网络不可能出现“双花”攻击;各节点都必须通过CA 认证才能进网,不可能出现“女巫”攻击;各委员会节点在一段时间内当值次数大致相同,理论上讲不会出现“自私挖矿”和“长程”攻击的可能.

综上所述,本文提出的共识机制是安全的.

4.2 出块节点选举的公平性

出块节点选举的公平性主要包括两方面:一是所有委员会节点在一段时间内当值的次数大致相同,最大当值次数误差率在工程上可以容忍;二是各节点当值顺序无函数相关性. 对于第二方面,每次选举时都用网络时间作为随机种子,故选举的节点编号大概率无函数相关性.下面验证第一方面.

3.1 节出块节点选举算法用C 语言编写进行模拟实验. 图4 是节点数为100 个,选举10 000 次,各个节点当选次数的统计图. 图中横坐标为节点编号,纵坐标为当选次数. 由图4 知,所有节点当选次数的散点的趋势线近似为y=100. 最大次数误差为6 次,最大误差率为6%,这个误差在工程上可以容忍.从R2来看,各节点当选次数互不相关,近似等概率事件. 受篇幅限制,另有三种情况的当选次数统计图没有罗列,其相关数据统计结果见表1.

图4 各节点当选次数的统计图

表1 四种情况节点选举相关数据统计表

由表1 知,各个节点间的当选次数互不相关,最大误差率在工程上可以容忍,各节点当选次数近似为等概率事件,即一段时间内所有节点当选次数大致相当.另外,最大当选误差次数与节点总数无关.

4.3 性能测试

在性能方面,采用Node.js (v5.4.0)平台[15],引入Express 框架;操作系统是Ubuntu (v0.29.0);本机处理器是Intel(R) Core(TM) i7-9750H CPU @2.60 GHz,内存32 GB;模拟网络规模为10 个节点;一个区块中只包含16个交易;每个交易固定为240字节;区块周期为1分钟,对320个交易打包生成区块和主链共识进行测试.

实验结果表明,在没有出现故障节点的情况下,当区块周期为1分钟、网络规模10个委员会节点时,通过20 次出块节点的选举和主链共识,平均消耗时间34.8 s. 说明本文的共设机制可以在1 分钟完成区块共识. 当然,这个测试数据只是在虚拟环境下比较理想状态下的结果,肯定与真实环境可能还有一点差异.

5 结语

本文提出的基于联盟区块链的共识机制在一定程序可以满足当前我国区块链应用的需要. 从系统架构来看,它是一个可监管、可控制且数据掌握在联盟委员会节点之中,这样的系统践行了国家信息化建设指导纲领文件精神;从共识过程来看,没有“挖矿”过程,可以不发行加密货币进行系统运行. 加密货币在区域链系统中起到重要的价值替代作用,但是,“空气币”成为新的网络诈骗新型手段,让部分用户质疑了区块链应用. 共识机制可以回避这个质疑. 从共识机制的安全性来看,通过实验与分析知,共识机制满足安全性要求,可以防止诸如“双花”“女巫”“自私挖矿”和“长程”等多种网络攻击;从共识效率来看,出块节点的函数式选举是公平的,选举过程很快,实验数据说明主链共识也比较快,这样整体上可以降低系统运行能耗,在理论上为网络交易低手续费打下坚实基础.

由于实际系统的复杂性,理论上的描述和有限的实验模拟与实际会有一定距离,会遇到诸如管理部门与社会的认可、配合以及交易峰值速率等问题和挑战,需要对区块链技术不断完善. 基于联盟区块链共识机制的项目落地实践是以后研究方向.

猜你喜欢

主链共识区块
共识 共进 共情 共学:让“沟通之花”绽放
区块链:一个改变未来的幽灵
论思想共识凝聚的文化向度
区块链:主要角色和衍生应用
商量出共识
WDC主链正式启动创世区块已诞生
区块链+媒体业的N种可能
读懂区块链
有机化合物命名易错题直击
“烷烃”的五字命名方针