Nervos吕国宁:2019聊PoW ,我们在聊什么?

作者:admin   发布时间:2019-03-23 10:52   浏览:
正文

比特币已经诞生十年了。在加密货币的领域里,PoW被使用也已经有十年之久。然而,随着越来越多的币种转向PoS、DPoS等共识机制,PoW是否已经走到了一个转折点?2019,关于PoW,我们又在聊什么?关于这些问题,碳链价值很荣幸邀请到Nervos的吕国宁先生,为我们带来他的分享。以下为演讲全文:

演讲者:Nervos 联合创始人兼COO 吕国宁

文字整理:Cinderella、唐晗

大家好,我是 Nervos 基金会的联合创始人 Daniel,非常高兴能有机会和大家一起讨论 PoW。感谢碳链价值的邀请,也非常高兴第一次跟 EOS 的孤矢和 Conflux 的杨光博士见面。

关于今天的主题,唐晗原本是希望我和大家聊一聊 PoS。说实话,大概在几年以前,我是一个百分之百的以太坊拥护者。我曾经建立了国内第一个以太坊社区 EthFans,做过国内到目前依然比较流行的以太坊钱包 imToken,做过以太坊全世界第二大矿池星火矿池,我也非常欣赏 Vitalik 和他在 PoS 这个领域所做出的努力和成果。

之后,当我们开始做 Nervos 项目之后,我们对区块链未来的整体大局观有了一些新的想法,我们会发现 PoS 并不适合我们自己,后来我们还是选择走 PoW 这条路。所以我就和唐晗说能否更改一下主题,我来和大家聊一聊 PoW。

在中本聪发布比特币白皮书至今的十年里,我们需要如何重新审视 PoW?站在 2019 年的这个时间点,又有哪些新奇的东西需要了解?那么接下来,就让我们来聊一聊「2019 聊 PoW 我们在聊什么?」。

01

Nakamoto Consensus 的优点

Nakamoto Consensus 是我们对比特币 PoW 算法的统称,虽然它是基于工作量证明的算法,但是我们还是习惯叫它 Nakamoto Consensus,或者 NC 共识算法,简称 NC。

简单

NC 有很多特点,最大的特点就是简单,它的简单基于这几个原则:首先,NC 是基于最长链的原则达成共识。所有的共识节点都要在第一时间争取成为最长链上的最新区块,或者跟随最新的区块。其次,NC 设定了一套激励规则,以及围绕激励原则,设计了一套增发原则。这三个原则构成了 Nakamoto Consensus 简单的特点。

安全

NC 是非常安全的共识算法。简单是安全的朋友,复杂是安全的敌人。NC 的安全性来自于简单,它已经在生产环境中被长期验证过的。另外,针对 NC 的攻击方式和攻击手段都是已知的,这意味着我们可以找到应对这些攻击方式的策略。

公平

NC 很公平,只要有算力,就可以竞争出块。最长链是绝大多数人的投票结果,凝聚着绝大多数的算力,而且投票的结果相对公平。

通用性

NC 有很好的通用性。基于 Nakamoto Consensus 的 PoW 共识算法也被用在其他不同的平台上,比如 Nervos 和 Conflux。基于 Nakamoto Consensus 的共识算法可以支持分片、链外二层扩容,还可以支持在智能合约平台上做更好的扩展,所以它有很好的通用性。

优化

比特币网络一直在优化。实现比特币 Nakamoto Consensus 背后的公司叫 Blockstream,这家公司是比特币核心开发团队背后的母公司。他们对于 PoW 共识协议,以及算法安全、加密学安全、网络安全性的研究都做得非常好,是整个加密生态的头部团队。在过去的十多年里,这群人一直在维护着比特币网络的客户端,做了很多努力,以不断优化比特币的网络效率、共识效率和同步效率。直到今天,我们还是能看到他们不断把一些很新的,能够提升效率的方法,应用到 Nakamoto Consensus 中去。在未来,还将会有更好的方案,被陆续添加到 Nakamoto Consensus 中去。

