专栏名称: 哔哔News
哔哔是一家致力于做人人都能看懂的区块链资讯的行业媒体。哔哔,看见未来的另一种可能。
目录
相关文章推荐
人民日报  ·  2.5亿中国人拥抱AI意味着什么 ·  2 天前  
新华社  ·  退钱了!明起预约 ·  2 天前  
51好读  ›  专栏  ›  哔哔News

Roy Li在车库咖啡装了什么B?

哔哔News  · 公众号  ·  · 2018-06-14 21:43

正文


Roy  Li,Ruff Chain创始人,同时,他也是三点钟发起人之一。

他是著名的黑客,曾是北美诺基亚塞班系统最年轻的研发总监,现在是物联网专家、复旦大学硕士生导师。但他绝不是技术宅男,活跃于知乎,拥有几十万粉丝,被封为“知乎大神”。他活跃于各种社区,在各种社群和人互怼。

区块链到底什么技术最值钱。他认为密码学没那么重要,性能比共识算法更重要,区块链最重要的还是工程能力,未来两三年将是抢夺工程师最关键的时间。

本文整理自Roy Li 6月10日哔哔News全球行北京站车库咖啡的分享。

前提——没有经济驱动的区块链是扯淡

Ropsten, Kovan,Rinkeby是以太坊的三个测试网络的名字。如果你想部署智能合约,选择测试网络的时候,必须在这三个中选一个。

morden是以太坊最早的测试网络。morden有两个主流的客户端,一个是Geth,另一个是Parity。 由于这两个客户端存在兼容性问题,导致morden同步块的时间非常长。

Ropsten是在morden基础上修改的兼容版本较强的测试网络。Ropsten运行一段时间之后, 又一个问题出现了——以太坊测试网络中的以太币没有价值,它本质上是一个没有经济驱动的网络。

另外,以太坊的挖矿机制是PoW, 由于以太币不值钱所以没有矿工挖矿,导致整个网络的算力很低,攻击网络的成本也变得非常低廉。当时矿工打包一个块要四五百万Gas,当遭到恶意攻击之后,打包一个块就需要90亿Gas,因此以太坊测试网络瞬间堵死了。

Kovan网络是Parity提出的。Parity是以太坊黄皮书作者Gavin Wood用Rust语言写的客户端,但Rust语言实现的性能不如GO语言。Parity的创始团队想了很久,决定不采用PoW,而是采用PoA(proof ofauthority),即从社区里选取几个牛逼的人公平公正地验证以太坊测试网络。虽然这是一个相对中心化的方式,但只要被选取的人不作恶,以太坊网络也会顺畅地运行,这个网络叫做Kovan。

但Parity做的是比较利己的事情,只允许用户使用Parity的客户端,不允许使用Geth的客户端。 所以Geth团队做了一个兼容的版本,两个客户端都可以使用,于是就出现了Rinkeby。

这个故事告诉我们,如果区块链没有经济驱动,所谓的社区治理、去中心化等等都将是扯淡!

共识——共识没有好坏之分,要看需求不同

现在各种社群里都有人互怼。有人说,EOS的DPoS机制不靠谱、不民主。DPoS的人回应,PoW矿池一样是中心化的。

其实,共识机制的好坏目前没法下定论。

我们在选择共识机制的时候,毫无疑问会陷入CAP困境,即一致性(consistency)、可用性(availability)、分区容忍性(partition tolerance)三者不能兼得的问题。因此,我们不能脱离应用场景寻找适合的共识机制。

EOS为什么选择21个节点呢?超级节点数量为什么不能再多了呢? 因为它们采用的是PDBFT(拜占庭容错)共识方式。

它的好处是能容忍的作恶节点的数量比较多。如果有一半的节点被攻击,但只要还有三分之一的节点是善意的,网络就不会出现大问题。 坏处是它的性能和节点数的平方成反比,而消耗的资源和节点数的平方成正比, 所以当节点数为100时,EOS基本上就跑不动了。


从性能角度来说,EOS数量越少越好,不容易因为出块太快导致硬分叉等问题出现。但这也导致了它的扩展性差,不可能像量子链一样有几千个节点。

最近,很多群在互怼随机数问题。比特币是全网一起做数学题,谁做得速度最快就由谁来记账。EOS则是选取一批人来记账。PoS是持币多的人来记账。而随机数是用一个筛子扔,扔到哪个数字,就由谁来负责记账。


很多项目在这些机制的基础之上再运用随机数来决定谁来打包、记账、广播等。 而随机数是随机从社区里选取一个人来打包、记账以及验证转账的合法性,作恶成本其实非常低。因为是被随机选出来的,能黑一笔钱为什么不黑呢?

而PoW机制,是通过辛苦劳动才换来的记账权,作恶成本就很高,而且这个成本是沉没成本。如果是PoS机制,节点自己持有很多的币,所以持币者不会作恶。PoS机制的沉没成本相比PoW的买矿机投入电力的成本来说是后置的。沉没成本导致参与者没有理由去破坏网络,因为它本身的回报已经很高了。

