APP下载

区块链中基于中国剩余定理投票方案的共识机制

2023-02-24唐淑敏

计算机应用 2023年2期
关键词:记账矿工竞选

唐淑敏,金 瑜

(武汉科技大学 计算机科学与技术学院,武汉 430065)

0 引言

2008 年,一位匿名为“中本聪”的学者在论坛上以《比特币:一种P2P 电子现金支付系统》的文章掀起了数字货币的狂风浪潮[1]。区块链作为其核心技术也受到了各界人士的广泛关注。区块链本质上是一个分布式的账本数据库[2],通过时间戳、数字签名、共识机制、激励机制以及智能合约等技术实现去中心化。传统的账本系统需要一个记账中心,而在区块链系统中节点可以在相互不信任的分布式环境中,实现点对点的交易与协作[3]。区块链的去中心化、安全性、不可篡改等特性使它在金融[4]、隐私保护[5]、物联网[6]、医疗健康[7]等领域都有着广泛的应用。

在保证分布式的区块链系统去中心化的同时,满足各节点能在数据记录的真实性与准确性方面达成一致,就需要共识机制来调度完成。共识问题由来已久[8],在“中本聪”提出区块链之前,就有针对“拜占庭将军问题”而提出的一系列经典式共识机制,例如Paxos[9]、实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)算法[10]等。区块链被提出之后,在经典式共识机制[11]和基于工作量证明的共识机制(Proof of Work,PoW)的基础上又提出许多新算法,包括后来提出的基于权益证明的共识机制(Proof of Stack,PoS)等[12]。

在区块链共识机制中,“矿工”只有通过挖矿获取某区块记账的权力,才能获得在该区块中产生的交易费奖励与挖矿奖励。但是无论是基于工作量证明还是权益证明都存在一些问题,例如工作量证明的算力资源浪费、权益证明的权益积累攻击等。黄建华等[13]提出的基于动态授权的信任度证明机制(Proof of Trust,PoT)中,结合了PoW 与PoS 的特性,旨在以基于信任度的方式搭建一个安全、低资源消耗且去中心化的区块链系统,有效解决了PoW 与PoS 等共识机制存在的不足,但同时也造成了记账权“垄断化”[14]问题,且共识时延由于需要遍历所有竞争节点的交易记录,会随着竞争成为权益节点(Stackholder)数量的增多而增长较快。

本文基于文献[13]提出的PoT 的基础上提出了一个基于中国剩余定理(Chinese Remainder Theorem,CRT)的权益节点选举共识机制——CRT-PoT(Chinese Remainder Theorem-Proof of Trust)。每个参与节点在共识之初进行选择,决定成为投票节点(Voter)或者竞选节点(Candidate),并只能二者选其一。一般起始拥有更多资源的节点更有可能成为Candidate,而小节点只能选择成为Voter。因此又在投票模型的基础上提出多投机制,在确保每个Candidate 节点能够公平竞争的同时,保证Voter 节点能获得更多的机会,以更大概率争取之后的区块记账权,以此良性激发Voter 节点与Candidate 节点之间的参与积极性与诚信竞争,记账权不会总局限于一部分节点,由此解决记账权PoT 中的记账权垄断问题。其次在本文方案中,不需要遍历所有交易记录,共识时延只与节点数有关,因此共识时延呈线性增长,相比起PoT,共识时延增长较慢。

1 相关工作

基于工作量证明的共识机制通过循环计算SHA-256 寻找一个随机数,使得该随机数让目标哈希值前部分出现足够数量的0,然后将该区块广播至系统中接受其他节点的验证,若该区块合法,矿工就能成为出块者,获得对该区块的记账权。矿工之间竞争激烈,造成大量算力资源浪费。为了能够更快地找到随机数,矿工们相互合作,集中算力资源,形成矿池矿场,形成中心化的同时也造成了“公地悲剧”问题。所谓的“公地悲剧”是在区块链系统中,矿工的收益主要来自交易费奖励与挖矿奖励。而挖矿的难度与日俱增,矿工的收益大多依靠交易费奖励。用户们为了支付少的手续费,尽可能进行小的交易,矿工获得的交易费变少。长此以往,矿工流失,算力下降,敌手发动攻击的成本减少,区块链系统的安全性下降,形成“公地悲剧”。