举个例子,2016 年 Compact Block Relay(致密区块)被引入到比特币 NC 协议中。致密区块解决了一个问题,就是它可以在不同的网络条件下适配不同的策略,从而最大化降低对网络带宽的依赖。这样一来,在网络带宽较差的情况下,NC 也能提升它的储存量和同步效率,把同步延迟率降到更低。这就是 NC 不断优化的结果。

02

为什么 Bitcoin 每 10 分钟出块?

Nakamoto Consensus 有一个特点,就是要选择一个固定的出块时间,根据网络中的算力大小,来调整出块难度。假设网络中的算力增加了一倍,出块时间还是维持在十分钟,那么对应的出块难度也要相应增加。当然,出块时间并不是精确的十分钟,而是平均出块时间为十分钟。调整难度是为了让出块时间维持在十分钟这个平均数值上。

我们回到中本聪的白皮书,以「十分钟」这个关键词去看那一篇创世论文,我们发现其中只有一句话提到了「十分钟」这个词。中本聪的原话说的是:如果一个区块里不包含交易,只包含交易头,大概会有 80 个字节。我们假设一个区块链上,平均每十分钟产生一个区块,那么每一年产生的数据是 4.2MB(80 bytes * 6 * 24 * 365 = 4.2MB)。2008 年 PC 系统通常的内存容量为 2GB,按照摩尔定律的预言,将全部的区块头存储于内存之中不会是个问题。

这是在中本聪的论文中唯一提到「十分钟」的地方。后来,中本聪把十分钟作为了比特币系统出块时间的定量。在比特币网络中,出块之后,矿工要将挖出来的块广播给其它节点,广播同步的时间越长,网络的同步就会越充分。如果我们把十分钟变成五分钟,或者三分钟、两分钟,都会使得网络的叔块率增加,这会让网络变的不稳定。更多可能出现的情况是,那些网络不太优质的诚实节点,没有在最新的区块上挖矿,而可能在更老的区块上持续工作。这样会让这些诚实节点的算力,没有办法为网络的总安全性做出贡献。所以在之后的分析中我们得出结论,「十分钟」是一个可以接受的合理值。

03

同为 PoW 共识,为什么以太坊可以做到 15 秒出块?

在比特币之后,有一个后起之秀的智能合约平台叫以太坊。以太坊和比特币不一样,虽然采用的也是基于 PoW 的共识算法,但是它可以把出块时间从十分钟变成 15 秒,这听起来是不是一个巨大的提升?

从十分钟到 15 秒,我们发出交易之后的首次区块确认时间变短,这会给我们在体验上带来巨大的飞跃。另外,不但它的安全性提高了,它的 TPS 也有提高,虽然提高的数值没有达到一个数量级,但这也是一种优化。

2013 年,来自希伯来大学的两位长期专注于共识算法安全性以及 DAG 研究的分布式系统专家,在一篇 Paper 中提出了 Ghost 协议(Greedy Heaviest-Observed Sub-Tree)。Ghost 协议是用最大子树的原则代替最长链原则。它鼓励所有的出块节点的都去分叉竞争,并给叔伯块一部分奖励,这个模式在保证安全性的前提下,可以大幅降低首次出块时间。2013 年首次提出并测算过,Ghost 协议如果在比特币上的出块时间大概能做到 12.6 秒,在第一版的以太坊上,大致是在 17 秒。

在这个协议里,虽然会有很多分叉链出现,但是协议也会给分叉链一些奖励。如果有人要攻击网络,那么攻击者不光是要伪造出一个新块,同时也要挖出新块的若干子块,并且生成这些若干子块的总的重量。这无形当中增加了 51% 攻击的难度,确保了安全性。但其实以太坊并不是完整实现了 Ghost 协议,而是实现了一个 Ghost 协议的简化版,简化到它只对叔伯块作不超过 75% 的奖励,并依然使用最长链原则。但即使是这样,经过过去几年的验证,以太坊的网络依然是相对比较安全的。

04

