以太坊很慢——非常慢。最近,USDC批准的一项简单交易花了大约3个小时进行验证。这里有一个更具启发性的统计数据:以太坊平均每10~20秒释放一个区块。每个块包含少于350个事务。所有这些大约转化为每秒30个事务。在批评以太坊的缓慢时,经常提到Visa 2000 TPS。也许这是一个不公平的比较,因为以太坊仍处于开发阶段。然而,以太坊似乎不太可能在短期内主导数字金融。
以太坊的低吞吐量是一个基本问题。以太坊是一个基于账户的区块链:分类账状态定义为从账户地址到一段数据的键值映射。简单的ETH交易(价值转移)可以实现账户中ETH余额数据的增减。类似地,更复杂的事务(合约调用)将更改指定帐户的数据。在这种情况下,以太坊交易是全局分类账状态的转换功能。这就是以太坊虚拟机(EVM)图灵能够完成并允许智能合约的原因;以太坊智能合约本质上是一种交互式账户数据。
现在让我们看看EVM是如何处理或验证这些事务的。并行处理所有事务是不合理的。根据设计,所有事务都试图更改总体状态。如果事务并行运行,EVM将支持竞争条件:两个程序(在本例中为事务)尝试并行增加uint变量。因为两个程序同时访问变量,所以变量只增加一次,而不是两次。为了解决此类并发错误,以太坊选择逐个处理事务。换句话说,EVM是一个单线程状态机。因此,以太坊实现的是并发而不是并行。
以太坊类似于只有一个出纳的票据队列,其处理时间不一致。排队的人是等待验证的交易,唯一的出纳是虚拟机。当我们考虑天然气的成本时,事情就变得更复杂了。现在,任何人都可以额外付费插队。长队意味着那些不能为更好的职位买单的人将不得不等待太长的时间来处理他们的机票。
以太坊的低吞吐量是一个问题,特别是从Web3.0的角度来看。以太坊确实已成为所有web应用程序的媒介。如果它目前的吞吐量持续下去,那么诸如赞扬reddit上的帖子之类的琐碎任务可能需要两个多小时才能完成。我们生活在一个速度决定一切的时代。以太坊太慢了。
您可能会问,为什么不选择性地应用并发呢?更详细地说,为什么不将并发应用于冲突事务(例如,将值转移到同一帐户),并并行处理其余事务呢。不幸的是,saraph和Herlihy向我们表明,所取得的加速充其量是适度的。
已经提出了许多解决方案来加速以太坊并提高其可扩展性。最近的EIP-1559(伦敦硬分叉)不会直接影响以太坊的交易速度,但从理论上讲,它应该通过减少普通用户在交易处理前必须等待的潜在块数,稳定其在大规模交易高峰时的波动。然后是L2的Rollups,这将直接影响以太坊的吞吐量,而不会损害区块链的宝贵去信任。
与此同时,其他模拟普通虚拟机的区块链也在积极开发中。有些已经成功实现了并行,并且承诺的吞吐量远远高于以太坊的30 TPS。请特别注意algorand、Solana和Cardano,以及他们在智能合约中独特的并行化方法。
文章标题:详解智能合约中的并发性和并行性
文章链接:https://www.btchangqing.cn/325746.html
更新时间:2021年10月13日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。