乐读窝

区块链浪潮:连接技术与应用

乐读窝 > 科普学习 > 区块链浪潮:连接技术与应用

第9章 空间证明共识算法

书籍名:《区块链浪潮:连接技术与应用》    作者:贾英昊



9.1  当前共识算法存在的问题


自2009年第一枚比特币被挖出以来,区块链行业逐渐拓展为一个巨大的全球市场。除  BTC  以外,LTC、ETH、EOS  等各式各样的区块链项目层出不穷。目前,仅以太坊上的  ERC20  代币项目,就超过  11  万个;而发布项目白皮书的公司更是数不胜数。

比特币实现了一种点对点的电子支付系统,而这一分布式系统的诞生,有赖于其采取的  PoW(Proof  of  Work,工作量证明)共识算法。目前,绝大多数具备主链的区块链项目,仍采用  PoW  或改良后的  PoW  共识算法,仅有一部分项目采用PoS(Proof  of  Stake,权益证明)或DPoS(Delegated  Proof  of  Stake,股权代理证明)等算法。PoW  为分布式账本带来简明、有效的共识产生机制,然而也产生了一些问题:在计算哈希函数的过程中,大量能源被浪费。由于ASIC  等芯片的产生,比特币也面临着越来越中心化的挑战。比特币的现状与中本聪最早的设计已经相去甚远。

而  PoS、DPoS  机制同样具有中心化的问题,而且投票过程往往较为烦琐,两者显然并非最佳的解决方案。值得一提的是,市面上曾出现一些采用如“交易即挖矿”“锁仓即挖矿”“投保即挖矿”“挖矿即挖矿”等方案的区块链项目。但本质上,这些项目所发行的还仅仅是以太坊上的  ERC20  代币。由于不具备主链,这些项目均不需要共识机制。所谓的挖矿方案,本质上属于空投方案,是一种激励手段,与区块链的核心技术无必然关联。

真正要解决PoW所衍生的浪费能源、中心化的问题,开发多样化的挖矿方案,至少需要解决以下一系列技术问题:

(1)如果不耗费工作量,以什么作为用户付出代价的证明?

(2)该种证明如何被校验?

(3)如何确定挖矿竞赛的优胜者?

(4)如何避免主链分叉等?



9.2  空间证明的原理


在技术进展的过程中,PoSpace  方案做出了重要的探索。PoSpace  即  Proof  of  Space,空间证明。PoSpace  意在取代比特币中的  PoW  机制,成为一种新型的共识机制解决方案。这一方案目前已在一些区块链项目上实施落地。它以用户支付的硬盘空间作为付出代价的证明,通过下载文件占据硬盘空间,所占的空间越大,说明用户付出越大。

PoSpace  可带来以下好处:极大地减少资源浪费;用户一次性付出硬盘空间后,后续挖矿不需额外增加付出等。根据一些团队的测算,PoSpace  里的用户行为可视作一种拓展性的博弈模型,随着时间增长,会有越来越多的用户加入进来。

为应对硬盘空间造假的问题,PoSpace  把节点分为两种角色:证明人和校验人。证明人即普通节点,需要存储较大的信息数据(如  100GB),而校验人存储数据库以及证明人的一小部分存储信息,以便验证。

当用户/证明人初次加入网络,他需要根据选择的存储空间大小,存储一部分具有特定序列的数据(存储的数据由用户的公钥决定,因此各位用户的数据并不相同)。这些数据以有向无环图(DAG)的结构存储,而每个数据块之间的关联关系,以  Merkle  树的形式发送给校验人。由此一来,校验人可由公钥知道证明人存储的是哪些数据、由发送的  Merkle  树知道这些数据以怎样的结构存储。

在验证环节,校验人向证明人发送一份“挑战”。这份挑战是证明人存储数据块的某种随机组合。证明人需要根据挑战信息,生成对应组合数据的哈希值,并返还给校验人,由校验人验证该哈希值是否正确。

由于挑战是数据的一种随机组合,而略微不同的数据都将使得哈希值完全不同。因此证明人必须确实存储了“挑战”所指明的数据块,才能生成正确的哈希值。而校验人由于存储了完整的数据库,他也可对证明人发回的哈希值进行校验。

证明人有可能仅存储小部分数据,而仍然通过校验人的挑战(证明人所存储的小部分数据,恰好囊括挑战所包含的数据组合)。然而随着“挑战”的过程多次进行,证明人通过存储少量数据而生成出正确反馈的概率大幅下降。因此可通过多次验证来避免证明人的作弊行为。这就是PoSpace里的空间确认过程。

而有了校验用户存储空间的方法,仍需通过一些方式来确定挖矿竞赛的获胜者。比较合理的方式应是,存储空间越大的矿工,越有可能在挖矿竞赛中胜出。PoSpace则通过设计一个“质量函数”来实现这个目标。



9.3  质量函数


“质量函数”需要保持一定的随机性,而同时按照贡献空间的大小来区分各个矿工获胜的概率。因此一个简化的做法是,应对校验人的挑战,矿工反馈的哈希值(一串数字)直接作为随机量,并根据矿工所占的空间对这串数字进行增减。譬如矿工存储的空间总大小为  N,则对哈希值开  N  次平方,得到质量函数。这样一来,矿工存储的空间越大,质量函数的数值越小。我们可以规定单次挖矿竞赛中,质量函数最小的矿工获胜。

但此时仍存在问题:由于矿工在一次性付出硬盘空间后,在挖矿过程中不需有后续付出,因此参加挖矿竞赛不需要付出代价,进行主链分叉几乎没有成本。为避免矿工随意分叉造成双花等混乱情形,仍需要一种规则来确定某链是唯一链,而所有用户均只记录这个唯一链,这才是真正达成共识。

由于每个区块由具有最小“质量函数”的矿工挖出,一个自然的想法便是:由质量函数来确定唯一主链。设定一个数量  i,规定从最新的区块往前  i  个区块的质量函数相加,得到链的总质量函数。总质量函数最小的那条链,可判定为主链,在此基础上,为强调越早的区块所占的比重越高,可增加一个折扣函数,对早期的区块进行缩减(以提高其重要性)。

因此当主链出现分叉时,对两条(或多条)分叉链的总质量函数进行计算,即可确定唯一链,由此保证仅有一条主链,从而使各用户之间建立起一个分布式、同时又统一的账本系统。



9.4  小结


PoSpace  使用物理硬盘空间作为付出代价的证明,解决了比特币里  PoW  持续浪费大量资源的问题,同时可建立一个与比特币作用相同的电子支付系统。PoSpace  可认为是共识机制在  PoW  基础上的一大进步。但与此同时,PoSpace仍存在一些问题:如引入了校验人角色,增加了系统的风险;如何设计和安排校验人,仍是一个问题;以硬盘空间为证明,存在着中心化的风险,因为小部分人可以通过巨大的财力购置大量硬盘空间,持续垄断挖矿,造成类“51%攻击”等。中本聪“一枚  CPU芯片代表一个个体,每个个体拥有平等挖矿机会”的构想,仍然难以实现。

但不得不说,PoSpace  的思路为我们提供了许多启发,如通过随机的方式对用户付出的代价进行校验;通过设计区块质量函数确定挖矿竞赛的获胜方式;通过设计链质量函数来避免主链分叉等。沿着这一思路,完全有可能开发出适应不同使用场景的共识机制,如“注意力证明”“时间证明”等。此外,  PoSpace  中硬盘所存储的空间,若从无意义的字节,改为有意义的内容(如影片等资料),PoSpace  或许天然地适用于建立网络资源共享社区。相信在不远的将来,共识机制将迎来更多的发展和应用。