LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资产 > 链客Talk|探讨PoS公链的无准入以及广泛参与

链客Talk|探讨PoS公链的无准入以及广泛参与

2020-12-18 链客Talk 来源:区块链网络

12月16日,“链客Talk”邀请YOUChain公链研发负责人 Darlzan Liang来到链客直播间,给大家分享了“探讨PoS公链的无准入以及广泛参与”这一话题。

以下是此次活动的内容整理:

1.?关于去中心化的理解

去中心化是公链项目核心的主题以及永恒的追求。区块链的鼻祖中本聪基于“一算力一票”(One-CPU-One-Vote)的理念,采用PoW共识算法创建了第一条去中心化的公链,在运行了近十年之后引起了全世界广泛的关注并吸引了无数人才、资本、学术力量参与相关技术及应用的研究与探索。

纵观这些年整个行业的发展,可以看到在公链领域,基于PoW的链无疑是最能体现去中心化思想的,但是人们也早就意识到这类型的公链也存在着巨大的不足,包括资源消耗巨大、业务吞吐量较低、无可避免地陷入寡头控制(少数矿池掌握绝大部分算力)的局面等等问题。

针对PoW类公链的这些问题,业内一个很常见的探索方向,是采用股份证明(PoS)类型的共识算法,以期实现低资源消耗、高TPS、快速确认等等目标。这一类共识算法,细节上多种多样,但总体上都有几个共同特点,包括:一般包含区块提议方案和区块验证投票方案两部分,基于拜占庭容错(BFT)的投票设计实现一致性;一般不分叉(不允许分叉)。这一类的公链,业内普遍认为相对PoW的公链而言没有那么去中心化,主要包括有准入、参与共识的节点数量较少等问题。即使对于业内的明星项目如以太坊2.0,Algorand等,也存在这方面的问题,目前并没有有效解决。

总体而言,我们认为,如果一条公链存在有准入,或者参与门槛特别高,或者有效参与公链治理的节点数量很少等这一类问题,那它就不能说是去中心化的,或者说去中心化的程度很有限。

我们基于一段时间以来的深入研究,针对PoS类型公链在实现无准入、用户可广泛参与这一目标过程中所面临的问题进行了梳理,积极探索并在YOUChain这一公链中进行实践验证。今天借链客talk所提供的这次机会跟大家进行探讨交流,希望能抛砖引玉,给行业的发展提供一点思路。

2. PoS类型公链实现无准入需要解决的关键问题——活性保障

区块链(共识算法)需要保障两个重要的特性,即安全性和活性。安全性是指只要协议的恶意参与者不超过某个阈值,那么就没有任何参与者能够说服其他参与者接受不正确或无效的消息。包括人们所熟知的双花问题、伪造区块问题等都属于安全性的范畴。而活性是指只要协议的恶意参与者不超过某个阈值,其他参与者就不能无限延期地接受正确的消息。通俗来说,活性就是指能持续的打包新区块并对新区块完成共识。

对于PoW类型的公链来说,活性是极易保障的并且是没有任何参与者能破坏掉的,相应地其重心是要考虑区块链的安全性问题。

对于PoS类型的公链来说,保障安全性的手段比较有限,基本上都得基于PBFT算法实现“多数共识”;因此,在满足安全性的前提下,其活性就受到了限制。

展开来说,要实现PBFT共识投票,前提就是要有一个确定的参与者集合,这个参与者集合的信息,是在历史区块中已经确定并固化了的,从而网络中相互独立运行的节点,可以基于共同的已知信息,依据一定的算法规则完成区块提议、区块验证(投票),并保证输出一致性结果。在这个确定的参与者集合中,如果有超过1/3的参与者(这个比例,按实现细节不同而不同,可能是股份比例,或是节点数比例等等)作恶或者因各种原因主动或被动怠工,那么就会导致新的区块无法完成共识,从而区块链丧失活性。这时,也没有任何新的参与者可以加入共识,从而区块链的活性无法在一个去中心化的环境下恢复。这种情况,对于一个有准入的PoS类型区块链来说,由于参与者在现实世界中互相都可联系上,因此一旦发生此类停块事件,参与者之间可以通过现实世界中的沟通及施加压力,迫使作恶者停止作恶,或者迫使怠工者恢复工作,从而可以在不修改任何规则的情况下就恢复活性。而如果要实现无准入,那么就无法要求参与者不匿名,因此也就会失去“现实世界中的沟通协调”这一保障机制。所以,对于PoS类型的公链而言,要实现无准入,就必须对活性保障问题做更多的权衡及考量。