可是以太坊用PoW的方式,现在只能打包20笔交易。因此,为了达到VISA级别(1500~2000/s的交易量),我们只能选择比较中心化的方式——PoS或者DPoS。

因此,共识没有好坏之分,要看需求的不同。大家知道PoW是一个更安全更好的机制,因此我们在考虑如何在不牺牲安全性的前提下提升性能、优化现有的网络。

性能——性能比共识算法还要重要

以太坊有没有可能一秒钟达到200笔交易,甚至像Visa达到每秒2000笔交易?

这个问题我们一直在思考,如何不通过破坏现有架构,不试图中心化,不试图拼命扩容或者用中心化或牺牲安全性的方式提升性能,这是整个行业中都在探索的。

而且,我个人认为,这个问题比复杂的共识算法还要重要,我一直秉持这个观点。

Sharding(分片)的意思是我不需要让全网共识了,而是我刚才进行了一笔100元的转账,我可以将现在的人分成十个小组,每个小组验证一笔交易,最后十个小组把验证的交易全部报上来,我一次性打包掉十笔交易,这是分片的做法。

分片喊得最凶的是zilliqa,zilliqa的分片开了一个好头,但是分片有一个问题。

基于交易的分片相对比较简单,BTC、Qtum、BCH等等,我们称之为UTXO模式。它不存储账户的余额,只存储过往所有的交易。不同的人都在验证,最后一个人只需要验证所有人验证的时候有没有发生余额不足的问题。如果没有,谁先交易都是没有问题的。

最怕的是我给你转100元,给他再转200元,后来发现我给你转100元以后,没有余额再转200元,这是最容易发生的冲突,在UTXO模式下也比较好解决。

但这个问题在以太坊的智能合约里,会变得非常麻烦,因为以太坊的智能合约存在执行先后的问题。在以太坊上转账,需要先完成一笔交易再进行下一笔交易。在这种情况下,我不能将它分成十个片区,最后同时执行。这就造成我们在并行执行计算方面,存在难度。

现在市场上有一些做基础设施的项目在简化它。比如,我给你转100元,你再将100元转给其他人,只要这两件事被原子级打包(原子级打包就是指要么两个一起打包,要么两个都不打包。)如果能做到这一点,那么在打包的过程中就可以做一个清算,我给你转100元,你再将100元转给他,整个过程被同步打包,并且按照顺序记录下来。

我们如何提升单个节点或者多个节点集群的性能,也就是打包区块的效率,这一点BM也在思考。 EOS白皮书里有一段非常有意思。EOS的矿工是超级节点,运算能力很强。每次当几百笔交易进来,需要打包成一个区块的时候,这些超级节点在收到智能合约广播的时候,会把这些合约重新梳理一遍。让矿工来决定,至于如何整理,应该是让它尽可能以并行的方式去打包,如果整理得好,会给与矿工更多的奖励。

EOS提出这一点很好,但目前EOS超级节点们并不知道如何处理它,他们不知道如何打包能让合约更好地并行执行 。我也问了行业内很多的人,最后总结的最好的方式是尽可能地将所有需要打包的交易先分散,然后再合并。如果发现没有办法合并,继续打回重来,重新执行一遍。

无论是EOS,还是ETH的去中心化(P2P)的网络里,只有达到一个接近于中心化的某种零界点,链上才可以运行大量的应用,否则一个以太猫游戏就把以太坊堵死了,大家没法在链上做更多的应用。

强化基础设施

1.Atomicity,原子级的操作

原子级的操作不可分割,但是真的不可分割吗? 之前说过100元转账问题,只有某账户被转进100元时,才能转给别人100元。这件事能不能变成,当知道有100元需要被打包的时候,网络就做一个条件数据,让转进来100元和转出100元同时被打包。本来是存在先后顺序的,但是原子级操作可以让两个操作一起执行,或者都不执行。

2.Storage,存储

存储现在也是一个很大的问题。以太坊容量当前已经差不多到1T了。 现在主流的区块链用的数据库LabelDB,LabelDB的特点是顺序读写能力最强,而区块链里很多东西都是顺序读写,因此,速度会比较快。

如果用哪怕SCC的硬盘去同步以太坊的状态,需要让每个以太坊节点从以太坊的第一个区块开始一直同步到最后一个。但是如果硬盘的读写速度不够,或者使用的方式不够好,就会变成一直追赶以太坊的出块速度,这是以太坊网络经常发生的问题。

大家知道白皮书应该看哪里吗?看工程能力,看有没有可能让众节点同步的速度变快,能不能让节点打包记账的速度变快,或者执行合约的速度变快。

因此,我们面临的问题是,如何能更快地提升现有的读写速度。硬盘的读写速度是内存的千分之一,如何用一种方式更快地去读写?


在中心化的网络里,微博、微信的数据不是直接从服务器硬盘上读取的,如果从服务器硬盘上读,那就完蛋了!它们都是用的内存做缓存机制,新浪有七层的cache,腾讯有九层cache,最后才打在SD上。







请到「今天看啥」查看全文