什么是算力炸弹?算力炸弹产生过什么影响?

算力炸弹是以太坊共识算法中的一部分。算力炸弹意味着什么?我们来看下面这张图。这张图表示的是算力炸弹对主网出块时间的影响,大家可以看到,算力炸弹最初开始产生影响的时间是 2017 年 4 月,阶梯图的每一个间隔大概是 10 万个块。

以太坊网络是根据过去若干个块的平均出块时间,来调整下一个块的出块难度。同时,每隔 10 万个块,网络会在总的算力背后增加一个难度,每一次增加的难度成指数级上升。所以大家可以看到难度增长的落差越来越高。2017 年 10 月拜占庭分叉的前期,以太坊的出块时间大概是 26 秒,比原始的 15 秒增加了十秒左右,当时的网络非常慢。

为什么会存在算力炸弹?这其实是为了解决去中心化网络当中,大家达成共识的难度问题。我们假设未来需要解决某个问题,但是我们知道在社区里讨论不出什么结果,所以我们必须采用一种极端的方式,在某一个时间让大家都看到这个「棺材」,去倒逼社区达成共识。所以当大家都知道算力炸弹存在的时候,大家会倾向于尽快的达成或者接受一个愿意达成的共识。

比如说,在君士坦丁堡分叉之前,算力炸弹就开始起作用了。以太坊官方团队决定要把 PoS 和 Sharding 的项目推延一年,所以必须要进行一次分叉。这次分叉要把算力炸弹重置归零,让它一年以后再生效。算力炸弹最大的风险就是到了时间,方案还没准备好,只能重置,这个时候算力炸弹的合理性就会受到质疑。

上图有一个很有趣的现象,就是在产生了一个波动之后,会慢慢开始回归平均,接着再产生一个波动,又开始回归平均。这是为什么呢?大家看一下底下的时间,2017 年 4 月到 2017 年 7 月发生了什么事?在这段时间内,以太坊二级市场的价格一直在上涨,这导致大量的增量矿工购买大量的显卡,带着大量的算力冲入到挖矿当中。由于大量算力的加入,对冲掉了算力炸弹带来的对出块时间延长的影响,所以算力会回归平均。也就是说,原本算力炸弹会在 2017 年 4 月对网络产生巨大影响,由于二级市场所带来的经济激励,硬是让矿工把算力炸弹的爆发推延到了 10 月。这让我见识到了市场经济的强大。

05

Grin 的 PoW 共识算法有什么特点?

最近有一个项目叫 Grin,特别流行,它是 MimbleWimble 协议的实现。Grin 用的共识算法名字叫 Cuckoo Cycle。Cuckoo Cycle 简单说就是两个很长的哈希表,每个表都有很多节点,以一种伪随机的方式在这两个哈希表当中连上很多根线。

哈希表 1 只能和哈希表 2 连接,哈希表 2 只能和哈希表 1 连接,表 1 的元素之间不能连接,表 2 的元素之间也不能连接。

Puzzle 本身是要找到一个长度正好为 42 的圈,就是表 1 的 A 节点连到表 2 的 B 节点,表 2 的 B 节点连到表 1 的 C 节点,这样连来连去,找出一个长度为 42 的。

这个设计最初的目的是让这个 Puzzle 本身占用尽量多的内存空间后才能开始解。

因为想要知道跟某个表 2 节点连接的有哪些表 1 的点,最好的办法就是先把所有的边都算下来,以某种数据结构保存,接着在这个数据结构里搜索,这个解法非常依赖于内存。所以它不是一个计算密集型的共识算法,而是内存或者说是带宽密集型的共识算法。

Grin 设计了两套算法,一种是 ASIC Friendly,在挖矿初期只占规模的 10%,另一种是抗 ASIC。随后通过两年的时间,逐渐过渡到全部切换成 ASIC Friendly。为什么要这样做?首先,在经济利益足够大的情况下,使用 ASIC 矿机对于 PoW 算法来说是不可避免的。但是如果一个新的网络出现,过快的引入 ASIC 矿机,会导致网络的算力过快的集中。这对于自由参与的矿工来说非常不友好。虽然我们没有办法最终避免这种情况的发生,但是我们可以推延它的发生,这是一种大家比较能接受的方式。