PoS类型公链要实现无准入,并保障安全性和活性,在设计整个共识算法(含链上治理方案)时,免不了要考虑几个相互关联相互制约的问题,接下来分别加以讨论。

3.?实现活性保障时需考虑的若干问题之一:要同时保证网络不分叉

PoW类型公链主要是在高活性的基础上考虑高安全性的问题,其中一个主要原因就是它可以是完全无准入的,任何新的参与者都可能使区块链往后增长,也就是它可以随意分叉(这里主要指软分叉,即在共识规则之内就可以产生不同的链分支)。从而,该类型公链需要着重考虑安全性问题,即通过分叉选择规则(主要是最长链规则)、区块确定性规则等结合起来实现安全性要求。同时,该类型公链的安全性,主要是概率性的,而不是确定性的,比如说对于比特币一般要求一笔交易经过6个区块的确认,才认为其是安全可接受的。

而PoS类型的公链,在安全性方面,可以做到完全不会分叉,而主要要考虑活性问题。实际上,严格来说是在于PoS类型的公链,一旦允许分叉的产生,则设计一个满足安全性要求的分叉选择方案将成为难以解决的难题。

为什么呢?我们考虑以下几种情况:

(1)如果当前区块的参与者集合是在历史区块上固化下来的,那么采用PBFT类算法实现多数表决,那本身就不可能分叉;这时就只需要考虑活性问题。

(2)如果想要保障很高的活性而考虑一些“可变参与者集合”的方案,比如在一些节点怠工而导致停止出块的情况下,按照某些策略,从初识参与者集合中,衍生出来一个子集合,然后用该子集合完成对新区块的共识,那这种情况,就会导致分叉的产生。比如在网络发生短时间的分区、恶意节点故意造成网络分区等等情况下,参与者将被分隔在不同的分裂网络内,这时就会触发前述的“参与者集合变更策略”,也就可能在各自的网络内生产分叉。因此,这种情况就要考虑分叉选择方案,即一旦出现多个分叉,那么将如何从中选择一条分支作为权威的分支?目前来看,对于这个问题还没有可行的方案。我们无法像PoW类型的公链一样,使用最长链或类似规则,因为一旦考虑这样的规则,就又要面临一个问题,能定下来一个“区块确认数”吗?答案是不能!

原因在于:

PoS类型的公链,其链增长速度不是与物理算力关联的,不同分叉链的增长速度,完全没有统一的约束,完全不可比较。例如,假设有一条PoS类型的公链,允许产生分叉,然后一部分节点当前认可的是一条有10万个区块的链,平均5秒增长一个区块;那么那些能够维护一条分叉链的恶意节点,假设它们在10万高度上制造了一个分叉,然后它们完全可以通过一些手段(比如运行在一个局域网内、提供更高的算力、调整一些参数如产块间隔等),让它们的分叉以1秒或更短的速度产块;然后等待原来被大家认可的分叉的长度超过?10万+“区块确认数”的时候,向全网广播出去一条更长的链。这也就说明了,这种情况下,要确定一个“区块确认数”是不可能的!

根据上面的分析可以看到,对于PoS类型的公链,在满足安全性的前提下,网络是不允许分叉的。而这,也成为高活性的一个障碍。

4.?实现活性保障时需考虑的若干问题之二:经济模型的支持

对于一个无准入公链,需要有核心参与者承担起链的正常运转以及历史数据的存储等等职责。而他们承担这些职责的动力,肯定在于利益驱动。利益可分两部分,一部分是现有股份的价值及其保值增值;另一部分就是参与共识及区块链治理所能获得的奖励。单纯依靠前者来驱动一条无准入公链的运转,是不大现实的,因为链及其代币的价值,对于链的所有用户而言是公共的,而对于公共利益的维护,不足以调动具体参与者的积极性,这其实是一个“公地悲剧”问题。从而另一部分利益也是及其重要的(实际上对于比特币而言,挖矿奖励是最主要的驱动力),而这就是一条公链的经济模型设计问题。

对于PoS类型的公链而言,每一个区块的参与者,除了区块提议者之外,还有很多验证者(投票者)。如果这些参与者不积极参与,而是疏于维护节点状态、随意怠工,那么将对网络的活性产生严重负面影响。而要激励他们积极参与,就需要好好设计区块链的经济模型。

