区块链网站|NFTS Aptos(APT) 《密码学探索》EVM链和并行执行事务

《密码学探索》EVM链和并行执行事务

广告位

「密码学探秘」EVM链和并行执行交易

概述在web3.0世界中,交易处理性能一直是公链面临的主要技术挑战。如何在不降低安全性和分散性的前提下显著提高区块链交易的TPS,无疑成为了众多公链技术专家追求的目标。以Solana和Aptos为代表的新一代公链的出现,是通过并行执行事务来克服公链可扩展性瓶颈的号角。

以太坊虚拟机拥有最多的DApp开发者,因为它最早将智能合约引入区块链,许多新的公共链直接采用EVM作为其智能合约交易执行引擎。其在web3.0中的受欢迎程度可见一斑,但受限于顺序执行)EVM无疑因其可扩展性而广受诟病。

能否兼容EVM,能否通过并行执行事务达到提升性能的目的?今天,我们就来讨论这个话题。

EVM事务执行的机制是众所周知的。在EVM,事务的执行实际上是状态转换。事务执行前的状态t和事务transaction是EVM的输入,输出是事务执行后的状态t 1。

需要注意的是,每笔交易执行前后的状态t为‘世界状态’,即整个账簿中所有账户的实时状态(如balance、nonce、storageroot等。).这种帐户模型在一定程度上方便了实际应用程序的开发,但由于每个事务的执行都依赖于某种‘世界状态’,因此也给可伸缩性带来了许多限制。正因为如此

并行执行的挑战就是基于这种账户模型,通过并行执行重用节点的硬件资源来提高网络吞吐量是非常困难的。举个简单的例子:A转移到B的事务tx1和C转移到D的事务tx2理论上可以并行执行,因为两个事务没有关联,但是如果tx2调整为B转移到C会怎么样?如果一开始B的余额为0,tx1中的A转到B5令牌,tx2中的B转到C3令牌,我们会发现tx2在tx1执行之前就注定失败,因为此时B处于余额不足的状态。这种情况在链中被称为“状态冲突”。

当然,对于只进行转账的交易,可以通过静态分析来确定交易的依赖关系。事实上,DApp开发者经常通过复杂的智能合约逻辑在EVM虚拟机中实现一些特殊的业务需求。在一个智能合约交易中,EVM会根据合约的代码逻辑进行用户的各种操作,因此无法通过简单的交易内容分析来确定交易的依赖性。

Trieable improvement Solidity被称为图灵的完全智能契约语言,通过事务指令集的静态分析来确定事务依赖的可行性基本不存在,但不代表我们只能按顺序执行。我们可以从最近一些优秀的区块链项目中得到更多的启发。

乐观执行是一种尝试性的方案。既然无法提前分析事务的关系,那么是否可以先乐观地独立执行所有事务,然后再进行事后分析?

Aptos项目的PE(并行执行)方案就是这种思想的代表。根据项目方公布的数据,在低相互依赖的场景下,事务执行效率最高可达串行执行的16倍。

虽然EVM没有类似Block-STM的机制,但我们可以完全优化块内事务的执行逻辑,这样不仅可以兼容EVM,还可以支持将明显不相关的事务划分到不同的批处理中进行支持,即我们可以先将事务依赖关系构建成一组可以根据事务发送方和接收方的账户地址进行批处理执行的事务,乐观地在不同的线程(或协进程)中独立执行。执行完所有事务后,比较分析执行过程中使用的读集(所有使用的状态变量)和写集(所有事务产生的需要记录在链中的结果),检查事务序号较低的事务(块中的事务序号)的读集是否与事务序号较高的所有事务写集相交。如果不是,则执行结果正确;否则,意味着该事务需要依赖于前一事务的最新状态,这需要基于前一事务。

用户指定事务的读写集。普通的转账交易可以简单的通过from和to来确定交易的相互依赖关系,而智能合约交易在EVM执行之前无法确定依赖哪些账户,但是发送交易的用户在大多数情况下可以确定交易的读写集。Sui项目只是把交易的依赖和结果留给用户指定并最终签收确认,这将大大简化分析交易关联的逻辑。

然而,EVM目前还没有这样的机制,尽管建议[EIP-2930] (EIPS/EIP-2930。MD at master ethereum/EIPS GitHub)已经在以太坊中被采用和实现,然而,这个建议并不要求用户指定所有的访问列表。如果你想在EVM实现用户指定的读写集,你需要在以太坊提交一个新的EIP提案。此外,用户需要SDK的支持来确定读写集。

通过DAG构建事务的依赖关系,对于简单的转账事务或者上述由用户指定的事务,可以完全提前确定事务的依赖关系,有向无环图可以有效地分析这种依赖关系。

有关如何使用DAG批量和并行执行事务的详细信息,请参考我们以前的技术文章。

需要考虑的一些问题:EVM架构适合并行执行吗?虽然并行执行可以有效利用硬件资源,提高链式处理事务的能力,但正如我们开头提到的,这一定不能以牺牲安全性和分散性为代价。Ilya Sergey在EVM技术架构的基础上对并行执行做了深入的研究。根据他的研究结论,对于非垃圾收集语言,内存中对象的重复声明和使用必然会违背状态完整性,这给智能契约的形式化验证带来了极大的挑战。也许这是EVM设计师在最初的设计中没有考虑到的问题。

公链适合处理海量交易吗?公链是一个公共基础设施,它的用户可以是任何人或团体。不可否认,它的处理能力越强越好。然而,这并不意味着任何事务都需要被链接。虽然气机制可以降低垃圾数据链化的可能性,但是随着节点交易处理能力的提高,矿工为了增加收入,会尽可能多的打包交易,这必然会使气的价格越来越低,链上必然会充斥着大量的垃圾数据,使得账本数据越来越虚增。

过度依赖硬件资源会降低网络去中心化程度。通过增加CPU核心的数量,可以实现高事务处理性能,增加磁盘容量可以存储更多的数据。这将不断增加节点的运维成本,最终的结果将是只有少数人或群体负担得起这些成本,不利于去中心化。

广告位
本文来自网络,不代表区块链网站|NFTS立场,转载请注明出处:https://www.qklwz.com/jzb/apt/5954.html
上一篇
下一篇

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

返回顶部