具体的实现可以去听我们的第一档中文区块链技术播客「Fork It」,里面详细讲解了 MimbleWimble 协议和 Grin 的实现。

06

什么是 ProgPow?谁在推 ProgPow?

在君士坦丁堡分叉期间,以太坊社区突然跳出来一股力量,建议使用一种新的共识算法:ProgPoW。现在社区里主流的 PoW 挖矿使用的是 GPU,只要是在有经济利益的情况下,会慢慢的出现 ASIC 矿机。ASIC 矿机不可避免的会带来某些中心化的问题,因为它的参与门槛实在太高。那么社区里就会有人建议,我们能不能把设计共识算法的思路改一改,不要只是根据 CPU、计算密集型、某种哈希验证、计算,或者是基于某种资源的依赖来设计共识算法。我们试试从硬件的角度去设计共识算法。

什么意思呢?当我们买了一块显卡,用显卡的 GPU 做 Ethash(以太坊挖矿 PoW 算法)时,事实上我们只使用了显卡上的一部分功能。显卡上绝大多数的辅助功能,以及一些只有 GPU 高级用户才会去使用的功能,在挖矿时基本用不上。所以,我们能不能设计出一套算法,让显卡上的所有硬件功能,都变成共识算法中的一部分,贡献到 GPU 产生的算力中。基于这个思路,社区想要设计出一套算法,能把 ATI 显卡或者 NVIDIA 显卡的算力,跟显卡本身的硬件的组成和功能对齐。

这种算法带来了一个额外的作用,就是它极大地消弱了 ASIC 矿机所带来的性能优势。为什么呢?如果 ASIC 矿机要去做出一个 ProgPoW 适配的矿机,那么 ASIC 矿机本身的结构会非常接近于一个 GPU,那么它相对于一个 GPU 的优势就不是那么大。社区里有很多开发者在讨论这个问题,他们对网络的去中心化非常在意。

去中心化对于一个区块项目来说有多重要?它是一个可选项,还是必选项?去中心化就意味着安全吗?

刚刚我还跟杨光博士聊到说,有一个没有被学术论证的「不可能三角」理论,通常用来解释为什么一条链的共识协议设计是不可能三者兼得的。也就是说,我们往往很难设计出一个协议,既能保证安全性,又能保证去中心化,还能保证可拓展性。从这个角度来看,去中心化和安全是两个不同的东西。

去中心化意味着什么?意味着网络的反审查特性。反审查意味着什么?反审查意味着我们可以在不依赖第三方的情况下,依然能处理、验证交易。

我们拿比特币来举例,比特币的出块时间是十分钟,出块大小是一兆,发展到今天,比特币的一个全节点有多大容量?大概是 400G。在今天,一块 400G 的硬盘是相对便宜的。也就是说,如果我们想要去承载一个比特币的全节点,这个成本绝大多数人掏得起。这个「掏得起」的成本是所谓的去中心化或者反审查能力的非常重要的一件事情,它降低了全节点的加入门槛。假设在未来,比特币网络换成了一个可能存在的更好的共识算法,或者说它实现了分片,把性能提升了一百倍等等,接着再经历五年到十年的发展,我们没办法保证那个时候比特币的一个全节点所要占用的硬盘空间,是否还是一个普通人能够负担的起的。

所以我们现在都在看如何解决扩容性,但是解决了扩容问题之后,我们会遇到一个更麻烦的存储爆炸的问题,这又是另外一个可以用 40 分钟和大家掰扯清楚的话题。但是全节点运营成本的问题直接影响到了区块链的去中心化和抗审查能力,一旦它到了我们承担不起的时候,就不可避免的需要借助第三方来提供支持。当一个网络只能依赖于第三方运转时,那么这个网络可能就不再具备被信任的特性。

