区块链技术进入公链基础设施平台建设阶段,围绕区块链系统的共识算法创新层出不穷,在确保去中心化前提下追求更安全更高效的共识协议已经成为主要研究方向之一,PoS (权益证明)、DPoS (委托权益证明)、PBFT (实用拜占庭容错)等等众多共识模型被相继提出,万维链认为权益才是左右链上治理和发展的根本因素,研发了 PoS 星系共识协议,在群星璀璨的共识节点运转下,打造属于万维链的星系共识。

作者:Dexter

北京时间 2019 年 7 月 1 日 18 点 27 分 25 秒,万维链(WanChain)测试网共识机制在高度为 3,560,000 的区块上成功由 PoW 共识切换至 PoS 星系共识(Galaxy Consensus)。与此同时,WanWallet 轻钱包,WanchainPoS 浏览器和 Wanchain NetworkStatus 节点状态追踪平台开始正式同步星系共识相关数据。已经准备就绪的验证节点和委托人也将正式开启权益挖矿(Staking)。这标志着星系共识 Beta 版 成功升级,也是继今年 3 月 31 日共识技术黄皮书和概念原型的公布、5 月 18 日 Alpha 版的推出之后,万维链团队在 PoS 共识机制在工程落地上的另一关键里程碑。

万维链推出星系共识

这两年,区块链技术进入公链基础设施平台建设阶段,围绕区块链系统的共识算法创新层出不穷,在确保去中心化前提下追求更安全更高效的共识协议已经成为主要研究方向之一,PoS (权益证明)、DPoS (委托权益证明)、PBFT (实用拜占庭容错)等等众多共识模型被相继提出,万维链认为权益才是左右链上治理和发展的根本因素,研发了 PoS 星系共识协议,在群星璀璨的共识节点运转下,打造属于万维链的星系共识。

万维链 3 月发布的最新的星系共识(Galaxy Consensus)系统黄皮书,是其理论研发团队全新提出的高效、科学、安全的实用型 PoS 共识协议,旨在替代原本高能耗的 PPoW (permissioned proof-of-work,许可工作量证明),也正式将万维链的共识系统开放给广大社区,迈出完全去中心化的关键一步。

万维链在设计星系共识时,充分考虑到各项指标的平衡,最终得出一个合理的设计方案。首先,安全性是基础,脱离这个基础谈设计没有意义。星系共识采用由 Cardano 在密码学顶级学术会议 Crypto 2017 发表的论文中提出的 Ouroboros 共识算法(也是第一个被工业界采用的可证明安全 PoS 算法)的基础框架,对其核心的密码学算法进行创新,能够保证可证明安全;其次,星系共识中两类参与者,一类负责随机数生成,一个负责出块人选取,二者逻辑层面相互独立,数据层面又互相影响,共识结果不依赖于任何单一角色,保证了高去中心化;最后,实用性一直是星系共识追求的目标,目前很多 PoS 共识机制有比较漂亮的理论设计,但是在实际应用的时候困难重重,就是因为设计中的一些假设在实际中很难实现。而星系共识在设计之初就非常重视这一点,开发了 ULS (Unique Leader Selection,唯一领导者选择)算法,此算法与其他如 VRF (可验证随机函数)等随机数生成算法相比,在保持出块者匿名的同时,保证了出块者的唯一性,降低了自然分叉的概率。星系共识的两大核心算法:随机数生成算法、唯一出块人选择算法(ULS)在效率上均达到实际可用,而完整的委托机制也保证了任何人均可参与到共识过程中。

下面我们来一一介绍万维链星系共识的独特之处。

星系共识的构成

万维链用星系来形容自己独创的星系共识算法的运行机制,这个形象的比喻很容易让人一下子联想起浩瀚的宇宙与无数个存在于星系内的星球。

真实的星系存在各种各样的星体,无规则分布于星系空间,万维链星系也包括了犹如各种星体一样的参与者,有恒星节点、行星节点、还有星群。星系中有一部分星体,是被人类关注并命名的,在星系共识体系中,就类似于持币者如果想参与星系共识,需要主动注册,这种主动参与性,增加了整个共识体系的活跃状态和稳定性。真实星系中存在时间更久、质量更大的恒星节点,在星系共识体系,恒星则代表着持 WAN 币时间更长(币龄)、权益更大,并且是可以接受委托的的共识节点;而星系共识体系里的行星,就代表了持币数量相对较少的共识参与者,行星是不可以接受委托的共识节点,其参与共识完全依赖于自身持有的权益值。共识星系中还包括 RNP (Random Number Proposer,随机数提议者)星群、EL (Epoch Leader,周期领导者)星群,RNP 星群负责随机数的生成,EL 星群负责打包交易发布区块,而如何选出正确的出块者,则是万维链星系共识的核心。

