首页 / 以太坊2 / 解构ETH2.0:以太坊如何从EVM 过渡到eWASM?

解构ETH2.0:以太坊如何从EVM 过渡到eWASM?

标题:解构ETH2.0:以太坊如何从EVM过渡到eWASM?

免责声明:本文旨在传达更多市场信息,不构成任何投资建议。文章仅代表作者观点,不代表火星财经官方立场。

小编:记得关注哦

来源:ECN以太坊中国

以太坊2.0的eWASM

eWASM是以太坊迈向2.0时代的又一创新之举。主流观点认为,eWASM 可以提升网络的速度、可扩展性和灵活性,也使开发者能够基于以太坊2.0 协议构建更复杂的智能合约。除此之外,我们之前的文章还解释了以太坊2.0 的许多不同方面,例如Stake、Sharding、以太坊Layer-2、zk-snark 等。在讨论eWASM 之前,我们先回顾一下以太坊2.0 的基本路线。

什么是以太坊2.0?

以太坊2.0包括一系列升级,将对协议进行颠覆性改进,扩大以太坊网络的容量,并使其更加高效。升级包括:使用Casper协议的权益证明(Proof of Equity)机制、分片、Raiden(雷电网络)、Plasma、Rollups等。这些升级将在以太坊的不同阶段实施,以确保正确的部署和执行。

第0阶段:启动信标链并转向PoS权益证明机制。第一阶段:加入分片。第2 阶段:使用以太坊0 eWASM 替换现有的以太坊虚拟机(EVM)。本文将主要讨论阶段2。如果读者对以太坊2.0 感兴趣的话,应该知道从EVM 到eWASM 的过渡是一项非常雄心勃勃的任务。在讨论eWASM 之前,我们先来看看EVM 到底是什么。

什么是以太坊虚拟机?

每个去中心化区块链都需要一个虚拟机来处理和执行操作。比特币的虚拟机比较简单,因为它只需要处理交易。但由于以太坊支持图灵完备的智能合约,其复杂度较高。因此,我们需要思考另一个重要的问题。

由于智能合约必须是不可变的,并且即使在多个节点上也能无损运行,那么以太坊虚拟机(EVM)需要具备哪些主要功能?

决定论可终止性独立性决定论

如果一个程序对于同一组输入给出相同的输出,则被认为是确定性的,无论它执行代码多少次。确定性函数的一个完美例子是数学运算。例如,假设所有数字都以10 为基数,则无论重复该操作多少次,1 + 4 始终等于5。

DApp 经常需要同时处理大量资金,因此用户需要确切地知道代码在执行的每个阶段如何响应。

可终止性

我们需要记住,以太坊智能合约是图灵完备的。只要有足够的时间和资源,智能合约理论上可以解决任何问题。但是,我们无法判断合约是否能够在给定的期限内完成所有操作。这就是为什么智能合约需要有终止机制。以太坊智能合约使用“gas”来定义其生命周期。当合约达到Gas 上限时,操作将无法继续。

独立

最后,智能合约应该在完全独立的环境中运行。如果合约发生意外情况(例如受到攻击或存在漏洞),其影响不应影响其他底层协议。

为了满足以上三个特点,智能合约可以使用的系统有两种:——虚拟机和Docker容器。由于Docker合约的默认设计是不确定性的,以太坊决定使用虚拟机。

以太坊虚拟机:它是如何工作的?

当我们谈论“虚拟机”时我们在谈论什么?

传统操作系统(Windows/iOS)一次只需要在一个系统上运行。虚拟机(VM) 是基于本地操作系统创建的更高级别的抽象,可用于复制物理机的功能。

虚拟机使用户能够在不同的硬件架构和操作系统上同时运行同一平台。这就是为什么虚拟机非常适合以太坊等去中心化网络。以太坊的主要目标是成为全球超级计算机,允许开发者借助其计算资源构建自己的智能合约和去中心化应用程序。以太坊虚拟机(EVM)的功能就像一台世界计算机,可供世界各地的节点访问。

堆栈和状态机

与普通虚拟机相比,EVM 还具有两个附加功能。首先,EVM 作为状态机可以读取输入,然后相应地更新其状态。其次,EVM仍然是基于栈的,其内存结构可以通过栈的形式来组织和访问。

如果读者熟悉数据结构,那么他应该熟悉堆栈。堆栈是一种线性数据结构,其中的操作通过LIFO(后进先出)执行。