King 等[12]提出点点币(PPCoin),用权益证明的方式取代工作量证明。同时提出“币龄”的概念,节点只要手持有币,持币时间越长,币龄越大。节点通过押注机制抵押一定的代币成为验证节点,之后以消耗币龄的方式挖矿。虽然这种方式有效解决了PoW 算力浪费和如今区块链矿工因难以获得挖矿奖励而带来的“公地悲剧”问题,但它也存在新问题。节点通过离线方式就能积累币龄,难以保证节点在线比例。持币多的节点,币龄积累越快,就越容易成为矿工,敌手以此发动权益积累攻击,严重影响系统安全;持币少的节点因为挖矿的代价小,试图在区块链上分叉挖矿[15]获取更多的利益,导致区块链分叉众多,影响其稳定性。

2014 年Bentov 等[16]提出基于行动量的共识机制,结合了PoW 和PoS 的特性。矿工挖出区块头,区块的记账权交由随之衍生出的N个参与者。挖矿与记账权分开,有效解决“公地悲剧”和分叉攻击,但是难以保证参与节点的在线率,导致挖到的区块头由于未及时验证而被丢弃。2014 年Larimer 等[17]在PoS 的基础上提出权益委托证明(Delegated Proof of Stake,DPoS),权益持有人自行决定委托人,以权益比重选出101 位委托人组成委员会,各委托人依次轮流出块和记账。委托人受到其他节点的监督,大部分时间必须保证在线,极大地提升了出块的速率;但是同样委员会的出现也造成了严重的中心化,委托人可能为了利益而和权益持有人共谋。为保证公平以及记账者的随机性,2019 年王缵等[14]提出基于门限密码方案的共识机制,以盲猜竞价的方式来争取记账权,但是该机制保证金的管理和门限密钥的分发都依赖一个可信中心,不能保证去中心化。

PoT 机制根据权益节点参与创建区块的行为赋予其信任度,权益节点通过赋予区块信任来进行挖矿,信任越高,挖矿成功的概率越大,同时设置信任衰减机制保证节点的在线率。以信任的机制在一定程度上解决了以上算法存在的问题,但是通过引入跟随币机制(Follw The Satoshi,FTS)选出Stackholders 的方法又引起了新的问题:参与节点们持有的未花费的satoshi 币越多,被选中的机会就越大,普通节点仍然难有机会,随着系统的运行,容易造成记账权“垄断化”,从而导致小节点的流失。对于一个区块链系统来说,共同维护系统的节点越多,系统就越安全。记账权“垄断化”造成普通节点的流失,权益节点暴露的可能性大大增加,敌手可以付出更少的代价来攻击权益节点操纵出块和记账,因此保证节点间的公平竞争以激励普通节点的参与。解决“垄断化”问题后会吸引更多普通节点来竞争成为权益节点,竞选节点需要将自己所有未花费的satoshi 币的交易记录按字典的顺序进行排序,跟随币机制中需要遍历更多的节点交易记录来生成权益节点,其权益节点选出的时延增长得也会越来越快。

为此,本文在PoT 的基础上,改进Stackholder 节点的选出机制来解决PoT 存在的记账权“垄断化”以及参与竞选节点数量增多带来的耗时问题。

2 权益节点投票模型

本章主要介绍权益节点选出的过程,首先基于中国剩余定理的秘密分享算法[18]提出投票模型,简称CRT-Election,并从模型的基本思想、具体实现进行详细描述[19-20],其次在此模型上提出多投机制,并分析其设定的必要性,最后提出本模型基于诚实记录的竞争机制。

2.1 CRT-Election模型基本思想

