查看原文
其他

解读以太坊拜占庭硬分叉

2017-10-14 平行区块链

北京时间10月16日晚间20点-21点,以太坊网络将进行一个计划内的硬分叉,分叉时间在第437万个区块高度。Ropsten测试网络已经在9月19日(第170万个区块高度)进行了硬分叉测试。分叉倒计时可以在这里看到:https://fork.codetract.io/


本次拜占庭硬分叉带来的改变包括延迟引爆难度炸弹,推迟以太坊冰河期一年,以及为大都会阶段引入零知识证明做准备等等。


那么什么是难度炸弹?它为何会影响矿工收益?何为零知识证明?如何运作?




难度炸弹

 

要弄清以太坊难度炸弹为题,需要从PoS协议与PoW协议知识入手。


PoS vs PoW

PoW:包括 ETH 和 BTC 在内的绝大多数主流加密货币采用的就是这种协议,PoW 需要矿工(或者节点)不断消耗算力进行哈希计算,以找到期望的随机数,这就意味着系统需要消耗大量的算力和电力。


PoS:在这个系统里,我们有验证者而不是矿工,它的原理是,作为验证节点,首先你必须拥有一定数量的以太币,根据以太币的数量和时间会产生用于下注验证区块的权益。只有拥有权益的节点才能有效验证区块,当你验证的区块被打包进链,你将获得和你权益成正比的区块奖励。如果你验证恶意或错误的区块,那么你所下注的权益将被扣除。


为了实施 PoS,以太坊将采用 Casper 的共识算法,一开始,它将是一个PoW 和 PoS 共存的系统,区块的绝大多数交易还是采用 PoW 协议,每100个区块有一个采用 PoS 协议挖出,这样做的目的就是为在以太坊平台上创建了一个真实的测试环境,但是这种协议究竟能给以太坊带来什么好处呢?让我们慢慢道来:


降低系统的整体能源成本:全世界的比特币矿工每小时耗资约5万美元,一年耗资约4.5亿美元!通过使用 PoS 协议,你可以将整个过程虚拟化,大幅减少成本;


无 ASIC 优势:由于整个过程是虚拟的,它将不再依赖谁有更好的设备或者 ASICs 。

51%攻击变得更困难:PoW 协议存在算力集中问题,51%攻击风险很大,PoS 则让这一攻击变得更加困难;


无恶意验证者:任何验证者都需要将其权益锁定在区块链中,将确保他们不会向链中添加任何恶意或错误的块,因为这意味着所有权益将被扣除;


创建区块:出块和整个进程都会更快(后面会详细介绍);


可拓展性:通过引入“分片”概念,让区块链变得可拓展;


虽然之前有过各种各样的简单的 PoS 协议部署过,但是真正让 Casper 共识算法从中脱颖而出的是它能激励诚实的矿工并且惩罚不诚实的矿工,如果你试图去验证恶意的区块,那不好意思,你所有的权益将被扣除,它会狠狠地惩罚任何不遵守游戏规则的人。


Vitalik 是这样解释的:


想象现在有 100 个人围着圆桌,其中有一个人拿着很多张纸,每张纸记录着很多笔历史交易信息。第一个人拿起笔签完后递给第二个人,第二个人也做出了相同的选择,如果大多数人做出了相同的选择,即都签署了同一张纸那么每一个参与者会获得1美元,当你做出和绝大多数人不同的选择时,那么你的房子就会着火!


然后他补充道,这可能是一个比较正确的激励措施去保证大家都能签署正确的纸张!


 那么什么是时间 "难度炸弹"?

 如何激励矿工从 PoW 转向 PoS?

矿工花费了大量的金钱购买设备用于挖矿,然而随着PoS 的到来,大量的设备变得一文不值;想象一下,花费大量金钱搭建的超级复杂的矿池突然变得毫无用处!


如果真的不能阻止矿工停留在 PoW 上继续挖矿,那将会创建三种以太坊币:ETC、ETH-PoW、ETH-PoS,这对以太坊绝对是个噩梦!因为那不仅会降低以太坊的可信度和经济价值,还会稀释整个系统的哈希值比例,使得它更容易被黑客攻击!


