Hyperledger Fabric共识机制优化

2023-06-03 12:12汪健
电脑知识与技术 2023年10期
关键词:区块链

汪健

关键词: Hyperledger Fabric; 背书节点; 共识机制; 作恶节点; 区块链

中图分类号:TP393 文献标识码:A

文章编号:1009-3044(2023)10-0087-03

区块链技术起源于2008年中本聪发表的白皮书《一种点对点的电子现金系统》[1]。作为区块链技术的首个应用,比特币解决了传统的双花问题[2],在节点之间实现了无第三方监管下的资产交换。2013年,Vi?talik Buterin发布了以太坊黄皮书[3]。以太坊作为可编程的区块链平台,能够让开发者将业务逻辑编写成相应的智能合约[4]并部署到区块链网络上,执行更复杂的链上操作。

根据应用场景不同,区块链逐步发展成两种主要类型:公有链、联盟链。公有链一般采用Pow(Proof ofWork)、Pos(Proof of Stake)[5]等具备代币激励的共识机制[6],性能上普遍存在缺陷。技术人员为了提高区块链的执行效率,提出了联盟链[7]。然而,联盟链对背书节点高度信任,当面对交易结果不一致的情况会立即认定交易共识失败,若这类存在问题的节点过多,就会导致联盟链执行效率较低。

为解决现阶段联盟链存在的安全性问题,文章提出了一种基于背书节点行为的联盟链共识机制优化方案。在联盟链Hyperledger Fabric平台中引入背书节点行为监测模块,为背书节点添加能力值属性指标。能力值的大小取决于背书节点的背书行为,能反映背书节点背书行为的优劣,可作为辨别节点状态的依据。对成功达成交易共识的背书节点给予奖励,即提升能力值。对阻碍交易达成共识的节点给予惩罚,即扣除能力值。最终,存在安全隐患的背书节点的能力值会低于系统人员预先设定的阈值,被认定为作恶节点,失去参与背书的权利。这种方式规范联盟链中各背书节点的行为,提高交易成功达成共识的概率,有利于系统的正常运行。

1 相关技术

1.1 共识机制

区块链是一种去中心化的分布式账本[8],旨在解决多个对等节点在不可信环境下的信任问题[9]。共识机制是区块链技术的核心,是达成分布式一致性的关键。比特币和以太坊当前采用的是Pow机制,以算力为代价,竞选出有资格打包区块交易的节点,实现区块内数据的统一。

为了减少资源浪费的情况,后面又出现了Pos等新型共识算法。相较于Pow,Pos不需要算力竞争,系统将记账的权利交给权益最高的节点。这种方式能快速选出记账节点,提升区块链系统的吞吐量。2013 年,比特股项目提出了Dpos(Delegated Proof of Stake)机制[10],通过节点投票的方式选出N个记账节点,然后由这些领袖节点轮流执行记账行为。相较于Pos,影响力较小的节点有更大的机会通过投票来获取记账的奖励。

1.2 Hyperledger Fabric

Hyperledger Fabric 是开源的企业级许可分布式账本技术平台,其架构具有高度模块化和可插拔的特点[11]。如图1所示,系统中的节点扮演着不同的角色,承担不同的职能。客户端发起交易,背书节点依据提前部署的链码(即智能合约)模拟交易的执行,排序节点负责将从客户端发送过来的交易有序打包成区块,并广播出去。提交节点接收排序节点广播的区块,检查无误后执行上链操作,完成区块链的更新。

2 总体设计

2.1 架构设计

为及时发现作恶节点,本文的方案进行了如图2 所示的总体架构设计。方案在原共识机制的基础上增加了基于节点行为的行为监测模块。当客户端收到各背书节点传来的背书信息时,会将必要的相关信息发送给行为监测模块,该步骤是分析背书节点行为表现的前提。第三方模块将对背书行为进行分析,并对行为做出判定并反馈到对应节点的能力值的数值变化上,最终通过节点的能力值得知各节点的状态。