可证明安全的出块选择

上面介绍了万维链星系共识的架构,现在可以了解一下 EL 星群中出块者选择的流程原理和重要作用。

众所周知,区块链的发展延长本质上就是区块的不断连接延续,而完成打包发布区块的就是这些出块者,他们一方面决定哪些交易写入区块进而上链确认,另一方面也通过选择接入的父区块决定着链的发展走向,在网络中共识节点善恶并存的环境下,一个好的出块者选择算法就是要保证诚实节点能够获得更多的出块权,进而主导链的发展。

选举过程根据共识机制的不同,会有明显的差别,以 EOS 来讲,采用的是 DPos+BFT 的共识算法,其固定 21 个超级节点的任务是在区块链上生成新的块,虽然说这样做是提升了性能跟扩展性,但是却大大牺牲了区块链最为根本的去中心化特性,而且随着超级节点的公开问世,非常容易遭受攻击。

Algorand 和 Dfinity 的共识算法采用 VRF,其过程大概如此:输入值由前一个随机数(最初的随机数却是协议给定的)和某种代表高度和轮次的变量进行组合,然后用私钥对之进行签名(或者是先签名再组合),通过判断签名哈希值是否小于某一阈值确定出块权归属。VRF 算法虽然保护了出块权分配的隐私性,但每轮合法出块者个数的不确定性和对参与者活性的高要求成为其最显著的缺点。

万维链的 PoS 算法创新:星系共识

随机数生成保障星系共识健康运行

在星系运行初期,想要参与共识的节点通过在共识智能合约中质押 WAN 币成为星系节点,质押锁定时间与权益值成正比趋势,等星系涌现了大量节点,星系共识开始正式运行。在每次共识协议运行周期(epoch)的起始,星系根据节点权益值的比例选择出 RNP 与 EL 这两大星群。

RNP 星群被选择组建之后,将参与一个周期(epoch)的工作,完成 DKG1、DKG2 和 SIGN 三个阶段的工作。在 DKG1 阶段,各节点提出自身对随机数碎片选择的承诺,保证了碎片选择的不可更改性,在 DKG2 阶段,各节点将自身选择的随机数碎片通过门限秘密分享的方式分享给星群中的其他节点,最终在 SIGN 阶段,各节点公布自身收集的随机数碎片数据,完成随机数的生成,更新链上随机数数据。而整个过程由于门限秘密分享的特点,保证了只要在线节点数超过门限值就将顺利完成随机数的更新,确保了随机数生成的可靠性,同时只要星群中至少一个节点在随机数碎片的选择上是随机的,那么最终随机数结果就是随机的,保证了随机数生成的安全性。

随机数生成算法是设计共识机制的主要挑战之一,也是衡量共识机制优劣的重要标准之一。星系共识坚持学术派的发展路线,借鉴了 Ouroboros 可证明安全的模型框架,全新设计更加高效安全的随机数生成算法,并创新性设计 Unique Leader Selection 算法替代 VRF 算法,用于出块者选择,保证了合法出块者的唯一性,大大降低了自然分叉概率,所以星系共识的整体框架就是 ULS + Chain based,在保证安全性的前提下极大地提升了实用性。

EL 星群被选择组建后,将参与两个周期(epoch)的工作。在第一个周期中,EL 星群节点参与秘密信息序列 SMA1 和 SMA2 两个阶段工作。在 SMA1 阶段,各节点提出自身秘密信息的承诺数据,保证了秘密信息的不可更改性,在 SMA2 阶段,各节点将自己的秘密信息加密共享给其他节点,完成秘密信息序列(Secret Message Array,SMA)的生成。在第二个周期起始时,EL 星群中的节点会依据 RNP 星群产生的随机数进行排序,这一排序在整个周期中有效,同时依据秘密信息序列执行出块者选择算法,确定整个周期内各时间段(slot)的出块权归属,这一过程是在 EL 星群内部秘密执行的,其他节点无法获知结果,而 EL 星群中节点就依据出块权的归属完成整个周期内新区块的生成。当新区块发布时,EL 星群中的节点要添加自身合法性的凭证,这一凭证可被全网验证,确保了链的正常安全发展。