为了确保以太坊的矿工能加入到新链条中来,开发团队引入了"难度炸弹"机制。"难度炸弹" 是在2015年9月7日推出的,想要了解"难度炸弹"是如何工作的,首先我们需要了解什么是"难度" 和挖矿。


什么是 "难度" 以及它是如何工作的?

"难度" 这一概念起源于比特币,比特币在最初的时候,由于挖矿的人比较少,挖矿显得比较简单,任何人只要使用他们的电脑都可以从事挖矿活动。随着比特币越来越受欢迎,矿工的数量也越来越多,为了防止过早的把所有的比特币都挖完,中本聪在比特币中一开始就引入了难度系统。


难度系统的工作原理大致如下:矿工们使用他们的电脑算力进行解密,解密的过程就是随机地往已经进行过哈希运算的区块上添加一个随机字符串(也叫随机数),然后对整个字符串再进行一次哈希运算。如果结果数小于某个特定的数值,则认为解密正确,并且会将这个新的区块添加到链上。然而找到这个随机数通常是及其困难和随机的,这正是挖矿的核心所在。


这一过程也可以简明扼要的总结如下:


获取新块内容的哈希值

将随机字符串添加到区块上

对新的字符串再次哈希运算

然后将最终的哈希与难度系数进行比较,是否小于等于难度系数。

如果不是,则改变随机数重新进行运算

如果是,则将新的区块添加到链上并对全网进行广播

相应的矿工将获得新区块的奖励


比特币的难度每 2016 个区块调整一次,难度系数与出块的速度成正比,比特币每 10 分钟产生一个新的区块。如果出块时间低于 10 分钟,则难度系数增加;否则难度系数减少,比特币就是通过调整难度系数来保证出块的时间能始终保持在10分钟左右。


以上就是比特币挖矿的工作机制,以太坊也采用了相同的协议。


那么以太坊的"难度炸弹"又将如何呢?

难度炸弹将会使难度系数呈指数增加以至于让挖矿变得几乎不可能。就像我们之前说的,难度系数会根据出块的速度进行调整,它最终的结果就是使出块时间始终稳定在15秒。


而"难度炸弹"在于它会使难度系数呈指数增加,从而出块的时间也会显著增加,直到最后几乎挖不出区块,我们把这一状态称为“以太坊冰河期”(Ethereum Ice Age),到那时,矿工除了转向新的PoS协议将别无选择。


难度炸弹会在“大都会”时期引爆吗?

难度炸弹原本计划在2017年年底引爆,现在看来似乎比原计划推迟了一年半,然而,随着大都会的到来,开发团队将通过其它两个措施使其平稳过渡到 PoS。即:


部署之前提到的 Casper 算法,每 100 个区块将有一个采用 PoS 协议挖出


每个区块的奖励由之前的 5 个 ETH 减少为3个


所有的这些措施都是为了在以太坊的最后一个阶段"宁静"(Serenity)到来之前所有的节点都能部署好 PoS 协议并且消除之前遇到的问题。


零知识证


何谓"零知识证明"?

"零知识证明"是由 S.Goldwasser、S.Micali 及 C.Rackoff 在 20 世纪 80 年代初提出的。它指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。"零知识证明"实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。证明者向验证者证明并使其相信自己知道或拥有某一消息,但证明过程不能向验证者泄漏任何关于被证明消息的信息。大量事实证明,"零知识证明"在密码学中非常有用。如果能够将"零知识证明"用于验证,将可以有效解决许多问题。 "零知识证明"能够成立必须具备以下三个要素:


完整性:如果声明为真,那么一个诚实的验证者可以被诚实的证明者相信;

可靠性:如果声明为假,不排除有一定概率欺骗者可以说服诚实的验证者它是真的;

零知识:如果声明为真,那么验证者在证明过程中并不知道任何关于声明的消息;


"零知识证明"并不是数学意义上的证明,因为它存在小概率的误差,欺骗者有可能通过虚假陈述骗过证明者。换句话来说,"零知识证明"是概率证明而不是确定性证明。但是也存在有技术能将误差降低到可以忽略的值。


