去中心化交易能比VISA还快么?

论坛 期权论坛 期权     
计算广告   2019-10-27 12:59   3163   0

    洞中方一日,币圈已千年。最近没写文章,正要续上原来留的扣子,才发现虚拟货币价格正在崩塌。对此,我不免拍案称快:把那些无价值的空气币毁灭给人看,才是人间正道。在幸灾乐祸的情感支配下,我更有动力写今天的内容——毕竟,在一片哀鸿声里,没人会以为这是一篇镰刀文了。


    上文书(为什么说大多数ICO都是诈骗?)说到,现有的去中心化货币和交易系统,由于技术方案的限制,每秒交易次数(TPS)相当低,相应地,交易费用高企,无法支撑中小额、高频次的支付行为。


    今天我们要讨论的,是个纯粹的技术问题:去中心化交易的效率到底能不能大幅提高?至于其商业价值,我的观点是:短期来看,没有想象的大;长期来看,又比想象的大得多。诸位可能无法想象:在本世纪初,基本没有哪个教授声称自己是做人工智能的,那就跟承认自己是骗子差不多。


    本文的核心内容,来自于上文提到的王成(W)伪博士,加个“伪”字,因为他读的数论和分布式计算两个博士都退学了。王成有项很重要的工作——《线性时间复杂度的拜占庭算法》,虽然与本文关系不大,感兴趣的朋友可以点击文末的“阅读原文”了解。正是在两年多前,他在拜访V神时,了解到以太坊面临的困境和正在进行的分片项目,才顿生兴趣开始研究去中心化交易的速度问题。



    有人说,比特币的地位类似于数字黄金,支撑日常交易的能力无足轻重。其实,这是一种酸葡萄心理罢了,且不比微信支付和支付宝,加密货币至少应该能以VISA的效率支撑交易,再加持以去中心化的生产关系,才能有更多真正落地的应用产生,而不是像今天这样,与传销和诈骗紧密联系在一起。

    还是那句话,我们先不谈DPOS等半中心化方案,只讨论POW。要提升POW机制的交易速度,有两个方向:一是把交易处理尽量打散,由一个链上堆积变成多头并进;二是把账本分解开,变成可扩展(scalable)的。这两个概念前文已经说过,那么,都有些什么新的技术方案呢?

                           


    第一类方案,把账本结构由链变成了有向无环图(DAG)。这样一来,就有多个头部可以同时记录交易了,其代表项目是IOTA,账本结构如上图所示。IOTA没有区块的概念,每个交易都会引用过去的两条交易Hash,以证明这两条交易的合法性,并间接证明之前交易的合法性。不过,IOTA能够提高TPS的关键,还是在于图结构相比链结构而言,有多个头部,可以并行确认交易。


    话虽如此,IOTA有个致命问题:由于在选择头部的过程中,要用到效率很低的随机行走算法。为了实用,只好引入一个全局协调器(Coordinator),从快照算起以节省时间。您听出问题来了吧?这个快照是由中心节点选取确定的!这样一来,就现状而言,IOTA其实并不是一个去中心化系统!

    IOTA的理论和工程挑战还有很多。实际上,它实测的TPS也仅达到1000上下,再加上中心化的缺陷,看起来现实比理想要骨感得多。                                                                    


    另外一类方案,是把交易分到多条链上,典型的是以太坊的分片(shading)项目。它的思路非常简单直觉:把用户随机分成G个组,每个组单独有一条子链,组内的交易在这条子链上确认即可。显然,这可以提高一些交易速度。

    关键的问题是,跨组交易怎么解决?分片项目采用了利用主链进行周转的办法。不谈技术细节,我们从概念上描述一下此过程。如果第1组上的用户a要给第3组上的用户b发送十个币,可以分成如下两步:
1. 第1组的用户a告诉主链,我要给第3组的b用户发送十个币,此步骤相当于生成一张支票;
2. 主链告诉第3组的子链,有第1组的用户a向你这里的用户b发送了十个币,此过程相当于把支票提现。

    显然,概率上看,大多数交易都是跨组交易,因此都需要通过主链中转。这也就决定了,分片很难决定性地提高TPS。另外,在此方案中,每个节点都要保留公链和与自己相关的那条子链,需要存储和处理的账本没有变小,因此并不是一个scalable的方案。


    因为存在“1%攻击”,即100个分片有一个被攻击,就会影响整个系统,这样的分片方案会降低安全性。另外,还有个严重的问题:此方案目前看来无法跟以太坊图灵完备的智能合约体系相兼容,难道为了提速,先要自断手足么?目前,分片项目进展并不顺利。计划中的六个步骤,才进行到第一步,还只有一些实验性质的代码。可以说,距离美好的梦想还遥遥无期。

    是不是没办法了呢?其实,分片项目给了我们很大的启发,曙光就在前方了。我们想想此方案的症结:为什么跨链交易要回到主链上进行呢?能不能把这部分再分解呢?

    于是,我们想到这样一个方案:仍然把用户分成G组,但是在子链的设计上有所不同:将第i组到第j组的交易,单独放在一条子链L(i, j)上。这样一来,G组用户就对应了G^2条子链,如下图所示。



这样做有什么好处呢?从上图看,假设用户分成两个组,那么第0组的用户在发起交易时,只会依赖L(0,0)、L(0,1)、L(1,0)这三条链上的前序交易,与L(1,1)这条链是毫无关系的!如此一来,第0组的节点,就只需要保存3/4的子链就可以了。

    看起来省的不多?其实,在用户分成G组的情形下,每个节点只需要保留2G-1条子链就够了,也就是说,大约只需保留(2G1)/G^22/G的子链,这是相当可观的!比如说,我们把用户分成32个组,那么每个节点都只需要保存1/16的链就可以了,这就实现了scalable特性。

    什么,您问还有主链么?既然跨链交易都解决了,还要主链干什么用呢?




    这样的方案,没有了主链和子链的概念,交易被用户组结构组织起来的多条链并行处理,就像是百川到海不复还,我们给这样的账本结构起了个名字,叫“区块流”(BlockFlow),如上图所示。当然,具体实现上面的思路和结构,还有很多技术细节甚至巧妙的设计,本文不是白皮书,所以这些就不谈了。

    那么,从理论上分析,BlockFlow能支撑什么样的交易速度呢?我们借用上篇文章中的分析,带入上篇文章分析得到的那两个约束公式:
    T * P' * 4ms / T
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:10
帖子:2
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP