抹茶数字货币交易所 更快、更好、更强

公链前沿研究的三大视角

  在诞生10多年以来,区块链技术先是从比特币所描绘的点对点的电子现金系统扩展到了可编程资产的公共账本,然后又进一步发展出了以以太坊为代表的、可以执行图灵完备的运算并记录结果的「通用状态计算机」,如今又基于性能、功能与互联互通性等属性出现许多技术创新,多条公链也由此名声大噪。

  为了更深入地探讨那些重要且硬核的技术与思想难题,链捕手(ID:iqklbs)将邀请公链、交易所等一系列领域中具有相当建树的企业家、学者、技术大牛等,分享他们在自己专业领域经过大量实践的行业判断与思考,以帮助各位读者进一步加深对区块链的理解。

  近日,链捕手邀请到Conflux研究总监杨光博士撰稿,谈谈他作为公链行业一线从业者对公链行业发展状况的观点,并对当前公链行业新出现的技术解决方案进行梳理与评价,相信这些信息将对读者们深入了解公链行业最新技术动态大有裨益。

  自从中本聪于2009年1月发布比特币的代码以来,比特币和区块链技术的发展已经走过了十个年头。这十年间,比特币经历了密码朋克(Cypherpunk)和 Geek 们的玩具、黑市交易和洗钱的工具、投机炒作标的物等多个阶段,现在已经成为了一种政府和主流金融机构也不得不正视其价值的数字资产。

  在这十年间,区块链技术先是从比特币所描绘的点对点的电子现金系统扩展到了可编程资产的公共账本,然后又进一步发展出了以以太坊为代表的、可以执行图灵完备的运算并记录结果的「通用状态计算机」。

  区块链技术的意义和使用范围早已远远超出了比特币或者说电子支付系统——当我们在2019年谈起区块链技术的时候,更多的情况下是讨论如何以一种可信任的方式组织和处理信息。也正是因为如此,越来越多的人开始意识到区块链技术是一项可以与互联网技术相提并论的伟大发明。

  如今区块链的发展主要有两个大的分支:公有区块链(简称「公有链」或「公链」)继承了比特币的民主和去中心化的精神,采用了无准入许可的共识机制并通过区块奖励激励共识的维护者;联盟区块链(亦称「联盟链」)用区块链的思想重构了数据库,实现了在一个联盟的内部成员之间建立信任和共享信息的目的。

  实际上,至今仍有人认为「联盟链」只是披着区块链外壳的数据库而不是真正的区块链。本文接下来就从公链的角度来介绍一下当前区块链技术的发展。

  区块链在本质上是一个处理信息的系统。甚至曾有人提出一种比较夸张的说法:「比特币实际上就是一个有史以来最慢的分布式数据库。」诚然,将比特币或任何一条公链跟传统的分布式数据库比较都是有失公正的,因为区块链最大的价值在于提供(去中心化的)信任而非提供传统数据库已有的功能。

  但是另一方面,除了提供信任的共识机制以外,区块链的其他功能和组成部分与一个传统的日志式数据库都是非常类似的。例如比特币的转账和脚本功能和以太坊的智能合约都可以由一个中心化的数据库实现。因此,也就不难理解公链技术的发展方向了——在保证去中心化以提供同样程度的信任的前提下,把公链做成一个更好用的数据库。

  那么,对于一个数据库来说,我们都在乎它的哪些方面的?下面我们就从性能、功能、互联互通等方面介绍一下公链技术发展的方向和现状。

  公链的性能改进的方向可以简单概括为「更高、更快、更强」,分别表示更高的吞吐量,更快的确认速度,更强的安全性。

  对于更高吞吐量的追求是很多新的公链技术最重要的目的。比特币的共识吞吐量大约是每十分钟 1MB 数据,也即平均每十分钟全网可以对 1MB 的数据达成共识。按照每笔交易 500B 计算,这大约相当于每秒处理 3.5 笔交易,也即 3.5 tps。

  作为对比, Visa 的日常吞吐量大约是 2000 tps,峰值可以超过 5 万tps,支付宝处理交易的峰值则要超过 30 万tps。不难看出,比特币极低的吞吐量使得它不可能成为一种日常使用的支付手段,而且实际上近年来每次币价剧烈波动的时候比特币上的交易都会体验到明显的排队延迟。

  在提供吞吐量的扩容技术方面,又分为第一层技术和第二层技术。其中第一层技术主要是修改共识算法以提升区块链上共识数据的吞吐量,第二层技术则是通过对共识分层的方式在无需改变每条链的共识吞吐量的情况下提升整个系统的吞吐量。

  第一层扩容方案里最简单的改动方式就是直接修改参数,比如缩短出块间隔(莱特币等)或者增大区块尺寸(BCH 和 BSV 等),以求在同样的时间内对更多笔交易达成共识。

  例如比特币现在所使用的隔离见证技术实际上也是在变相地扩大区块尺寸,只不过因为扩大得非常有限,所以只能把比特币的吞吐量提高到每秒 7 笔左右。这样简单粗暴地改参数的直接副作用就是会降低系统的安全性,而这是我们非常不愿意看到的。

  为此,代理加速网络和致密区块(compact block)等提高区块广播速度的技术被开发出来用以平衡修改参数对系统安全性造成的负面影响。但是毕竟广播速度的上限严重依赖于网络基础设施的发展水平,所以通过改参数的方式能提高的吞吐量是非常有限的(在保证安全性的前提下)。

  另一种常见的第一层扩容方式是采用新的共识协议,以突破中本聪最初的设计的性能瓶颈。该方向吸引了很多学术界的大牛进行研究,例如以太坊的共识算法就采用了由以色列希伯来大学的 Yonatan Sompolinsky 和 Aviv Zohar 提出的GHOST (Greedy Heaviest Observed SubTree)协议而非中本聪的最长链规则,因此可以把出块间隔从 10 分钟缩短到 15 秒左右,吞吐量也提高到每秒 30 笔交易。

  其他比较知名的下一代共识协议还有图灵奖得主 Silvio Micali 和姚期智先生分别主导开发的 Algorand 和 Conflux:前者采用了 PoS 共识机制来避免分叉,可以达到大约 300 tps;后者以树图结构而非链式结构组织区块,实现了超过 3千 tps。目前 Algorand 和 Conflux 以及其他许许多多新的共识协议绝大部分仍处于理论论证和实验阶段,是区块链技术非常重要的发展方向。

  第二层扩容方案是对分片、侧链、多链等技术的统称。这类技术的核心思想是把共识参与者(矿工或 PoS 系统中的验证者)进行分组,每组分别处理不同的交易,通过分工合作的方式提高整个系统的吞吐量。

  目前,第二层扩容方案中的最具影响力的无疑是比特币的闪电网络,其他比较具代表性的包括以太坊的状态通道、 Sharding 和 Plasma 等提案。第二层扩容方案的主要缺点在于一定程度上牺牲了安全性,因为参与第二层共识的算力或权益份额都要显著少于第一层主链,这是由「分工合作」的设计思想所决定的。

  第二层方案的设计中非常重要的一点就是在发现问题时如何安全快速地退回第一层共识,例如在比特币闪电网络中单方面关闭交易通道。因此,第二层扩容方案通常是作为对第一层区块链的一种功能上的补充出现的,更适合处理小额资产(例如闪电网络)和实验性功能(例如比特币现金的虫洞)等特殊场景。

  此外,未来第二层方案发展的另一个重要方向是利用智能合约的可编程性,在第一层区块链之上实现和运行为具体业务场景定制的第二层侧链,以获得更高的性能、更低的成本、以及其他更多样化定制化的功能。

  例如今年 2 月斯坦福大学的 Benedikt Bünz 等在 ePrint 预印本网站上公开的 Zether 即是以通用的智能合约的形式实现类似 ZCash 的机密交易的功能的第二层方案。

  比特币每笔交易通常需要等待六个区块才能确认,按照平均十分钟产生一个区块计算这大约需要一小时时间,这还没有计算因为吞吐量过低带来的排队等待时间。

  实际上,如果转账的金额足够高/区块奖励相对很少的时候,确保一笔交易安全所需等待的时间和区块数还会进一步增加。这样的交易速度无疑会造成很差的用户体验,因此提高确认速度也是区块链技术的一个核心发展方向。

  提高确认速度的区块链技术往往同时也会提高吞吐量,因为单独提高确认速度的意义有限,吞吐量过低时排队的时间将成为实际确认延迟的主要部分。

  例如前面说的加快区块广播速度和缩短出块间隔就是典型的同时提高确认速度和吞吐量的技术,而 GHOST、Algorand、Conflux 等共识协议的主要目标之一就是保证系统在快速出块的同时仍具有足够的安全性。

  Conflux 的树图模型(实线箭头指向父亲区块,虚线箭头指向引用区块)

  很多第二层扩容的方案也可以提供更高的确认速度,因为此时只需在第二层确认不会受到第一层主链达成共识速度的限制,典型的如比特币的闪电网络。

  为了达到极致的确认速度甚至还出现了基于代理的权益证明(DPoS)的共识协议,在采用这种协议的系统中只有具有强大处理能力和良好的网络条件的超级节点才能直接参与共识,其他参与者只能投票选择自己信任的超级节点而没有打包交易和投票选择区块的权利。

  EOS 是 DPoS 系统的典型代表,通过将每轮参与共识的超级节点数量限制在 21 个,EOS 可以实现 1 秒的确认时间和接近 4000 tps。但是 DPoS 的缺点也非常明显,其中最为人诟病的就是超级节点降低了系统的去中心化程度,为安全性和区块链的治理带来了很多隐患。

  此外,还有一些折衷的技术通过放宽安全性要求的方式在不改变现有共识协议的情况下对小额支付提供更快的确认速度。

  例如通过共享几个大的比特币矿池的交易内存池即可在一笔交易被实际打包进区块之前检查是否有冲突交易,如果没有冲突则可认为这笔交易最终会被打包并执行。这也被称为「零确认技术」,用于快速确认小额交易时甚至不需要等待交易被实际打包进区块。

  当然这样的做法局限性也很大,首先必须有相对集中和中心化的矿池为交易池的真实性背书,其次无法百分之百避免某个矿池或者矿池之外的矿工最终打包了一笔与之有冲突的交易。因此这种技术也只能用于确认风险较小的小额交易。

  区块链技术保证了达成共识的交易和数据都具有难以被篡改的特性,这也是区块链能够提供去中心化信任的核心逻辑。在以比特币为首的大部分现有区块链系统中,为了达到这点也需要在隐私性方面付出相当的代价——所有的交易都用明文的形式存在链上以供其他节点验证,因此所有交易的内容都是公开的。

  这些区块链系统通过与真实身份无关公钥地址实现了一套「假名」的支付系统,这套「假名」系统可以提供最低程度的隐私性,但是地址对应的用户的身份仍能通过历史交易之间的关联性和使用模式等高级分析手段识别出来。因此,对用户的隐私信息提供保护也是区块链技术的重要发展方向,也是密码学技术在区块链中的主要应用。

  它们通过采用不同的技术方案获得了不同程度的隐私保护,但是有一个共同的问题就是隐私保护的代价还比较高。

  例如Monero 采用环签名技术生成的每笔交易尺寸大约有 10 KB,Zcash 中生成每笔带有零知识证明的交易需要几十秒甚至几分钟的时间和几十 MB 到上 GB 规模的内存空间。降低保护交易隐私的额外开销是这类技术的主要发展方向。

  另一方面,对于智能合约的执行等通用计算的隐私保护也吸引了越来越多的研究力量。该方向现在主要的几个技术流派包括基于安全芯片的可信执行环境(Trusted Execution Enclave,TEE)、基于密码学的全同态加密技术(Fully Homomorphic Encryption, FHE)和零知识证明技术等。

  以 Intel 的 SGX 芯片为代表的 TEE 技术是目前看来离实现最近、额外开销最低的方案,但其缺点也同样明显:需要信任芯片制造商,并且芯片容易受到侧信道攻击(side-channel attack)。

  全同态加密技术的主要缺点在于计算成本过高,完成同样的计算任务需要的计算量大约相当于明文计算时的十万到一百万倍的。零知识证明技术现在已经有 zk-SNARK、zk-STARK、Bulletproof、Ligero、ZKBoo 等多种实现方案,这些方案在性能上各有长短,但目前尚没有哪个在各方面都达到堪用的水平。以更高的性能实现零知识证明是密码学家们在所有区块链技术中最关注的目标。

  此外,可验证计算也是一种可以提高区块链安全性的重要技术。可验证计算允许用户不重复执行所有运算即可验证计算结果的正确性,可以减少共识计算的成本和降低加入高吞吐量共识系统的门槛。在实现方式上可验证计算与适合区块链使用的非交互式零知识证明技术具有很多相似之处,此处不再赘述。

  区块链技术在功能方面的发展面向的主要是丰富的应用需求。自从比特币诞生以来,对区块链功能改进最大的技术无疑是以太坊的智能合约,该技术使得区块链的功能从记录交易的账本进化为通用的数据处理平台,极大地拓展了人们对于区块链在未来的应用场景的想象力。

  现在的区块链技术的发展方向是在提供图灵完备的智能合约的基础上同时实现更多的功能,以下从权限控制、外包计算、可信随机数等几个方面简单介绍一下。

  在区块链最简单的实现上,每个账户地址对应一对公钥和私钥,掌握这个私钥就可以完全控制该账户。这种每个账户由一个私钥控制的方式非常简单易懂,但是也有一些缺点:

  首先,有的账户可能不是属于某一个人,如公司账户或者夫妻共用的账户等,因此我们希望以更灵活的方式让多个用户共同控制一个账户;其次如果账户对应的唯一一个私钥意外丢失或被盗则用户会立刻失去对账户的控制权,风险过高;最后,有时我们需要区分不同用户使用账户中资产的权限,例如区分大额支付和小额支付所用的私钥等。

  为了解决上述问题,比特币引入了多重签名账户,这种账户需要预先设定若干对公钥和私钥,只有使用足够多的私钥签名的交易才是有效的;而在以太坊等支持智能合约的系统中则可以通过编程实现更灵活的权限控制。

  然而,直接给每笔交易需要附加多个签名会导致交易的长度随签名个数增加,也会增加验证的负担。Schnorr 签名等多重签名技术使得我们可以将任意多个签名聚合成一个签名,只需一次性验证签名操作即可判断交易是否得到了聚合公钥对应的所有私钥的授权。

  在目前去中心化预言机尚未得到解决的情况下,除了点对点支付以外完全能不依赖于链外信息即在区块链内部实现全部流程的应用并不太多,外包计算就是其中之一。外包计算的基本流程是甲方把输入数据交给乙方,由乙方完成计算后再把计算结果返回给甲方,甲方验证计算结果正确后付费给乙方。

  外包计算对于传统的数据库也是一项非常前沿的技术,其最大的难点在于甲方验证计算的成本必须显著低于执行整个计算任务的成本,否则外包计算就失去了外包的意义,这点可以通过前面说的可验证计算技术或者可信执行环境 TEE 实现。

  除了计算的经济性外,外包计算通常还要求保护输入数据和输出的计算结果的隐私性,也即乙方要在不知道甲方到底要做什么的前提下完成计算任务。外包计算隐私性的传统密码学解决方案是采用安全多方计算或者全同态加密计算,前者的缺点是需要参与者之间进行交互,不适合区块链的场景,后者的主要缺点在于效率过低。

  如果在安全性上降低一些要求,则可信执行环境 TEE 技术也可以达到保护计算隐私性的目的。因此目前看来最适合区块链的外包计算的技术还是使用带有 TEE 功能的安全芯片,在未来可能会出现效率可接受的基于密码学的解决方案。

  随机数是很多算法和程序设计时都需要用到的重要资源。在区块链上实现一个公平公正公开的随机数对于链上的很多应用乃至一部分区块链共识协议本身都有着十分重要的意义。

  这些方案虽然可以提供质量比较高的随机数,但是都无法完全杜绝攻击者影响和操纵随机数的情况。如何更好地限制攻击者能对随机数造成的影响是密码学家们关注的研究课题。

  区块链的预言机机制(Oracle mechanism)研究的是如何以去中心化的方式在区块链上可靠地获取链外的数据,这是长期以来阻碍了很多公链应用落地的核心难题。特别是在可预见的未来内多个不同的区块链(包括公链和联盟链)将长期并存的背景下,在不同的区块链间实现数据和价值的相互流通越来越成为一个亟待解决的难题。

  尽管通用的预言机至今仍没有一个普遍适用的方案,但是仅用于跨链操作的专有预言机已经有了一些初步的实现:

  闪电网络使用的哈希锁定技术可以支持双向跨链操作,实现起来非常简单且不需要可信的第三方,缺点就是功能比较单一,泛用性不强;

  BTC relay 用以太坊的智能合约实现了一个比特币的 SPV 节点,以去中心化的方式实现了比特币到以太坊的单向跨链;

  Ripple 协议等通过公证人跨链的技术实现了资产交换和转移等功能,缺点在于需要信任作为公证人的第三方;

  Cosmos、Polkadot 等采用的侧链和中继链技术可以实现较好的双向跨链性能,也不需要信任任何第三方,缺点是技术架构比较复杂,实现较为困难——目前 Cosmos 和 Polkadot 都还处于测试阶段。

  最后,本文为观察公链发展状况提出了吞吐量、互通性、权限控制等视角,并分析了每个方向的发展状况。不过,在前述领域尚没有哪条公链处于绝对领先位置,并且很多公链的解决方案还需要具体实践的检验,我将会继续保持对公链发展状况的高度关注并与大家分享。