服务器 频道

未来应该何去何从? 以太坊的成长烦恼

  在目前的区块链网络平台经济系统中,最终服务用户的是应用程序,而后者又以平台为基础开发。因而平台中存在的问题必然会影响用户对应用程序的使用。以太坊作为这个领域的先行者,其创新之处已经得到了市场的肯定,但是其内部结构中仍然存在着许多亟需解决的问题。本文就以太坊中存在的问题进行介绍,其实本文介绍的以太坊中的问题,同时也是所有区块链网络平台需要解决的地方。以区块链技术为基础建立的网络平台,必须能够对这些问题提出有效的解决方案,才有可能拥有长期的发展。

  一、共识机制

  共识机制是维持以太坊网络中交易信息记录到区块链中的保障,所以共识机制是以太坊中所有的交易活动以及智能合约顺利执行的基础。以太坊中的共识机制采用的是与比特币相同的工作量证明(Proof of work),这种证明机制需要节点[就是参与以太坊网络的用户]通过耗费自己的“努力”来争夺记账权,然后获得代币奖励回报。而这里的花费的“努力”具体指硬件成本以及电力成本。工作量证明中,节点要在难度非常大的情况下猜出一个未知数,这个过程是依靠计算机完成的。如果计算机的性能越好,或者一个节点拥有的计算机越多(我们将这两个统称为算力资源),那么其猜测的速度也就更快。另外,计算机在猜测的过程中还需要消耗大量的电量。因而,算力资源以及电力资源就成了维持以太坊中的共识机制必不可少的消耗。当参与以太坊网络的用户越多时,其消耗的资源量也就更大,这也就引发了这样一个平台是否一定需要消耗大量资源才能顺利运行的思考。