这是一个例子:

上面的栈中,第一个插入的数据是Orange,最后插入的数据是Apple。按照后进先出的逻辑,我们取出的第一条数据应该是Apple,最后一条数据应该是Orange。

现在让我们看看堆栈操作:压入和弹出。

Push:向堆栈中添加数据Pop:使用LIFO 逻辑从堆栈中删除数据EVM 中的堆栈操作

在堆栈式虚拟机中,操作过程如下:

首先,删除数据和操作数。执行相应的操作,并将执行结果添加到堆栈中。参考下图:

我们首先删除两个数字:20 和7。将这两个数字相加,得到27。最后,将结果添加回堆栈。 EVM 可堆叠系统的优点

堆栈结构确保EVM不需要获取操作数的准确地址。堆栈结构总是将VM指向下一个操作数。它减少了大量的运营开销,同时提高了整体效率。 EVM有:世界状态、机器状态和虚拟ROM。世界状态存储网络中的所有账户,机器状态包括程序计数器、可用gas、堆栈和内存等数据。最后,虚拟ROM 读取称为“EVM 字节码”的机器级代码。这是一种只有EVM 才能理解的独特语言。 EVM 读取字节码

编程语言分为高级语言和低级语言。低级语言,例如字节码,很容易被机器读取,但对人类来说很难理解。这就是为什么大多数编程语言都是高级的。那么,该程序在智能合约中是如何运行的呢?

Solidity/Vyper 语言的智能合约被编译成字节码。使用的编译器称为“solc”。字节码由网络读取和处理。字节码是Solidity 操作码的二进制形式。在从EVM迁移到eWASM的过程中,编译器是非常重要的部分,因为EVM无法理解字节码以外的任何语言。每个操作码在规范中都被赋予了一个易于理解的名称,并由数字代码表示。例如,数字0X01代表ADD操作码。评估板功能

EVM 是以太坊网络中的去中心化处理单元。每笔交易、交互和智能合约执行都只能通过EVM 来完成。负责所有不同的数据结构,包括指令、操作数和处理的数据。 EVM通过指令调度器获取并执行指令并对操作码进行解码。 EVM 还跟踪多个网络组件,例如世界状态、存储状态和块信息。在以太坊网络中为智能合约创建运行环境。该环境包含执行特定交易所需的信息,例如gas价格(最新gas价格)、代码大小、Caller(交易接收者地址)和Origin(交易发送者地址)。 EVM 的缺点

尽管EVM有很多优点,但有四个主要问题限制了网络的整体吞吐量:

由于EVM需要处理大量的各种操作,因此其速度并不令人满意。 EVM 的操作码规范尚未更新,也未针对不同的硬件平台进行优化。第一点提到,由于EVM需要处理大量不同的操作,因此很容易成为操作瓶颈。结果是整个网络的效率受到严重损害。自最初的规范发布以来,EVM 并未进行太多优化,导致编写合约所需的工具和语言极其有限。如果底层工作环境本身存在巨大缺陷,那么引入一系列新颖的机制(Sharding/Rollups/Casper)还有什么意义呢?以太坊之所以寻求从EVM转向eWASM,也是出于对上述缺点的衡量。

那么什么是eWASM?在此之前,我们需要先了解一下什么是WebAssembly。

什么是WebAssembly (WASM)?

WebAssembly 最近引起了很多关注。 WebAssembly 是由万维网联盟(W3C,万维网联盟)创建和定义的一种新代码类型,可以在现代浏览器中高效执行。

WebAssembly 有何独特之处?

由于WASM 具有基于低级堆栈的二进制格式,并且默认情况下很小,因此可以快速加载和执行。一旦浏览器下载了WASM 代码,它就可以快速将其转换为适用于任何计算机的程序集。

WebAssembly 的优点

它受到多个JavaScript 引擎和运行时环境的支持,可以在大多数现代浏览器中执行。 Go/Rust/C/C++语言可直接编译成WASM,可快速适配所有机器级架构,具有极高的性能,自带兼容大多数现代硬件架构的指令集,接近以太坊原生运行速度大多数平台上的2.0。电子WASM

读完本文后,您可能已经发现eWASM(以太坊WebAssembly)是以太坊2.0的WebAssembly。

据相关团队介绍:

eWASM=WASM 非确定性(浮点)+仪表+EEI路径(用于与以太坊交互)