中国剩余定理的秘密分享算法是将秘密分为N份子秘密,将子秘密交由N个参与者管理,其中有任意T份子秘密就能还原出本来的结果。由此,本文提出(n,t)门限的权益节点选举模型,其中n为参与共识节点总数量,t为竞选节点需获得的支持数。如图1 所示,该模型包括了初始化、竞选阶段、投票阶段和验证阶段4 个阶段,基本思想如下:

1)初始化(Initialization)。节点参与共识的方式有两种:报名成为竞选节点或是参与对竞选节点的投票。参与共识后,参与节点(Participant)(图1 中Pi)随机获得一对公私钥(SK,PK)作为参与券。

2)竞选阶段(Campaign stage)。Participant 节点报名成为竞选节点(Candidate)(图1 中Ci)之后,系统会将该Candidate节点的历史诚实信息(包括历史投票信息和曾作为某一周期的权益代表成功出块的信息)、公钥地址(info,Addr)组成信息M(图1 中Mi),在系统中进行广播。

3)投票阶段(Voting stage)。投票节点(Voter)(图1 中Vi)在此阶段可以根据广播的消息,查看该Candidate 的信息M,以此决定是否对它进行投票。若支持,则以投票公钥PK对M进行签名,随之生成一个部分签名partSig 并广播。系统中任意参与节点都能作为签名合成者合成最终签名。若M收到的partSigs 不少于门限t,则能合成最终的签名Sig,更新M的内容并广播,否则将该M丢弃。若合法,则该M对应的Candidate 节点成为权益节点,否则将该M丢弃。

4)验证阶段(Verification stage)。所有节点在参与或离开系统时,系统会广播新的投票组公钥Cpk,任意参与节点都可以作为签名验证者,利用组公钥验证广播的M及其签名是否合法,验证合法即为权益节点(Stackholder)(图1中的Si)。

图1 CRT-Election模型示意图Fig.1 Schematic diagram of CRT-Election model

2.2 模型具体实现

2.2.1 初始化

1)设置系统参数。

在每一周期的起始,若有n个节点参与共识,t为门限,系统随机生成一系列基础数据Primes{p,q,g,Dn,D},随后将Primes的内容广播。其中,Primes中数据的位数K由系统规定,p、q为两个大素数,且满足p|(q-1),p用于投票公私钥的生成,q用于生成组公钥。Dn由n个互素且严格单调递增的素 数(d1,d2,…,dn) 组成,且满足(di,p)=1|i=1,2,…,n,g为q有限域中的一个生成原,。

2)参与节点投票公私钥的生成。

参与节点Vi收到广播的Primes后,在q的有限域中随机获取一个数作为自己的投票私钥∈(0,[p/n])。投票公钥为:

节点Vi将自己的投票公钥进行公布,若其他节点发现新的投票公钥出现,则更新投票组公钥为:

系统每周期初始化完成后,当在竞选阶段或投票阶段有节点Vi+1加入时,生成一个新的符合条件的di+1,并更新Primes。此节点的投票公钥为,产生私钥后更新投票组公私钥为:

将该节点的公钥广播,由此从竞选阶段之后继续。若节点Vi+1离开时,同理进行除法,更新投票组公私钥后删除di+1并更新Primes。

算法1 Initialization。

输入(K,n,t);

输出(Primes,node)。

2.2.2 竞选阶段

报名竞选的节点Ci在报名成功后,会生成一个(info,Addr)的信息包,同时在该信息包附上(Sig,U)的相关信息,Sig 为签名,U 为给该信息包签过名的节点投票公钥积,两者的初始化值均为0,Ci将该信息包序列化后广播。

算法2 Campaign stage。

输入 Candidatenode;

输出M。

2.2.3 投票阶段

1)子秘密的分割。

在节点Vi随机生成投票私钥的同时随机生成一个用于分享的子秘密,在[0,(D/p-1)/n]区间随机生成一个素数。为保证秘密的安全性,将其变式为:

随之将其分割为n份子秘密份额,分别发送给其他对应节点,分割如下:

sonShareij的意义是节点Vi关于dj的子秘密份额发送给Vj。

2)投票签名。

节点Vj在收到来自其他节点或自己的n份sonShareji(j=1,2,…,n)后计算:

3)签名合成。