未来应该何去何从?  以太坊的成长烦恼

  与工作量证明对应,有一种叫做权益证明(Proof of stake)的共识机制。权益证明就是依据节点拥有的某种资源的量来决定话语权。而这个资源一般来说都是区块链中的代币持有量。也就是说,在每一轮要产生新的区块时,对于不同的提议区块(记录同一段时间内的交易信息),各个节点对不同的区块进行投票,最后得票最多的区块获胜。而作为回报,区块提议人和投票人都能够获得一定量的代币奖励。

  权益证明的最大优点就是避免了工作量证明中需要耗费大量资源的情况。事实上,从工作量证明机制转为权益证明机制正是以太坊未来的计划之一。虽然这样做能够避免资源浪费,但是也存在着一定的问题。比较突出的一个就是“无利害关系(Nothing at stake)”。我们说过,在权益证明机制中,节点通过对提议区块进行投票,如果自己投的提议区块最终胜出,那么节点也能够获得投票奖励。这时候,可能就会存在节点在每一轮中,为了增加自己获得奖励的机会,对多个候选区块进行投票(投票是免费的),这样的做法对共识机制的正常运行就产生了很大的影响。为了解决这个问题,采用权益证明机制的区块链网络平台都提出了自己的解决方案,但是这些方案原理上都是一致的。

  节点能够在同一轮对多个提议区块投票的原因主要是两个,一个是为了获得奖励,另一个是投票没有成本。这时候只需要破坏这两个任意一个条件就能够消除节点“不老实”的行为动机。很显然,取消奖励不现实的,因为共识机制的维持需要节点参与,节点的参与会消耗一定的电力和硬件成本,因而需要激励机制。那剩下的就只能够从投票成本上入手,即让投票不再是免费的。节点为了获得投票权,必须要缴纳一定量的代币作为保证金,当节点被发现作出多次投票的行为时,这个保证金将会被没收。如果节点按正常情况行使自己的投票权时,这个保证金在一定时间后便能够被赎回。

  实际上,对于权益证明机制来说,由于有机会获得奖励的节点是本身就持有代币资源的人,并且拥有代币越多的节点获得的奖励也就越多。这使得我们又回到了一个历史性的问题上:“富人更富(The rich get richer)”。我们甚至可以想象在一种极端的情况下,绝大多数的代币资源都被一个节点拥有,那么这个节点就占据了话语权,成为了“独裁者”。并且由于奖励也都被这个节点获得,使得其地位无法动摇。

  二、吞吐量

  吞吐量指以太坊处理网络中交易的能力,其本质上是由共识机制决定的,因为对于任意一笔交易来说,获得了共识便等于交易的完成,如果获得共识的速度越快,那么交易的处理能力也就越快。一般来说,我们使用每秒交易量(Transactions per second, TPS)来衡量网络平台的处理能力。

  这里需要说明的一点是,我们之前说过,以太坊处理的是智能合约[更严谨的说法应该是以太坊虚拟机(Ethereum virtual machine,EVM)来处理智能合约,以太坊虚拟机存在于以太坊的客户端中],那么这里为什么不用处理智能合约的能力来评价其能力呢?这是由于真实的以太坊能处理的事情还很少。用智能手机来做对比的话,上个世纪九十年代末期的一个智能手机处理不了的事情,以太坊现在也没有能力处理。现在的以太坊能够处理的智能合约仅仅限于商业逻辑上的内容(”if this then that”,意思就是,如果什么条件满足,那么就执行什么)、验证数字签名(证明身份)等简单的内容。所以我们这里用每秒交易量来衡量其处理智能合约的能力。

  回到吞吐量的内容,目前以太坊理论上支持的每秒交易量(TPS)为25(实际上达不到这个数字)。这相对于比特币(TPS为7)已经有了很大提升。但是这仍然让以太坊网络拥挤不堪,要知道这和真正的商业级应用还有着几个数量级上的差距。Visa的TPS约为2000,而支付宝在高峰时期每分钟处理的交易数量甚至达到了百万笔。由于其背后的技术和平台的不同,我们并不能简单地将这几个数字作对比然后决定谁好谁坏。但是从这个数字上能够看出的一点是,要想满足真正的商业级应用,以太币必须解决其网络吞吐量的问题。

  对于网络吞吐量的问题,以太坊在计划中也给出了自己的解决办法,主要包含两个方面,一个是链下(Off-Chain)交易,另一个是分片(Sharding)。

  为了帮助读者较容易理解这两个方法。我们现在假设以太坊是一家银行,这家银行只有一个实际存在的总部,而银行能够处理的事情就是为用户提供存款与取款的服务。现在这家银行面临的问题就是只有一家总部,所有的人都需要来到这个总部进行存款或者取款,由于用户数量太多,银行处理不了,用户只能堵在银行门口排队等待。

  链下交易

  链下交易的意思是,对于排队等待的用户,由于这些用户有着不同的存款与取款需求,现在将这些用户匹配,用户间自行交易。需要存款的用户将自己的资金给需要取款的用户,然后双方将自行交易后的账户状态提交。这样对于银行来说,本来是存款与取款两笔交易,现在只需要更新双方账户的余额就行。对于银行来说大大减小了业务压力。这个解决方式与比特币的闪电网络十分相似。同时其可能存在的问题也与闪电网络相似。

  这个途径中存在的一个很大问题是,当看到这么多用户的需求无法得到满足时,就可能会出现专门提供这个服务的人,并试图从中获取报酬。也就是让其他用户都在他/她这里处理存款或者取款的业务,最后再将处理完的用户账户信息提交给银行统一处理。最后银行只需要对这些用户的账户余额更新即可。但是,对于提供这个服务的用户来说,不知不觉中,其控制的账户以及资金规模就能够达到很大规模,这意味着这个解决方式具有一定的中心化的趋势。如何监督这个中心用户,以确保其不会做出有害于用户的行为?就算这个中心化的用户能够保始终提供正常的服务,保证整个以太坊网络系统的运行,但是对于一个本意是建立去中心化网络的以太坊,却产生了一个或者多个中心化的节点。这很显然是有悖于其设计理念的。

  分片

  分片指将以太坊网络中需要处理的交易分开处理。用银行的例子理解就是,银行多开设几家分行,这样便能够很大地缓解只有一家总部的业务压力。但是对于以太坊来说,与银行系统不同的一点是,银行可以将不同的分行的信息汇总得到所有用户的账户信息。通过分片,实际上就是将以太坊的区块链分成不同的“分链”,这样做的结果是,实际上不存在类似于银行总部一样的“主链”了。以太坊网络只有不同的分链存在,这样引起的问题就是,对于不同的分链或者说分片上的用户节点来说,如何进行交易?这也正是以太坊目前努力的方向,试图解决由分片引起的不同分片之间的沟通交易问题,也就是说在采用这种方式解决网络吞吐量问题的同时,由让开发者以及用户都觉察不到存在的沟通的问题。

  除了不同分片之间的沟通问题以外,分片还会引起以太坊整体网络的分散化。我们说过,以太坊目前的共识机制是工作量证明,工作量证明机制虽然消耗了大量电力资源,但是这同时也保证了以太坊区块链的安全性。因为全网络节点的算力共同维持着一条链的共识,这样使得恶意攻击者的攻击成本巨大。但是一旦分片之后,随着节点的分开,整体的算力也将分开。那么每一个分片所拥有的算力都将不如之前的情况,这也就降低了维持每一条分链的共识算力支持,使得对于共识的攻击成本较之前相比大大降低。

  三、交易费用

  用我们上面的银行做类比的话,以太坊中的交易费用相当于在银行排队的例子中增加的一个插队机制。也就是说,对于众多排队等待处理业务的用户而言,如果缴纳一定的手续费,那么就能够插队提前办理业务。在以太坊中,每一笔交易、智能合约的处理都需要缴纳一定的手续费用,叫做“燃料(GAS)”。而这个燃料也正是以太坊中的代币:以太币。燃料主要有两个用途,一方面以太坊网络在执行智能合约的代码时,系统需要消耗一定的燃料(这里可以把这个燃料费类比于汽车的燃油);其次,燃料的另外一部分由参与维持共识机制的节点获取,作为生产区块的另一部分奖励。我们说过,节点在生产区块的时候需要将等待确认的交易打包成区块,然后进行解谜。在这个打包过程中,节点处于自身利益考虑,会优先将交易费用高的交易加入区块中。因而付出更高的交易费用便意味着交易得到确认的速度更快。在这种“竞争”模式下,在没有产生额外的价值情况下,智能合约的执行成本增加了。

  当然,采用交易费用的设定主要有两个目的,一个是防止智能合约的执行陷入无限循环,另一个是为了保护以太坊网络的网络资源不被滥用。第一,在以太坊中处理的智能合约是图灵完备(Turing completeness)[关于图灵完备的意思比较复杂,作为直观的理解,读者可以认为具有图灵完备性的编程语言(正是以太坊中的情况),有能力解决一切可以计算的数学问题。而这样的话,如果在编写代码的时候,其中包括无限循环的语句,那么这个代码的执行便会陷入无限循环。至于更严格意义上的含义,有兴趣的读者可自行查阅资料]的,采用交易费用的机制,设定智能合约中代码执行的步骤上限,能够防止合约执行的时候陷入无限循环。其次,因为如果不存在交易费用的话,怀有恶意的人可能会向以太坊网络发送大量没有实际意义的交易请求,从而造成以太坊网络的堵塞。特别是我们在上面说过,以太坊目前能够处理交易的能力十分有限,这使得这样的攻击更加容易实现。这种占据网络资源,使得系统无法服务于有正常需求用户的攻击就是“拒绝服务器攻击(Denial-of-service attack)”。

  但是,如果我们换一个角度看待这个问题,交易费用的设定虽然在一定程度上限制了拒绝服务器攻击的发生,但是另一方面似乎又具有加剧网络拥堵的潜在可能。拿前段时间十分火爆的以太坊养猫为例,由于游戏的火爆,许多玩家不惜付出更高的交易费用,使得以太坊网络都被有关以太坊养猫的交易塞满了,而其他用户的转账等交易无法得到处理。这时候我们再回头看一下拒绝服务器攻击,我们可以假设这么一种情况(即使可能性不高),攻击者想对以太坊发动拒绝服务器攻击,并需要为此付出很高的交易费用成本(当然还有硬件、电力成本),但是只要他/她从这个攻击中得到的收益更高时,攻击就会发动。而又因为交易费用较高的交易总能得到优先处理,这就会导致这个攻击一定会成功。所以从这个角度上讲,交易费用的设定在一定程度上减少了拒绝服务器攻击的动机的同时,也使得拒绝服务器攻击一旦出现,就很容易造成网络的拥堵。

  四、治理(Governance)

  区块链网络平台的治理指对其日常运行的维护,对于偏离其正常运行轨道时的修复补救手段以及对整个网络中的规则更新、修改等内容。关于这一点,以太坊奉行着自己的至高原则:“The code is law(代码即法则)”。一旦代码完成发布后,没有任何人能够对其进行修改,对其运行造成干扰。因为在用代码编写的智能合约发布后,会在全世界所有的以太坊网络节点运行。导致以太坊硬分叉为现在的以太坊和以太坊经典的The DAO事件,正是由于这个原因。当时的现实情况是,人们眼睁睁地看着黑客利用The DAO的代码漏洞,从当时价值1.5亿美金的以太币池中源源不断地拿走资金,同时却没有任何办法。造成The DAO攻击事件的原因很简单,就是因为其代码中的一个条件判断语句出了问题。当这个问题出现后,由于奉行“代码即法则”,没有人能够对The DAO的代码进行修改又或是停止其运行。

  对于这样的一个设计理念,不同的人具有不同的理解。但是不可否认的一点是,在The DAO事件出现以前,以太坊的运行并没有出现丝毫问题,并且这件事情并不是由以太坊的漏洞造成的。真正造成问题的原因是在于开发The DAO的人员。对于这样的原则,在“理想”情况下,即智能合约的编写不会出现问题的情况下,确实能够将整个系统透明准确地传递给每一个用户,这在一个去中心化的网络中能够建立极大的信任。或许这也就是区块链被认为是“重塑信任”的一个重要原因,是区块链真正能够实现“重塑信任”的重要手段。

  但是我们不得不思考,在没有人能够保证所有的代码,所有的智能合约都是按照其设计本意准确编写的情况下,一旦出现预测之外的事情,如何对其进行治理和解决?从这个角度说,以太坊其实并不存在任何的治理机制,它只是将唯一的原则告诉了所有人。

  五、智能合约

  关于智能合约,除了我们刚刚说到的其在发布之后便不可修改不可撤回的特性外,还有两点语需要注意。第一点是支持智能合约编写的语言,目前以太坊的智能合约基本上由Solidity语言编写,除此之外还支持Go, Java, C++, Rust, Haskell。这一点相对于正处于开发阶段并声称支持任意一种编程语言的区块链网络平台(如Cosmos而言,对开发者来说或多或少是一个局限性。第二点是关于智能合约的执行,上文我们说到智能合约是在以太坊区块链网络中执行的,这么说不能说错,但是更严谨一点的话,执行智能合约的是以太坊虚拟机,以太坊虚拟机存在于以太坊的客户端中。对于任何想要加入以太坊网络的节点来说,通过下载安装以太坊客户端就能够加入网络,而在下载的以太坊客户端中都内置了以太坊的虚拟机,用于对智能合约的执行。其步骤上简单来说就是将用代码编写的智能合约转化为更低级的二进制语言,让机器读懂进而执行。

  但是正如我们在共识机制中说到的,以太坊虚拟机目前能够实现的功能和二十年前的智能手机并没有太大差距。像现在我们日常使用电脑网络储存文件、发送邮件以及任何具有图形界面的功能,以太坊暂时都是做不到的。如果仅限于转账领域,那么目前以太坊虚拟机的功能已经足够了,但是如果要实现更复杂的功能,那么以太坊虚拟机仍然有很大的发展空间,而在引入新的功能的同时,随之带来的问题也是很大的挑战。

  六、总结

  本文总结了目前以太坊区块链平台所面临的几个重要的问题。以太坊所采用的共识机制对环境并不友好,其改进的计划中也存在着或多或少的问题;而共识机制又影响着以太坊网络对于交易或者说智能合约达成共识的速度,从而又限制了以太坊的网络吞吐量,而对此以太坊给出的解决计划目前看起来似乎也并不是那么“完美”;治理方面以太坊奉行的至高原则值得我们对人与代码这个话题的思考;最后在智能合约方面,不管是其支持唯一的编写语言,还是虚拟机能够带来的功能都限制着以太坊未来发展的空间。

  尽管存在这些尚未解决的问题,但是以太坊却是唯一一个大规模运行的区块链网络基础平台,从这个角度上说,以太坊确实也经受住了实际的考验,至于未来的路,我们拭目以待。

0
相关文章