完整的委托机制

星系的共识体制建立之后,星体们如何运行完成有效健康的选举?这就引出万维链全新设计的完整的委托机制。

我们知道,一个健康的共识体系,权益分布既不能太集中,也不该太分散。星系共识鼓励 WAN 持有者将尽可能多的币投入到共识协议中,同时避免 WAN 的大型持有者对共识体系产生垄断影响,防止作恶。另一方面,为了给 WAN 币权益比率较少的用户提供参与共识的机会,星系共识委托机制的实现是基于三重 ECDSA 委托签名算法,对当前的区块链系统有着天然的兼容性,通过委托机制,持有少量 WAN 的用户可以将自身权益委托给代理节点,由代理节点参与共识的运行,同时由于签名消息空间的限制,代理节点只能代为出块,无法进行其他操作,保证了用户权益的安全性。

星系共识中委托参与共识的过程,有点像普通投资者通过购买机构基金打新股的过程。普通投资者打新股同样需要看 30 日持股资金,资金小的话,打新股的中签率就很低,而如果投资者在机构购买打新基金,就提高了打新股的机率,机构打新基金在中签后获取收益,又通过特殊的分配机制,把打新收益返还给每一位基金购买人。

而星系共识中委托过程无需第三方机构,WAN 持币较少的用户通过非交互高效 ECDSA 委托签名算法把 WAN 投入共识协议委托给持币较多的恒星,而获得收益之后,再以特殊算法分配制度进行权益分配。限制签名空间且与现有区块链签名体系相兼容,保证了任何 WAN 持有者皆可参与共识。星系共识的委托机制基于密码学算法实现,委托者的本金被锁定在智能合约内,受托节点只获得委托者的参与共识的权利,并不对用户资金具有任何控制权,因此能够充分保障用户的资金安全。

万维链的 PoS 算法创新:星系共识

星系共识委托机制中,委托的过程以及受托节点参与共识的数据都在链上进行存证,所有数据公开透明。一方面,保证受托节点能够公平分配共识收益,无法作恶;另一方面,也方便委托者能够对受托节点的活性进行甄别,从而选择合适的受托节点。

万维链项目的代币持有者如果足够分散,那么,想通过资金回笼形成寡头垄断的局面相对困难。

清晰可信的经济激励模型

一个区块链系统本身也是一个节点网络的生态系统,共识是维持生态系统正常运转和发展进步的驱动力,而维持共识正常运转的源动力就是经济激励机制,万维链星系共识的经济激励机制,经以下多方考虑和研究,最终实现了一个完整的闭环,将营造出一个良好的共识运行环境。

委托机制的激励中设置了「天花板」的概念

即为可接受委托额设置了上限,简而言之,如果一个被委托人自身持有 10 万的权益,我们给他的被委托额度也将是 10 万,这就是「天花板」,在被委托权益值不大于 10 万的情况下,奖励是正常进行的,如果超过了这一额度,那么奖励将减少,直至被委托值超过 20 万奖励被减少归零,万维链希望通过正常的市场行为来调节委托机制的运转,既体现了委托的意义,又控制好安全的风险,在经济激励机制设计中做好对委托机制的权衡。

经济激励机制模型原理

星系共识的奖励来源是由万维链基金会提供的 WAN 发行总量的 10%,也就是 210 万 WAN,这部分资金也将分阶段等比例递减,在同一阶段内按 epoch 均分,当然每个 epoch 内所有交易费用也将计入奖励之中,这里并不按区块分发,而是每个 epoch 进行一次结算,交易费用计入奖励总额在 RNP 和 EL 节点间分配,这是基于交易费将逐步成为奖励主体而进行的考虑,以保证所有参与共识节点的利益。万维链认为,在共识运行中,RNP 和 EL 节点的作用与贡献是同等重要的,所以每个 epoch 结算中,奖励将在 RNP 和 EL 节点间平均分配,即如果每个节点都诚实运行,完成自身工作,那么获得的收益是相同的。