合成签名后更新并广播。

算法3 Voting stage。

2.2.4 验证阶段

任意参与节点通过投票公钥Cpk,以及U 可验证签名结果的合法性,验证公式为:

若验证合法,则中的竞选节点Ci成功当选为权益节点。

算法4 Verification stage。

输入M_list;

输出 Stackholders。

2.3 多投机制

针对CRT-Election 投票模型,设计一个多投机制,做出以下几个设定:

设定1 若系统总共有n个参与节点,n-s个竞选节点,s个投票节点,设定每个投票节点至多能够投m票。

设定2 每个投票节点对每个竞选节点至多只能投1 票。

酒过数巡,说到秦铁崖的神勇无敌,酒到七成的秦铁崖道:“秦某身经百战,至今未落败,奥秘何在?说出来诸位或许不信,奥秘就是,不怕受伤,不怕死!”

2.3.1 设定1分析

若系统原来选出权益节点是n-s个竞选节点竞争s枚票数,假设在投票节点给竞选节点投票的概率相同的理想情况下,那么选出第i个权益节点的概率为:

其中:Pv是投票节点给竞选节点投票的概率,sum(i-1)为前i-1 个权益节点获得的总票数。由式(12)可知,当i越大,后面权益节点选出的概率越小。在Pv不相同时,也不影响最终选出概率的趋势变化。权益节点未能选出会影响后续区块的生成和交易记账。

若每个投票节点能够投m票,相当于每个竞选节点竞争s枚票数,此时选出第i个权益节点的概率为:

由式(13)可以看出,随着i的变化,的概率保持稳定。同时对于投票节点来说,若支持的竞选节点能够成功出块,让区块上链,则其也会有更多的诚实行为记录。多投机制让它支持的成功率从1/(n-s)上升至m/(n-s),由此激励投票节点的投票积极性。

2.3.2 设定2分析

假若投票节点可以将自己的全部选票都投给一个竞选节点,很明显当竞选节点通过贿赂部分投票节点,或者参与节点之间合谋时,很容易操纵投票过程,因此设定投票节点只能对不同的节点进行投票,避免敌手以此恶意竞选是必要的。

2.4 竞争机制

与原来依靠资源竞争出块和记账不同,在本投票模型中,节点们通过自身的诚实记录数提升竞争力。在共识的每一周期,根据上一周期节点的记录数竞争本轮的出块记账权,其具体设定如下:

2)对于投票节点:其诚实的记录在于周期内有效投票的记录数量,有效投票即所支持的竞选节点成为记账节点后有成功出块记录。

在本轮竞争过程中,节点们其最终计算方式为:竞争/投票节点上轮有效记录数×竞争/投票计算权重,以权重来调节当前系统的资源差异化,避免垄断。

3 CRT⁃PoT共识机制

在CRT-PoT 的共识机制中,按时间分为一系列周期T,每一周期包括权益节点的选出,区块生成以及区块上链。具体的过程如下。

3.1 权益节点的选出

在n个节点参与共识下,通过投票系统选出m个权益节点需要分两种情况:

1)启动时期。

当该机制刚刚开始,周期处在起始周期0。在各节点的历史记录都为零的情况下,为了获得更多的奖励费,众节点比起成为投票节点更愿意成为竞选节点,导致竞选节点可能难以获得超过门限t的签名数,从而难以有竞选节点产生,最终导致系统启动失败。为此,在启动阶段,引入PoW 机制的算力证明,节点通过算力挖一个简单难度的区块,率先挖出区块的前m个节点成为起始周期的权益节点。

2)稳定时期。

在起始周期过后,各节点的记录有了变化。为激励参与节点成为投票节点积极投票,同时也保证系统每周期能成功选出m个权益节点,采用多投机制。

算法5 Stackholders selection。

输入 Participant node;

输出 Stackholders。

3.2 区块生成以及交易打包

如图2 是区块生成的示意图。在每个周期中又分为多个时隙(slot),一个时隙只生成一个区块。在每一时隙开始,由矿工通过简单难度的PoW 挖出一个空的区块头,包含上一区块哈希值(HashprevB)、随机值(nonce)、当前链高度(height)、时间戳(timestamp),但是不包含交易。