一个好的经济模型,应该符合一些基本原则,如多劳多得、不劳不得,甚至怠工需要受到惩罚等。这其中,怠工问题需要着重解决,包括怠工的识别,证据及惩罚措施的一致性等问题。

关于这个问题,如果设计阶段就加以考虑,这应该不是难题。但是实际上并不是每个项目都能考虑到,其中一个相当有名的项目“Algorand”,该项目由MIT教授、图灵奖得主SilvioMicali主导,开创性地提出了基于VRF密码学自抽签技术的“PoS+BFT”共识算法的一个变形,具有极大的创新性。其宣称共识上是完全去中心化的,同时区块奖励是在所有的持币账户中按持币比例平均分配的。实际上,其宣传与实际情况的符合性存疑。首先,该项目上线的时候,是有准入的,当前虽然文档上宣称是无准入,但是通过分析其区块提议者可以知道,绝大部分区块提议者持币数量都在总持币量排行榜Top100中;另外,相关的抽签概率是跟账号持币量有关的,在共识参与者持币高度集中的情况下,因为核心的少数参与者已经完全能控制链的运行,那对其他“散户”而言,是可以放开准入,而无需担心怠工等问题。作为上述论述的佐证,可以抽样考察Algorand的实际情况,通过分析10640498~10640997这连续500个区块的提议者,可以发现这里面提议者地址总共只有56个,其中47个的持币量在Top100之内,这47个区块提议者的持币量占全网在线代币总量的?96%以上。

Algorand通过持币集中化、并依靠用户诚实并及时正确地维护账户状态等方式,实现共识(不包含其他的链上治理功能)的无准入,其效果有待观察。

5.?如何支持广泛参与

在一个分布式的P2P网络中,消息的延迟和消息的冗余量跟节点规模息息相关。随着节点规模的扩大,消息的冗余将呈指数级增长,因此,基于PBFT类算法实现共识的公链,其在同一轮共识周期中,其真正应该参与共识的节点规模是严重受限的。当节点数达到一定规模后,网络中的共识消息将爆炸性增长,从而对网络带宽、节点的计算资源等都带来严重影响,一般都难以承受。虽然没有明确的理论证明,但是行业内也基本有个共识,就是采用了PBFT类算法进行投票的链,其同时应该参与投票的节点数难以超过100个。

因此,我们应该意识到,无准入不等于无限制。PoS类型的公链,在实现无准入、自由参与的过程中,还需要考虑通过共识机制、参与门槛等等方面的设计,来保证同时可参与投票的节点数量限制在一个合理范围之内。

那么PoS类型的公链是如何支持广泛参与的呢?大部分都采用了委托的形式,即大部分想参与的持币者,都将自己的代币委托(或投票)给少数几个头部参与者,由那些头部参与者代表自己参与共识。这种方式不失为一种支持广泛参与的可行方案,但这种方案却不见得是一种理想方案。主要原因在于,这些委托者除了可以获得一定的奖励之外,实际上对于防止网络趋向中心化起不到任何作用,更不用说参与网络治理等活动。

当然,Algorand项目有点不同。Algorand宣称是不设门槛的,所有有意愿的账户都可以运行自己的节点并参与共识(不包含链上治理)。但实际上,基于前述的持币集中化措施,Algorand才能维持正常运转。一旦代币比较分散,即有成千上万的参与者持币量相差不显著,那么在Algorand现有抽签机制下,每一轮共识(准确地说是共识的每一个步骤中)可参与的节点数量将有成百上千个,这种状态下,网络通信量将是不可承受的。

6. YOUChain的探索与实践

YOUChain致力于打造一个人人可参与的高性能可扩展公链。项目启动以来就一直围绕此目标积极探索,并取得大量进展,主网已于今年6月份成功上线。本着负责和谨慎的态度,主网运行的早期阶段,我们保留了准入措施。

经过对主网运行状态的持续观察,并随着研究探索的深入进行,我们对实现无准入及广泛参与这一目标所要考虑并解决的各类问题有了更深入的理解,主要包括但并不局限于前面已讨论的几个问题。基于目前的研究,我们已经设计了优化改进方案,并已开始逐步实施。