在委托机制中,委托人需要从奖励中依照委托费率的比例拿出一部分交给被委托人作为报酬,剩余部分作为委托人参与共识的收益,而两者的奖励都受到被委托人当前接受委托值和接受委托上限的影响,当接受委托值超过上限,两者的奖励都将减少,直至最终归零。

所有潜在被委托者的收益率和当前持有权益量将形成一个排序列表,供委托用户做出最优选择。由于委托超出委托峰值后委托者和被委托者的收益都将降低,系统自然促进形成更均匀的权益分布,降低了合谋风险,鼓励更多的活跃用户参与星系共识经济生态系统。

基于 PoS 共识的抗攻击分析

双重花费(Double Spending)

星系共识对出现含有矛盾交易的两条分叉链进行合法性检查,包含任何矛盾交易的区块将被认定无效。同时 chain-based 共识只接受最长链作为合法链,不会出现两条合法分叉链的情况,进而避免「双重花费」(double spending)发生。

Grinding Attacks (有译 「粉碎攻击」或 「研磨攻击」)

在这一类型攻击中,攻击者希望影响出块者选择过程以提高自己被选中的几率。星系共识中,出块者选择基于「随机信标」(random beacon)和两阶段的 ULS 算法,在随机数生成过程中我们采用了门限签名方案,任何参与者只能决定自己的签名部分,只需要某一个参与者是诚实的,攻击者就无法决定最终随机数结果,同时只要参与者中攻击者数量低于门限值就无法预知最终随机数结果,所以 Epoch Leader (周期领导者)的选择无法通过控制随机数生成进行影响。在两阶段的 ULS 算法的 SMA 生成过程中,被选中的参与者只能选择是否广播他们的数据,如果不公布将失去部分收益。而且 SMA 的生成在 SIGN 阶段之前,而 Epoch Leaders 排序在 SIGN 阶段之后,攻击者没有信息优势来影响 ULS 算法的选择结果。

「交易拒绝攻击」(Transaction Denial Attacks)

在「交易拒绝攻击」中,攻击者希望阻止一笔合法交易被确认,星系共识强调诚实节点不会拒绝任何合法交易,所以如果要实现「交易拒绝攻击」,就意味着所有的 Slot Leaders 都是恶意的。由于诚实主体假设和 follow-the-stake rate 选择方案,攻击概率是随着时间以小于 1/2 的底数指数下降的,攻击者实现攻击的概率趋近于零。

「贿赂攻击」(Bribery Attacks)

在「贿赂攻击」中,攻击者希望通过腐蚀诚实参与者为其所用来实现某种恶意目的,例如实现双花攻击。在星系共识中,理性的参与者由于两点原因不会接受这样的贿赂腐蚀:一是诚实参与者接受这样的贿赂腐蚀而变成恶意参与者的话,他将失去抵押在智能合约中的权益;二是恶意行为会损害万维链的经济生态系统,进而减低 WAN 的价值,参与者的 WAN 就会贬值。所以理性参与者不会接受贿赂腐蚀。而且只要保证诚实主体,贿赂攻击也无法影响到共识的安全性。

「长程攻击」(Long-range Attacks)、「过往多数攻击」(Past Majority attacks)

在「长程攻击」或「过往多数攻击」攻击中,攻击者希望从链上一个之前较远的位置开始重构一条合法链,这样就可以使链上数据与当前真实状态不同,进而实现双花等攻击。星系共识协议在有效链上设置了一些检测点(check point),随着链不断延长,在最后一个检测点之前的数据将不再改变,即新出现的检测点的区块无效,所以攻击者无法实现长程攻击。

「无利害攻击」(Nothing-at-Stake Attacks)

在「无利害攻击」(nothing-at-stake attacks) 中,参与者会在多个分叉上产生新的区块,无论最终哪个分叉被确认有效都将获得收益。由于 PoS 共识中生成区块几乎没有消耗,这种攻击就很容易发生,而在 PoW 共识中,矿工不会浪费算力来在不同分叉上产生区块,这样很可能让他完全得不到收益。同时,这种攻击常发生在某一时间段或某一区块高度有多个合法出块者的情况下,例如通过 VRF 进行出块者选择的时候,然而在星系共识中,某一时间段内只有唯一合法出块者,几乎不会出现分叉情况,参与者就没有动机发动无利害攻击。