图2 区块生成示意图Fig.2 Schematic diagram of block generation

每一周期前,系统通过投票模型选出m个权益代表,每时隙中从m个权益代表前m-1 个负责交易管理,第m个Stackholder 负责打包交易进块中。Stackholders 通过判定该区块头合法后,用私钥对该区块签名,并采用经典的PBFT 的2/3 的投票原则:只有超过2/3 的Stackholders 在该区块上签字,该区块才有上链的资格。

4 安全性分析

4.1 抗垄断性

抗垄断性就是保证在一定周期后,权益节点的选出不被部分节点掌握,其他节点仍然有机会成为权益节点,即在一定周期后节点之间的竞争权益节点依靠的资源分布是否聚集于某一部分节点。本节从理论层面分析PoT 和CRT-PoT的抗垄断化性,比较PoT 和CRT-PoT 中拥有更多资源的节点和普通节点成功竞选权益节点的概率比ρ随着共识周期的变化。

在PoT 的起始周期0 中,若总共有n个竞选节点,每个节点的未花费的satoshi 币的分别为(coin1,coin2,…,coinn),要从中选出m个权益节点。根据PoT 的竞选规则,每个竞选节点被选中的概率为:

根据式(14)可知,在PoT 刚开始时拥有更多币的参与节点成为Stackholder 概率更大。上一周期就是Stackholder 的节点再次成为Stackholder 的概率为:

其中:是在周期0 内每一时隙成功出块后节点的代币收益,K是本周期内节点成功出块的个数,是m个权益节点的总代币收益,sum(slot)是一周期内的时隙总数。而前一周期的普通节点成为这周期Stackholder 的概率为:

由式(15)(16)可知,拥有更多资源的节点在起始周期获得更高概率成为权益节点之后,再次成为权益节点的概率总是比普通节点的概率高,其概率比,由此看概率比其实就是资源比值。只要节点诚实出块,起始拥有更多资源的节点成为权益节点的概率总会高于普通节点,积累代币收益越来越多,最终ρ会越来越小,形成垄断化。

在CRT-PoT 起始周期0 中,成为权益节点的方法是依靠简单的工作量证明,拥有更多算力资源的节点能获得更多机会,每个参与节点被选中的概率为:

其中cali为节点i的算力资源。在起始周期之后,节点通过自身积累的诚实行为记录获得其他节点的投票,记录越多,被投的机会越大。起始周期当选权益节点的节点再次成为权益节点的概率为:

由此可知,在PoT 中拥有更多资源的节点在后期成为权益节点的概率会越来越大,资源节点和普通节点的竞选成功的概率比值ρ越来越小,而CRT-PoT 中ρ会维持一个相对稳定,普通节点有更公平的机会,因而能有效解决垄断化的问题。

4.2 抗自私挖矿

自私挖矿的原理就在于恶意矿工挖到区块后,不立即将其公布出去,而是在这之后继续挖矿,在某一段时间之后将一段连续的区块公布,而此时诚实矿工挖到的区块因为长度不够,不能作为主链而作废。长此以往,以吸引其他矿工加入,加大挖取私链的几率。

对于这种攻击,CRT-PoT 采用的是记账上链权和挖块权分开,矿工只需要通过简单的数学难题挖到空块,块中的记账权,以及该块是否能够上主链由每一个周期的Stackholder节点们投票决定。一旦矿工一次性发布私链,Stackholder 节点们会判断该区块是否合法,决定是否投票,通过投票比重决定该块是否最终能够上链。对于恶意矿工来说,即使自己挖到的私链长度够长,也不能确保一定能够上链。

4.3 抗双花攻击

双花攻击就是字面上的意思就是一笔金额,花费两次。其形成的原理就是若在区块链中,有矿工同时挖到区块,获得该区块的记账权时,在区块链上就会因此造成分叉,分成两条链,只有出块速度更高的分叉链才会形成主链。因此恶意节点在某区块花费一笔金额后,在交易成功前,在该区块上恶意分叉,重新构造一笔新交易,那么该笔金额就会成功花费两次。