下面举两个例子说明零知识证明:


1)假设有一个房间只能用钥匙打开锁,其他任何方法都打不开。Alice 要向 Bob 证明自己拥有这个房间的钥匙,这时有2个方法: ① Alice 把钥匙出示给 Bob,Bob 用这把钥匙打开该房间的锁,从而证明 Alice 拥有该房间的正确的钥匙。② Bob 确定该房间内有某一物体,Alice 用自己拥有的钥匙打开该房间的门,然后把物体拿出来出示给 Bob,从而证明自己确实拥有该房间的钥匙。


后面的 ② 方法属于零知识证明。好处在于在整个证明的过程中,Bob 始终不能看到钥匙的样子,从而避免了钥匙的泄露。


2)这是一个很经典的例子:有一个缺口的环形长廊,出口和入口距离非常近(在目距之内),但走廊中间某处有一道只能用钥匙打开的门,Alice 要向 Bob 证明自己拥有该门的钥匙。采用零知识证明,则Bob 看着 Alice 从入口进入走廊,然后又从出口走出走廊,这时Bob没有得到任何关于这个钥匙的信息,但是完全可以证明Alice拥有钥匙。


上面这两个例子都是零知识证明在现实世界的"运作",那么我们如何通过 ZK-Snarks 实现零知识证明在区块链中的应用呢?


zk-Snarks如何工作?


zk-Snarks由3种算法组成:G、P、V。


G是一个密钥生成器,需要通过生成随机变量 L(必须保证任何情况下不能泄露)和程序C。然后生成两个公钥——证明公钥 Pk 和验证公钥 Vk ,这两个公钥都是公开的,任何人都可以查看。


P是证明者,需要输入三个参数,即证明公钥 Pk、公开的随机输入散列值 x 以及需要证明的隐私声明 w 。P 算法生成证明 prf ,函数表达为:prf = P ( Pk , x ,w )


V 作为验证者将会返回一个布尔类型的结果,即 true 或者 false 。V 将验证公钥 Vk 、P 中的随机输入散列值 x 以及证明 prf 作为输入参数进行验证,即 V (Vk , x , prf)。如果证明者正确,返回true ,否则返回 false 。


由以上G、P、V三者的关系可以看出,随机变量 L 至关重要,必须保密。因为任何人都可以用它来生成假的证明,这些假的证明也能返回 true ,而不管证明者是否拥有隐私声明 w 的知识。


下面让我们继续回到我们的老朋友 Alice 和 Bob 的身上,Alice 是证明者,Bob 是验证者。


Bob 作为验证者第一件事就是要使用 G 生成证明公钥 Pk 和验证公钥 Vk ,为此他需要生成随机变量 L,正如上面提到的,Bob对 L 必须非常小心,他不能让 Alice 知道 L 的价值以防 Alice制造假的证明。


既然Bob生成了两个公钥,Alice 需要生成证明 prf 来证明声明的有效性。她将使用证明算法P生成证明,来证明她知道隐私声明 w 的哈希值为 x 。接下来 Alice 将把这些证明参数交给最终运行ZK-Snarks验证算法的 Bob 。Bob 将会使用验证算法 V (Vk , x , prf)来验证结果,如果返回 true,则 Alice 很真诚,确实知道隐私声明 w 是什么。如果返回 false ,则 Alice 在说谎她知道 w 是什么。


往期文章推荐

区块链技术及应用价值报告

平行区块链之数据篇:数字签名

平行区块链之数据篇:Merkle Patricia Tree详解

平行区块链之共识篇:PoS共识算法探讨

平行区块链之共识篇:分布式一致性与Raft共识协议

平行区块链之共识篇:RPCA算法

平行区块链之共识篇:PBFT算法

平行区块链之共识篇:Paxos机制

平行区块链之共识篇:Casper共识协议

平行区块链之共识篇:PoW

平行区块链Parallel Blockchain

注:本文转载自公众号“火币网”(火币微信:huobicom),原文作者:imToken 郭辉,点击阅读原文可跳转至原文链接。

扫描上方二维码,关注公众号“平行区块链”,获取更多精彩内容!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存