首先,无准入及广泛参与这样的目标需要整体考虑。我们主要通过节点分类的机制来达到广泛参与的目标。具体而言,参与共识的节点分成了参议和众议两大类,其中参议节点是共识的核心参与者,同时还将承担起历史数据存储、P2P网络枢纽节点等职责;这类节点,需要较多的代币抵押,并且也要求较高的硬件资源,当然相应地其获得的区块奖励也相对更多。而众议节点主要用于支持用户广泛参与,以较低的抵押要求以及硬件资源要求,起到对参议节点的监督作用。通过众议节点的监督,可以使得普通用户就能参与到共识和网络治理活动中,“以群众的力量”,监督参议节点是否诚实工作、相关提议是否符合既定规则、变更规则(即协议版本升级)时新的规则是否可接受。从而真正避免区块链趋向中心化,真正实现去中心化的目标。

其次,对于区块奖励的分配,我们将调整为完全的“按劳分配”,同时,奖励的分配机制也能支持节点怠工情况的发现及惩罚。

具体而言就是,对于参议节点,只有区块提议者才能获得该区块的奖励。参议节点成为区块提议者的概率,跟其抵押额正相关。因此,从较长的时间跨度来看,奖励由区块提议者获得,是公平合理的。另外,只有积极诚实参与,才有可能成功提议区块,从这个角度来说,奖励由区块提议者获得,能更合理地体现激励的本质。同时,基于统计概率方面的计算,我们可以认定,在一定的区块范围之内,诚实的参与者肯定有机会成为某个区块的提议者,从而我们可以根据参议节点获得奖励的情况,如果发现一个标识为在线的参议节点长时间未获得任何区块奖励,则就可认定其存在怠工行为,从而对其执行怠工惩罚。

而对于众议节点,要实现“按劳分配”,就需要使得其投票信息在全网中可以固化并保持一致,这存在较大的困难。但通过对很多细节加以研究之后,我们提出了以下改进方案,将能较好地满足我们的目标要求:

(1)众议节点的投票权,不再基于高成本的VRF密码学自抽签方案,改为更适合众议节点参与的“一节点一票”的投票权设计;

(2)每轮投票,将从众议节点总集合中,按一定规则选出一个小集合,由这个小集合进行投票;

(3)由于众议节点主要起监督作用,其本身不会导致区块链分叉,因此不用考虑拜占庭将军问题,从而其投票通过阈值设置为超过当前选出的小集合的50%即可;

(4)不需要完整的两阶段投票,而只需在参议节点的第一阶段投票完成后,直接进行投票(即参议节点还是原来的两阶段投票,众议节点只做一阶段投票);

(5)为了实现奖励分配的按劳分配,进而有效解决怠工问题,考虑采用如下独特设计,即众议投票信息延后固化及验证:由于需要将众议节点的投票信息固化,从而为奖励分配提供一致性依据。同时考虑降低对产块间隔(共识周期)的影响,以及避免数据重复存储,特设计了该延后机制。具体为:

共识过程:进入区块r的共识周期时,区块提议者收集众议节点对r-1区块的投票(票数需满足最低阈值要求),固化到区块r的区块头中;

任何一个节点,收到提议区块r时,先判断其记录的众议节点对r-1区块的投票是否满足要求,满足则接受,不满足则不接受;

各节点分别对某个符合要求的提议区块r进行投票;

最后只验证参议节点对区块r的投票达成共识,即可完成r的确定;

而这时众议节点对r的投票,将会在r+1的周期中进行验证。

(6)在基于上述投票设计的基础上,众议节点奖励分配规则为:在一个分配周期(128个区块)内,所有有投票记录的众议节点,平均分配本周期的区块奖励。

(7)基于上述设计,一个诚实且硬件条件跟得上的众议节点,在该投票的时候都将自己的投票广播到了网络中,则其在每个周期内都会有非常大的概率获得奖励(未获得奖励的概率将是?10^(-6)?级别),则连续两次未获得奖励的概率,将是?10^(-12)级别,可以认为不会发生。因此,我们设置怠工惩罚规则如下:若一个“在线”状态的众议节点,连续两个分配周期未获得奖励,则认为该节点怠工(实际上,怠工有很多种情况导致,除了主动怠工,还可能有被动怠工,如网络不好跟不上实时进度、硬件资源跟不上等等)。怠工的节点,将被处以一定罚金(如节点抵押额的?5%,待定)并且被处罚下线。

结合新的奖励分配及怠工惩罚方案,网络将可以有效激励节点保持诚实行为(诚实标识自己是否在线,以及在线节点积极参与实际工作),同时能自动避免节点的有意或无意的怠工行为对网络活性造成重大影响。

—-

编译者/作者:链客Talk

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...