在PoW 或是PoS 中,若能成功分叉,就得掌握51%的算力或是51%的币龄。而在CRT-PoT 中,节点的记账权不在矿工手中,在于竞选成功的节点。区块能否上链也是由竞选成功的节点投票决定。因此,若想操控区块链分叉,首先得至少得获得门限t个投票节点的支持,成为Stackholder 节点;其次得操控至少2/3 的Stackholder 节点,支持该块成功上链。在CRT-PoT 中分叉的难度是非常大的,若将t设置得足够大,要想获得这么多投票节点的支持,也是一个长期诚实行为的积累。其行为时时刻刻受到投票节点的监督,一旦有恶意行为,将很难再次获得投票节点的支持。对于理性节点来说,这将是得不偿失的。

5 性能分析

5.1 与经典共识机制对比

在PoW 中,矿工通过解决数学难题挖到区块上链,从而获得该区块的记账权。随着区块难度的增大,区块产生的时延越大。在比特币中,每隔大约10 min 产生一个区块。为了保证区块链系统安全,也不能以降低难度而提高区块生成速度,因此在PoW 中,共识的时延是比较高的。

在PoS 中,仍然是解决数学难题,采用币龄(持币数量×持币时间)使该数学难题的难度减小。虽然在一定程度解决了PoW 的问题,提高了时延,但极大依赖于币龄。如果币龄大,挖块简单;否则,其难度和PoW 也相差无几。因此,PoS在一定程度上提高了共识速度,但却治标不治本。

在CRT-PoT 中,只需解决一个简单数学难题,矿工挖到空块头,区块上链交由Stackholder 节点投票决定,而Stackholder 节点只要在线就能进行投票操作,其在线率又受到投票节点的监督,大幅降低了共识时延。

5.2 与PoT共识机制对比

从PoT 和本文的方案来看,共识总共可以分为三部分:权益节点选出、区块挖出和区块上链,为便于分析性能,其时间消耗分别取为:共识时延(conDelay)、权益节点选出时延(SDelay)、区块挖出时延(GDelay)和区块上链时延(VDelay)。由于都是让矿工通过简单的工作量证明挖出区块头后交由权益节点记账,因此两个方案中GDelay 是一样的。对于区块的上链时延,由于本共识机制是基于PoT 改进其权益节点的选出方案,因此设置VDelayCRT⁃PoT=VDelayPoT,本文就将PoT 和CRT-PoT 的共识时延对比着重于权益节点选出时延对比上,具体的分析如下:

PoT 的权益节点选出采用的是跟随币机制:每一周期,有意参与的节点将自己所有的未花费的satoshi 币,即UTXO(Unspent Transaction Outputs)按字典的顺序排序组成列表,系统通过将区块头的哈希值与当前要选的权益节点的序号值进行哈希得出x,遍历列表直到找出最小的大于x的satoshi 币属于的节点。若列表中未花费satoshi 币的记录有e1 条,排序算法的时间复杂度为O(e12),加上在最坏的情况下至少需要遍历全部列表才找出一个权益节点的情况,若总共参与了n个节点,其时间复杂度为nO(e1),由于e1 ≫n,最终sDelayPoT=O(n2)。

在CRT-PoT 的投票选出权益节点模型中,起始周期0 简单的基于算力挖矿其复杂度可视为O(1),因此这一期间的时间复杂度可忽略不计,权益节点选出的时延主要来自稳定时期且投票机制的时延主要来源于计算的复杂度:

1)在节点的投票公私钥生成期间,由式(1)(2)可知,一个节点有一次模幂运算(Kp),一次模乘运算(Km),节点加入或离开,由式(3)可知,节点加入或离开网络时,信息的更新都是简单的乘除计算,其复杂度都为O(1),可忽略不计。若有n个节点参与,则这一阶段cal1=nKp+nKm。