通过增加背书节点的行为监测模块,优化后的方案解决了以下问题:一方面,无论交易成功与否,背书节点的行为都会被记录下来。与原方案相比,失败交易的相关信息被记录了下来,为我们对节点状态进行分析提供评判依据。另一方面,直接通过节点能力值的大小便能得知节点状态的好坏,可及时对存在问题的背书节点进行检查和处理,避免了因难以排查作恶节点而导致的系统长时间处于故障状态。

2.2 行为监测模块设计

行为监测模块是在Hyperledger Fabric 架构的基础上添加的第三方服务,目的是及时发现存在作恶风险的背书节点,为联盟链系统的安全防护提供数据支持。该模块包含三个主要步骤,分别是记录背书行为、分析背书行为、更新节点能力值。下面将依次对这三个步骤进行介绍。

2.2.1 记录背书行为

背书节点每轮的交易执行情况是分析背书节点行为的基础,所以客户端需要将能反映节点行为的相关信息发给监测模块。各背书节点的公钥及对应的读写集就能直观地反映节点的背书行为,但考虑到读写集中的数据可能包含与实际业务相关的重要信息,直接将读写集内容暴露在区块链之外会导致隐私泄露。于是,本文将背书节点公钥pubKey和对应读写集的哈希值hashRwset保存在一个Map类型的集合变量behaviorMap 中,作为反映背书节点身份及背书行为的信息发送给节点监测模块。因为哈希函数具有防碰撞性,所以保证了内容相同的读写集经过哈希函数运算后得到的哈希值也一定相同。通过对比哈希值便可知道各背书节点的背书结果是否一致,使得链上数据的隐私性得以保证。

2.2.2 分析背书行为

接收到包含背书信息的Map变量后,要立刻对背书行为信息进行分析,判断本次背书服务中各节点背书行为的优劣。在共识机制改进前,同一笔交易的输入以及调用的链码是相同的,背书节点模拟交易执行后得到的读写集也是相同的。所以客户端通过比较各背书结果中的读写集是否一致来判断背书服务是否正常执行。由于联盟链中的背书节点通常由十分可靠的企业或机构运作,于是本文只考慮极少数背书节点成为作恶节点的情况,即设定作恶节点数量占总节点数比例不超过10%。所以,多数背书节点会给出相同读写集,behaviorMap的值集合中重复次数最多的hashRwset会被认定为合理的读写集。

首先,行为监测模块遍历包含背书节点行为信息的behaviorMap中的值集合,利用unique函数得到去掉重复的元素的数组,再通过classify 函数根据hashRwset的大小将节点公钥pubKey进行分组。当不存在作恶节点时,所有的hashRwset都相同,即只存在一个分组;当存在作恶节点时,behaviorMap的值集合中就会存在不相同的hashRwset,即键集合中的pub?Key会因hashRwset不同被分配到不同的数组。

然后,计算各数组的元素个数与背书节点总数的比值。比值最大的数组包含的pubKey信息代表本次交易中背书行为正常的背书节点,而其他分组内的pubKey信息所代表的背书节点则被认定为背书行为异常,存在作恶的可能。针对不同的背书行为表现,本文将通过调整节点能力值的大小来对相关的节点实施奖惩。

2.2.3 更新节点能力值

节点能力值的大小是评判节点状态的重要依据。对于读写集一致的交易,本文对所有参与的背书节点给予奖励;对于读写集不一致的交易,本文只惩罚给出异常结果的背书节点,对给出正常结果的节点不做任何处理。本文根据能力值的大小将背书节点分为诚实节点和作恶节点两种,作恶节点会被系统管理员及时清除。