eWASM团队给出了其具体的设计目标:

构建EVM 转换器并以eWASM 合约的形式添加计量注入器。发布清晰详细的规范:以太坊接口、eWASM 合约语义和细节。为solc编译器构建eWASM后端,以提供C和Rust语言的相应指令和库。支持智能合约编写的EOS、Tron、Cardano等项目已经采用或准备采用WASM。实施eWASM后,以太坊也将成为其中之一。

eWASM 与EVM

EVM 的主要设计目标是确保正确性,即使可能会牺牲一定的效率。以太坊开发者Lane Rettig认为,EVM是基于理论设计而不是实际设计,因此它可能无法完美支持现实生活中的应用。 EVM中的每个节点都必须完整、正确地运行EVM,而WASM是为现实应用程序设计的,可以轻松翻译实际的代码逻辑,因此在效率和速度上更具优势。

现在有了大致的了解,我将进一步比较eWASM和EVM。

eWASM 与EVM #1: 速度

简单来说,EVM可以算是一种“精油”,但并没有达到预期的效果。以代码编译为例。

EVM 通常无法有效地编译大量代码。浏览器的原生JS 引擎通常需要大量工作来匹配执行某些操作的最佳路径,这会对EVM 的整体吞吐量产生巨大影响。另外,EVM只能处理256位字节码,因此小于256位的字节码必须转换为256位格式。

EVM 的设计极大地限制了以太坊的速度和可扩展性,使其每秒处理不超过25 笔交易。而这对于现实世界和现实需求来说是非常不现实的。

eWASM 可以直接转换为编译代码,从而加快加载时间并显着增加每个块可以处理的事务数量。此外,在分片和layer2解决方案的支持下,以太坊2.0的速度将得到显着提升。

eWASM 与EVM #2: 预编译

eWASM 还消除了以太坊对预编译的依赖。预编译是EVM 字节码的一个特殊位。优点是可以节省gas成本并执行高效的密码操作。在大多数情况下,如果不进行预编译,几乎不可能将创建合约所需的Gas 保持在上限之内。 eWASM 的Gas 效率非常高,可以消除大部分甚至全部预编译。

然而,预编译也有缺点。引入新的预编译通常需要对网络进行系统范围的硬分叉。根据历史经验,硬分叉有些争议,因为它可能会导致社区分裂。

这些是什么意思?

eWASM 可以帮助开发者快速、经济高效地创建智能合约,而无需担心硬分叉。

eWASM 与EVM #3: 灵活性

最后,与标准EVM 相比,eWASM 最显着的优势是代码灵活性。为了编写智能合约,以太坊开发者必须专门学习Solidity语言,这成为开发者的知识瓶颈。

eWASM 可以与多种语言交互,并且拥有更广泛的开发者工具集。 eWASM 将支持C/C++/Rust 语言。

所有主要JavaScript 引擎都将支持eWASM,例如:

Microsoft 的Chakra 引擎(Microsoft Edge) Google 的V8 引擎(Node.js 和基于Chromium 的浏览器) Mozilla 的Spidermonkey 引擎(Firefox 和Thunderbird) eWASM 也将受到以下非浏览器实现的支持,例如:

ml-proto(OCaml 参考解释器) wasm-jit-prototype(使用LLVM 后端的独立虚拟机) wabt(基于堆栈的解释器) EWASM 还具有以下突破性优势,这是以前的EVM 无法实现的:

对于以太坊轻客户端来说,获得浏览器支持会更简单,因为eWASM 是根据W3C 标准构建的。 eWASM 拥有更多的编译器和更广泛的开发工具。由于大量项目已经在使用eWASM,它聚集在一起创建了一个健康且多元化的开发者社区。结论:eWASM 能否帮助Eth 2.0 达到更高水平?

以太坊社区对eWASM 感到非常兴奋。然而,相关讨论总是伴随着各种疯狂的主张,我们仍然需要听到不同的声音。以太坊高级开发人员Greg Colvin 对eWASM 智能合约存有疑虑。他的主要观点是:

eWASM无法消除预编译的eWASM对编译器的过度依赖,这可能会导致单点故障。事实上,绝大多数以太坊开发者认为eWASM 将对协议的整体性能和吞吐量产生巨大影响。

结果会怎样呢?让我们拭目以待!

上一篇
下一篇

为您推荐

手机访问
手机扫一扫打开网站

手机扫一扫打开网站

返回顶部