2)在投票阶段,由式(6)(8)可知,一个节点有一次模逆运算(Ki),两次模乘运算。虽然在其他式中有普通的模运算,但相比起模乘、模幂和模逆运算,普通模运算算法简单,时延可以忽略不计,因此若门限为t(t≤n),由于每个权益节点获得的支持数不少于t,每个投票阶段的tKi+2tKm≤cal2≤nKi+2nKm。

3)验证阶段,由式(11)可知,一个消息M验证有两次模幂运算,一次模乘运算,即cal3=2(n-s)Kp+(n-s)Km,其中s是投票节点数量,n-s为为竞选节点的数量。

根据以上分析,最终投票机制的计算复杂度为:

根据快速幂取模算法Kp的时间复杂度为O(loge2),其中e2 为幂的大小,在本算法中近似于投票模型中的Primes 基础数据的大小。模乘实际上相当于简单的模幂,因此Km的时间复杂度也为O(loge3)(e3 ≪e2),根据拓展欧几里得求逆方法可得Ki的时间复杂度为O(loge4)(e2

综上所得,在参与竞选节点数的增加时,CRT-PoT 权益节点选出的时间相较于PoT 增长更缓慢,如图3 所示。

图3 PoT和CRT-PoT选出权益节点的时延趋势Fig.3 Time delay trends of PoT and CRT-PoT in selecting stackholders

6 实验分析

6.1 实验环境

本实验的实验环境为Intel Core i5-6300HQ CPU 2.30 GHz 和12 GB 内存,采用的操作系统为64 位Windows 10,测试工具有:Goland 2021.1、go1.16.2。

6.2 实验内容

6.2.1 探究primes以及参与节点数对CRT-Election的影响

在CRT-PoT 的CRT-Election 模型中,投票节点的投票公私钥以及竞选节点最终得到的总签名的安全性均取决于Primes 中的基础数据位数:其位数越大,投票节点的公私钥以及总签名的长度越长,在有恶意节点试图破解密钥以及伪造总签名时的难度就越大,但与此同时也会带来一个计算方面的时间消耗代价。与此同时,CRT-Election 模型的时间消耗还与参与节点数有关,因此设置参与节点作为自变量,探究在不同的Primes 的基础数据位数下,对CRT-PoT 的权益节点选出算法时延的影响。

实验1 设置参与节点总数N分别为:5、10、15、20、25、30、35、40、45、50,参与节点中有N4 个竞选节点。其中设置CRT-PoT 中Primes 的基础数据位数分别为50、150、250。

由图4 可知,在基础位数相同下,随着参与节点数的增多,柱形图随着节点数的横向趋势走向呈现一个线性趋势。在同一参与节点数下,柱形图的纵向涨势随着Primes 基础数据的位数增多而大致均匀增长。因此,尽管CRT-PoT 的投票方案带来了一定的计算开销,但是其影响可控,整个系统也更加安全。同时,在实际的区块链系统共识中,Primes 基础位数并不是实时变动,在这种情况下,随着参与节点数的增多,CRT-PoT 投票方案的时延可以认为是一个线性增长。

图4 Primes中基础数据的位数以及参与节点数对CRT-Election的影响Fig.4 Influence of the number of bits of basic data and the number of participating nodes in Primes on CRT-Election

为了保证投票密钥的安全性与变化性,也可以定期通过合理调整Primes 的大小来提高系统的安全性或共识速度。

6.2.2 探究CRT-PoT的抗垄断性

实验2 设置相同的参与竞选资源节点和普通节点,比较其资源比ρ随着共识周期的变化来比较抗垄断化,设置总共有10 个节点参与竞选,10 个节点中,设置4 个资源节点,6个普通节点。其起始竞争资源分别为:5、5、5、5、1、1、1、1、1、1,若节点们都是诚实出块,比较其资源比ρ随时间的变化。

如图5 所示,随着周期数的变化,PoT 中资源比ρ的值越来越大,意味着资源节点和普通节点之间的资源差距越来越大,记账权被起始拥有更多资源的节点掌握;而CRT-PoT 的资源比ρ随着时间变化逐渐趋于1,较为稳定。以上结果说明CRT-PoT 比PoT 有良好的抗垄断性。需要说明的是,时间0 就是节点们参与区块挖矿共识之前,资源节点和普通节点的资源差距比,就是实验设置的起始竞争资源比。

图5 PoT和CRT-PoT的抗垄断性对比Fig.5 Antimonopoly comparison between PoT and CRT-PoT

6.2.3 探究CRT-PoT的共识性能

共识的过程是从矿工挖到区块,选出记账节点,记账节点将交易写入区块,节点们对该区块合法性检验,最后区块上链的过程。在经典共识机制中,PoW 和PoS 中的共识过程与CRT-PoT 在区块挖矿难度,记账节点的选出方式,以及上链方式均有差异,因此从全局共识角度设置多轮共识,探究随着共识轮数的变化,经典共识机制与CRT-PoT 的共识时延变化。本文方案基于PoT 的方案进行改进,因此将重点放在权益节点的选出方案上,探究随着参与共识节点的数量变化,PoT 和CRT-PoT 的共识时延变化。

为了更加严谨地全面探究CRT-PoT 的共识性能,本节将分为两个实验分别探究与经典共识机制PoW、PoS 以及与PoT 的共识时延对比。

实验3 与经典共识机制的时延对比。

设置50 个节点参与共识,区块挖块的难度值Diff 为20,共进行20 轮共识,测试PoW、PoS、CRT-PoT 每轮的共识时延变化,总共测试数据10 组,求取平均值,如图6 所示。

图6 CRT-PoT和PoW、PoS不同共识轮数时的时延对比Fig.6 Time delay comparison of CRT-PoT,PoW and PoS with different numbers of consensus rounds

从图6 可知,由于哈希碰撞的不确定性,PoS 和PoW 的波动比较大,但总体上呈现CRT-PoT 的时延要低于PoW 和PoS,处于一个较稳定状态。因为CRT-PoT 解决的是一个简单的数学难题,其上链难度主要取决于Stackholder 节点,因此在第一轮选出Stackholder 节点时延波动较大,第一轮之后都趋于稳定。

实验4 与PoT 相比的时延对比。

设置参与节点总数N分别为:5、10、15、20、25、30、35、40、45、50,参与节点中有N4 个竞选节点。其中设置CRTPoT 中Primes 的基础数据位数为250,比较PoT 和CRT-PoT 的时延。

如图7 所示,随着参与竞选节点数的增加,PoT 的时延增长率显然快于CRT-PoT 的增长率。CRT-PoT 增长率始终呈缓慢的线性增长,而PoT 的增长率越来越大。CRT-PoT 的共识时延相较于PoT 有着显著的下降,因此,在竞选节点数比较多的时候,本文的方案更显优异。

图7 PoT和CRT-PoT不同参与节点数时的时延对比Fig.7 Time delay comparison of PoT and CRT-PoT with different numbers of participating nodes

7 结语

本文为解决PoT 存在的记账权垄断化以及竞争权益节点数量增多时共识时延增长较快的问题,在PoT 的基础上提出了基于中国剩余定理投票模型的共识机制,即CRT-PoT。以投票机制以及多投机制来解决垄断化问题,该机制也同时保证了共识时延随着竞选节点增多而增长缓慢。最后从理论和实验的角度来证明本文方案在抗垄断化和共识速度上优于PoT 算法,更加适应如今的区块链系统。

虽然本文提出的CRT-PoT 算法在记账权抗垄断化和共识效率上有优势,但是也存在一些其他方面的问题,如竞争机制诚信积累考虑的场景不够、投票节点与权益节点之间诚信奖励不够细化等。未来将在这个方向继续研究,考虑在一些博弈场景下,搭建诚信奖励模型,以求能达到激励节点的同时,让节点的收益均衡。

猜你喜欢

记账矿工竞选
金牌挖矿工
记账类APP
葡萄竞选记
记账类APP
竞选班长
记账理财的好处有哪些
老矿工的家国情怀
竞选班长
矿工老李
总统竞选品哪家强