judgeMap 是保存单次各节点背书表现情况的集合。当所有背书结果一致时,judgeMap 集合中包含所有参与背书的背书节点公钥。当背书结果不一致时,judgeMap 集合中只包含背书行为异常的背书节点公钥。奖惩函数通过遍历judgeMap,依照行为表现的好坏对相关节点的能力值进行更新并保存到反映节点状态的集合变量stateMap 中。最后,系统管理员便可通过检查stateMap 中节点对应的能力值,就能判断当前背书节点的状态,及时发现作恶节点。

3 实验验证与分析

3.1 实验基本设置

论文在64 位的Ubuntu 16.04 系统下,选择Hy?perledger Fabric V1.4版本,使用Java编程语言模拟部分共识流程,进行实验仿真测试。

为了验证优化方案是否能规范背书节点的行为并提高交易达成共识的概率,论文对优化前和优化后的联盟链进行了实验仿真。首先,在联盟链中配置50 个背书节点,并依照作恶节点个数将实验按表1所示分成三组。然后,规定交易提案的标准输出为1或0,即背书节点执行完链码返回的值只能是1或0。设定能力值初始值为5,上限为10,阈值为0。最后,每组实验需要分别在优化前、优化后进行100次模拟交易。

为了体现作恶节点对交易执行的随意性,利用内置函数取0~100的随机数,将其奇偶性的判断结果转换为1或0,并将其作为该节点的交易输出。同时,将诚实节点的交易输出保持一致,设定为1。

3.2 共识结果分析

三组实验的共识达成情况如图3所示,横坐标表示不同的组,纵坐标表示交易的轮数,其中柱状图的高度代表了100轮交易中交易达成共识的次数。第一组实验中设有一个作恶节点,优化前、后交易成功达成共识的次数分别为46、94,优化后的成功率高出48%。第二组实验中设有两个作恶节点,优化前、后交易成功达成共识的次数分别为31、89,优化后的成功率高出58%。第三组实验中设有三个作恶节点,优化前、后交易成功达成共识的次数分别为8、90,优化后的成功率高出82%。

通过实验结果数据可以看出,基于传统分布式一致性算法的联盟链无法有效地应对系统中存在作恶节点的场景,作恶节点个数的增多会大幅降低交易达成共识的概率。同时,优化后的联盟链能较好地应对存在作恶节点的场景,通过及时发现并清除作恶节点,提高了交易成功达成共识的概率。

3.3 节点能力值分析

优化后的联盟链保持较高共识成功率的原因是作恶节点因能力值过低被及时剥夺了交易背书的权利,后续交易的进行不再受到作恶节点的影响。如图4所示,论文选取了第二组实验中各类节点的能力值作为分析的依据。其中,横坐标表示交易的轮数,纵坐标表示节点的能力值大小。菱形坐标点连接的折线反映作恶节点1的能力值变化,方形坐标点连接的折线反映作恶节点2的能力值变化,三角形坐标点连接的折线反映诚实节点的能力值变化。从图6可以发现两个作恶节点分别在第10轮、第17轮交易后因能力值低于阈值0而被取消交易背书的资格。第17轮交易结束后,系统内只剩下48个表现良好的诚实节点,因此后续交易得以轻松地达成共识。

上述实验结果表明,优化后的联盟链能及时地通过与节点行为紧密相关的能力值属性展示背书节点表现的优劣,对背书节点的行为实现了良好的监控与约束效果,保证了后续交易的正常执行。

4 结束语

本文分析了联盟链在交易执行过程中的不足,结合传统公链的共识激励机制,提出了一种基于背书节点行为的联盟链共识机制优化方案。利用对能力值大小的动态调整对背书节点的背书行为进行实时监控,及时发现并处理系统中的作恶节点。但是,本文的方案僅适用于联盟链,因为严格的准入机制已经在一定程度上保证了背书节点信用问题。面对准入要求低的公链,可能出现大量的作恶节点,未来还需针对公链场景下的共识机制进行深入研究。

猜你喜欢
区块链
基于区块链技术的海上散装液体化学品运输安全监管方法
区块链技术的应用价值分析
“区块链”的苟且、诗和远方
用“区块链”助推中企走出去