ETH作为当今加密生态的头部公链,其拥有最为繁荣的生态系统和最大的TVL。因此,ETH2.0的升级计划也理所当然的成为当下加密世界最受关注的热点之一。而该次升级计划的核心之一就在于验证机制将由PoW转变为PoS。
根据区块链共识机制中最为核心,也是最为基础的“抗女巫攻击策略”进行分类,区块链共识机制可以分为最为主流的两大分支——工作量证明(Proof of Work,即PoW)和权益证明(Proof of Stake,即PoS)。
我们先简单说明一下什么是女巫攻击:所谓女巫攻击(Sybil Attack),就是指通过伪造多个ID对网络进行干扰的攻击方式。该名称来源于美国著名小说《女巫》。该小说的主角患有多重人格障碍症,一个身体内同时兼容多个人格。
女巫攻击在网络中很常见,淘宝产品中的刷量、刷赞等都是黑客通过伪造大量ID造假完成的。女巫攻击最常见的攻击场景是数据冗余机制,即为了提升网络安全,将数据进行多重备份的机制,而区块链正是使用数据多重备份机制的典型。因此,在分布式数据存储的区块链中从来不乏女巫攻击的身影。
要实现女巫攻击,需要通过一个实体节点伪造出大量的伪装节点,并将这些节点广播到整个区块链网络。当其他正常节点查询信息时经过这些伪装节点,攻击者可以操控伪装节点对查询进行干扰,继而反馈给查询者虚假信息,或者干脆不反馈任何结果。
当一个区块链中的伪装节点数量超过真实节点时,攻击者会凭借投票票数领先的优势击退真实的节点。攻击者还可以通过拒绝接受新区块、返回错误信息等方式拒绝新节点的加入,以达到对区块链的统治。这种情况下,攻击者就拥有了整个区块链的决定权,可以篡改交易记录、更改交易顺序,对区块链造成极大的危害。
区块链的基本原理就是用户将数个交易打包成块,通过哈希引用把单独的区块连接成一条链,从而得到一个共享的账本。但是直接这样使用一个账本的安全性就很难保证,因为坏人同样也可以创造一个账本,然后把两个账本同时摆在用户面前。而哪个是真的哪个是假的,用户应该相信哪一个,就成了一个复杂的权衡问题。
如果在中心化的环境中,这个问题将不再是问题,例如,如果我有一个银行账户,其中余额的多少完全由银行的中央系统所确定。如果账户的实际数额和事实情况不一致,我就可以通过与中心系统协调或者法律途径解决问题。
但在去中心化的世界中,是不存在这个一个一锤定音的中心化机构的。因此,人们就需要通过其他方式达成共识,才能保证账本的公正性。
那么问题来了,在去中心化的环境中,应该怎样达成共识呢?
最经典的办法就是投票。通过大家共同参与投票,就可以选出一个值得信任的账本,然后共同使用该账本。
但是,说到投票,公平公正的问题就无法忽略,例如,投票权要怎么分配就是个不得不考虑的问题。
如果在一次投票活动中某一个体拥有了可以左右全局的票数,那么这场活动就很难再称之为投票。因为这意味着他想做什么,结果就是什么样的,而这对于其他个体显然是不公平的,这种不公平的方式也注定无法获得共识。因此,如果我们真的希望达成某个共识,就要排除这种不公平。所以投票权的分配被视为是共识协议中最为核心的部分之一。
如果发生在线下,投票权分配的问题其实很容易就能得到解决。实行简单的一人一票即可。至于身份验证问题,通过身份证件在投票的时候登记一下就可以解决。
但是如果发生于线上,一人一票的问题就会被无限复杂化。
首先,在线上的环境中,尤其是去中心化的环境中,如何定义“一个人”就是个很大的问题。大家在线上都是以匿名的方式存在,甚至无法判断网络对面到底是一个抠脚大汉还是一条狗。因此,我们就需要一个抗女巫攻击的机制。但到底是将一个账户视为一个人,还是将一个ip视为一个人,抑或是再用别的什么标准去确定?
在区块链中,最常用的两大解决方案就是工作量证明(PoW)和权益证明(PoS),后者包括代理的权益证明(DPoS)。当然除它们之外还有一些其他的证明方式,比如说证明拥有多少空间,或者证明燃烧了多少货币,但是目前最为主流的还是PoW和PoS这两种。
工作量证明(PoW)的基本思想就是通过算力决定出块权。如果你能解出一个PoW计算难题,你就可以获得出块的权力。我们甚至可以粗暴的理解为一个CPU、一个GPU、或一台矿机一票。这种模式的优势在于:
1、整个系统是无许可的。参与者不需要任何人许可,只要有机器有算力就可参与。甚至理论上都不一定需要机器,如果说你可以手动算出一个区块的哈希,并及时将结果上传,别人依旧会承认这是一个合法的区块。
2、PoW投票行为本身成本是比较高的,不论是使用CPU、GPU还是用矿机,机器的成本和电力的成本,都是实打实的真金白银。这就意味着,如果想在PoW的环境下进行女巫攻击将要付出极高的成本,而这往往会让攻击者得不偿失。
3、PoW中所投的票和投票权是保持绑定的。按照工作量证明的一般逻辑,投票的时候需要先打包出一个块,然后再对这个块做工作量证明,如果做出证明就相当于投出去一票,但是这个时候打包的块已经没有办法修改了。而另一方面,如果想要回滚掉自己出的块,必须付出和回滚别人的块时候所需的同等的算力。这意味着一旦投票成功以后,即使是投票者本人也修改不了投票的内容,投票的信誉度得以保障。
当然基于PoW机制的共识算法也存在一些无法规避的缺点。
1、PoW的延迟非常高,因为把交易打包到区块以后,这个区块并不是马上就成为一个有效的候选区块。至少还要完成一个工作量证明这个区块才能称之为候选区块。
于是,从打包好区块到做完区块的工作量证明这一段时间内,交易是不可能被人确认的。所以即便比特币不是等六个块确认,而是看到一个块就确认,确认一笔交易平均也要等十分钟时间。
2、PoW机制另一个被人诟病的缺点就是能耗特别高、不环保。对于这一点,工作量证明的能耗是否必要,我觉得见仁见智,可以持保留意见。虽然它的确存在一些浪费问题,但攻击者的成本也因此被拔高到难以承受的地步,从这个角度来说,似乎也不全是件坏事。
权益证明(PoS)基本的思想是:当你持有Token(stake),你就有记账权和投票权。你的投票权和你持币的数量是成正比的。简而言之,Token越多,投票权就越大。
PoS协议的基本框架是按所有的参与者的持币量,去分配打包权和投票权。这也就意味着,参与者的信息是已知的,至于这有什么意义咱们先按下不表,后续再论。
回到打包权和投票权,在PoS的系统里打包和投票两件事是分开的(PoW系统里这两个没有分开)。分配完打包权以后,拿到打包权的人就有资格出一个候选区块。这个区块里包含要处理的交易和打包权人自己的签名。
但是候选区块并不意味着就会被加入共识,在广播候选区块以后还需要由那些有投票权的人去投票(投票的形式就是在被投票的区块上做个签名)。只有在投票后得到相对多数票的支持,候选区块才会最终被加入共识,变成一个有效的区块。当然投票的过程可以用很多方式执行,比较常见的就是可以用一个少数服从多数的共识算法去实现。
这一点跟PoW非常不一样,因为在PoW系统里人们根本不知道全网的算力有多少,只能靠估计,而且一般还估计不准。所以PoW系统里几乎不可能用一个确定的阈值去判断什么是多数。
在PoS系统中,如果检测到有的参与者违反了PoS共识的协议,就可以对他们做出一些惩罚。比如有的人把自己的一票投给很多个块,或者说有票但就是不投,这些会对系统的安全性造成影响的行为都可以惩罚。
接下来,让我们来看一下权益证明的优点有哪些:
1、矿工和持币者的动机是一致的。
PoS的矿工都必须持币,这意味着在PoS的生态里将减少不持币但靠机器来挖矿的角色。在PoW的社区中,经常会出现有钱人、开发者、以及矿工三方的利益不是完全一致的情况,然后就会出现争执,以至于最后很多事情都难以进展。而在PoS中,至少矿工和资本家的利益会更为一致,一定程度上减少了冲突和分歧。
2、PoS的延迟可以做得非常低,确认可以非常快。
在PoS系统里,拿到一个交易就可以马上打包,打包以后就可以广播,这个时间是不需要等待的,不像PoW,必须等至少做一个PoW问题的时间。PoS共识的延迟主要是受限于网络和参与投票的人数。因为投票的人越多,要等的时间也就越久。
3、PoS比较环保,因为它不需要做工作量证明。
在Pos中,投票实际上就是做个签名,最多再做一些简单的运算,比求解PoW难题容易多,自然消耗的算力和电力就大大减少。
但不得不说,PoS的缺点也同优点相对,另外,它也失却PoW系统的一些优点。
1、与无许可的PoW系统相比,PoS的系统在匿名性和许可性上稍微差一些。因为一个人如果要加入一个PoS的系统,首先要持有Token。这个Token是无法通过其他方式获得,只能跟持有Token的人去做交易,且只有在交易成功拿到币后才可以加入系统。不像PoW,只要有一台机器接入系统,就可以直接挖到Token。
2、投票行为本身成本非常低,只需要做个签名就可以生成一个有效的投票。这样的话在安全性上会有一些问题。比如PoS系统常见的无利害攻击问题。
另外,投票权可以复用,可以转让,这也是相当危险的。如果用户把自己的私钥卖给别人,那他以前投出的票或是在历史上每个分支做出的选择,拿到其私钥的人都可以再去重新选择一次。这会在安全性上带来一些问题。
3、我们在前面提到过,在PoS机制中,分配投票权和打包权之前参与者的信息是已知的。因此,投票权的决定时间是早于生成候选区块的。这样一来意味着人们可以选择的策略空间将会更大,整个博弈会变得更复杂。通常来说,策略空间大对于系统的安全性相当不利,因为这会给攻击者留出更大的操作空间。其结果就是在PoS系统中会有更多的攻击方式,比如无利害攻击、长程攻击等。
4、在PoS中矿工和资本家通常是一个人(一个群体),尽管这会减少整个系统的博弈成本。但也意味着整个系统的中心化程度会水涨船高。
在区块链中,有一个不可能三角,即安全性、效率和去中心化。通常情况下,这三方面是无法兼得的。而PoW和PoS就是在这三个方面做出了不同的取舍。
PoW以无许可和算力门槛保证了整个系统的安全性和去中心化程度,但在效率方面则不可避免的会有缺失,实际上其也确实长期被延迟高、低吞吐量等问题所困扰。
而PoS则选择了另一条路,它不再无许可,取而代之,矿工成为了生态系统的实际参与人。这意味着如果矿工做出了不利于整个系统的决策,作恶者也会付出代价(代币Token下降)。但其投票机制也降低了整个系统的安全性,同时,矿工和资本的身份合一也让系统出现了中心化的风险。
有人曾经打过一个比方。
在一个典型的PoS共识系统中,大家通过股权质押获取一张门票,然后获得门票的人坐在会议室里指点江山。
而在以比特币为代表的PoW共识系统中,一群人坐在漆黑的荒野里,他们既不知道其他人的身份,也不知道荒野里一共有多少人、其他人何时来何时走,只能通过喊出自己的观点和听清他人的喊声来交流并最终达成共识。
不得不说这个比方相当的形象,PoW和PoS的特点尽显无疑。而实际上两者孰优孰劣是无法比较的,对他们的采用只能体现出两种不同的权衡。
ETH2.0最终决定采取PoS也意味着对目前的ETH来说,效率问题已经相当严峻了,因此可能需要以一定的安全性和去中心化程度作为交换,这是无可厚非的,毕竟当下没有可以兼顾的解决方法。
如果能把PoW和PoS的优势结合起来,就有可能做到一个安全性又高,确认又快,吞吐量大,而且能耗比较合理的系统。
但其技术难度之大,自不必多说。因此,目前我们只能静观其变,期待更好的解决方案横空出世。