以上就是 ProgPoW 的两个特点,一个是基于 Ethash 并提高了商用 GPU 的利用率,另一个是它让 ASIC 矿机对于 GPU 的优势不大。

我在研究 ProgPoW 时,看到一个网站叫「progpowcarbonvote.com」。这是最近一段时间在以太坊社区发起的投票,大家可以看到,93% 的人投了赞成票,6% 的人投了反对票。但是以太坊社区依然决定在这一次的君士坦丁堡升级当中,不会直接引入 ProgPoW,因为根据现在的算力规模和趋势来看,ProgPoW 还没有成为一个需要解决的核心问题。

看到这个网站之后,我感慨万千,因为我曾经也做过一个网站,并且用这个网站帮助当时以太坊社区的 The DAO 事件做过一次分叉投票。我点进这个网站之后发现,它是在我原来做的那个网站的开源版本上做的二次开发。

07

PoS 一定优于 PoW 么?

PoS 一定优于 PoW 么?我的答案是不一定,这要看你追求的是什么?

如果你追求的是安全性,并且是被工业界认证过的安全性,那么 PoW 用过去的十年时间向你证明,它是一个非常安全的系统。它所有的缺点都已知,而且还存在一个比较不错的优化空间。同时,如果有办法把 PoW 安全性的价值放大,比方说通过二层网络去解决它的扩展性问题,让 PoW 的安全性为二层网络保驾护航,这样的话 PoW 在当下是一个非常好的选择,尤其适合创业公司。

目前针对 PoS 的理论研究已经非常前沿,但是在生产实践的环境里,PoS 还没有得到充分的验证,并且 PoS 本身实现的复杂度是比较高的。对于工程师来说,在工程层面上,复杂永远是安全的敌人。

所以在 PoS 和 PoW 谁更安全这个问题上,我会有一个论断:我们不应该设计一个太复杂、太难分析的协议,我们应该在协议的设计阶段,就尽可能的设计出比较容易分析的协议,让协议尽可能简单。因为共识协议的本质是保证在分布系统中达成安全的共识,所以如果要想做到安全,那么非常需要去对简单性有极大的追求。

共识算法和经济激励的讨论

今天我所提到的共识算法都是 2019 年我们在关注的内容。很显然,在共识算法上我们需要解决协议的安全性问题,PoW 的协议安全性是通过矿工提供算力来保障的。矿工之所以愿意提供算力,是依赖于他能得到的经济激励。我们在讨论共识算法时,可以单独讨论算法本身,但是站在一个更高的角度上看,我们更应该把共识算法和经济激励相结合。

中本聪在提出论文之初,是想给这个世界带来一个非常好的电子现金系统。但是十年过去了,比特币真的在支付这件事上做得很成功吗?当然没有,但是比特币在增值保值这件事情上做的非常成功,当我们把它当成一种增值保值的手段时,我们最应该在乎的是它的安全性。

比特币用过去的十年向我们证明,它是一个非常安全的系统。那么在未来的十年中,比特币网络的经济激励模型,还能保证它足够的安全吗?这是最近一段时间媒体在争论的话题。基本观点是,现在比特币网络矿工的主要经济激励方式是出块奖励,这个激励每四年减半,到最后趋向于零,那个时候,矿工的所有收入都来自交易手续费。那么,十年以后,比特币网络能单靠交易手续费来满足对矿工的经济激励吗?

这个问题在今天来看,似乎离我们有点遥远,但它确实存在。这个问题会涉及到很多加密经济学中非常有趣的东西,我们也看到在这个世界上有很多经济学家提出了更好的费率模型,像尊敬的姚教授,他针对这些新的费率模型做了定量分析,这里展开的话有趣的话题实在是太多了。我有一个论断,如果我们持续研究这个话题,在 30 年之后,一定会有人因为在加密经济学上做出杰出的贡献,而获得诺贝尔经济学奖,我希望能看到这一天。谢谢大家。

< END >

热点文章
近期更新
友情链接

Powered by V6彩票 @2018 RSS地图 html地图