主页 > imtoken2.0下载 > 技术 | 解构ETH2.0:以太坊如何从EVM过渡到eWASM?
技术 | 解构ETH2.0:以太坊如何从EVM过渡到eWASM?
来源 | Ivan on Tech,翻译:以太坊中文网
以太坊2.0的eWASMeWASM是以太坊迈向2.0时代的又一创新举措。 主流观点认为,eWASM 可以促进网络的速度、可扩展性和灵活性,也使开发者能够基于以太坊 2.0 协议构建更复杂的智能合约。 除此之外,我们之前的文章也讲解了Eth 2.0的很多不同方面,比如Staking、Sharding、Ethereum Layer-2、zk-snark等。在讨论eWASM之前,我们先回顾一下Ethereum 2.0的基本路线。
什么是以太坊 2.0? 以太坊 2.0 包括一系列升级,将对协议进行颠覆性改进,扩展以太坊网络,并使其更加高效。 升级包括:使用Casper协议的Proof of Stake(权利证明)机制、分片、Raiden(闪电网络)、Plasma、Rollups等。这些升级将在以太坊的不同阶段实施,以确保正确部署和执行. 本文将主要讨论 Phase 2,如果读者对以太坊 2.0 有一定的了解,应该知道从 EVM 到 eWASM 的过渡是一项非常雄心勃勃的工作。 在我们进入 eWASM 之前,让我们先看看 EVM 到底是什么。
什么是以太坊虚拟机? 每个分散的区块链都需要一个虚拟机来处理和执行操作。 比特币的虚拟机比较简单,只需要处理交易即可。 但是,由于以太坊支持图灵完备的智能合约,其复杂度也更高。 因此,我们需要思考另一个重要的问题。
由于智能合约必须是不可变的,即使经过多个节点也不会丢失运行,那么以太坊虚拟机(EVM)需要具备的主要功能是什么?
确定性如果一个程序无论对同一组输入执行多少次代码都给出相同的输出,则该程序被认为是确定性的。 确定性函数的一个完美示例是数学运算。 例如,假设所有数字都以 10 为底,无论重复多少次,1 + 4 总是等于 5。
DApp 往往需要同时处理大量资金,因此用户需要准确了解代码在每个执行阶段的响应情况。 可终止性我们需要记住,以太坊智能合约是图灵完备的。 如果有足够的时间和资源,智能合约理论上可以解决任何问题。 但是,我们无法判断合约是否可以在给定的时限内完成所有操作。 这就是为什么智能合约需要有一个终止机制。 以太坊智能合约使用“gas”来定义它们的生命周期。 当合约达到 gas limit 时,就不能继续运行。 独立性 最后,智能合约应该在一个完全独立的环境中运行。 如果合约发生意外情况(例如被攻击或出现漏洞),那么其影响不应影响其他底层协议。
为了满足以上三个特性,智能合约可以使用的系统有两种——虚拟机和Docker容器。 由于 Docker 的合约默认设计是不确定的,以太坊决定使用虚拟机。
以太坊虚拟机:它是如何工作的? 当我们说“虚拟机”时,我们究竟指的是什么?
传统操作系统(Windows/iOS)一次只需要在一个系统上运行。 另一方面,虚拟机 (VM) 是在本机操作系统之上创建的更高级别的抽象,可用于复制物理机的功能。
虚拟机使用户能够在不同的硬件架构和操作系统上同时运行同一个平台。 这就是为什么虚拟机非常适合像以太坊这样的去中心化网络。 以太坊的主要目标是成为全球超级计算机,使开发人员能够使用其计算资源来构建自己的智能合约和去中心化应用程序。 以太坊虚拟机 (EVM) 的功能就像一台世界计算机,全世界的节点都可以访问它。 堆栈和状态机 与普通虚拟机相比,EVM 有两个额外的特点。 首先,作为状态机的 EVM 可以读取输入并相应地更新其状态。 其次,EVM仍然是栈式的,其内存结构可以以栈的形式进行组织和访问。
如果读者熟悉数据结构,对栈应该不会陌生。 堆栈是一种线性数据结构以太坊开发者,其中的操作通过 LIFO(后进先出)执行。
这是一个例子:
上面的栈中,最先插入的数据是Orange,最后插入的数据是Apple。 按照后进先出的逻辑,我们取出的第一条数据应该是Apple,最后一条数据应该是Orange。
现在让我们看看堆栈操作:Push 和 Pop。 EVM 中的栈操作 在栈式虚拟机中,操作如下: 参考下图:
EVM 堆叠系统的优点 EVM - 阅读字节码
编程语言分为高级语言和低级语言。 字节码等低级语言,机器很容易阅读,但人类很难理解。 这也是大多数编程语言都是高级形式的原因。 那么以太坊开发者,程序在智能合约中是如何工作的呢? EVM 的函数式EVM 的缺点虽然EVM 有很多优点,但是限制网络整体吞吐量的问题主要有四个:如果底层工作环境本身存在巨大的缺陷,那么引入一系列新颖的机制(shards/rollups/Casper)重点是什么? 以太坊之所以寻求从 EVM 转向 eWASM,也是基于对上述缺陷的衡量。
那么什么是 eWASM? 在此之前,我们需要了解 WebAssembly 是什么。 什么是 WebAssembly(WASM)?
WebAssembly 最近获得了很多关注。 WebAssembly 是由万维网联盟(W3C,World Wide Web Consortium)创建和定义的一种新型代码,可以在现代浏览器中高效执行。
是什么让 WebAssembly 与众不同?
由于 WASM 具有基于堆栈的低级二进制格式,并且默认情况下很小,因此可以快速加载和执行。 一旦浏览器下载了 WASM 代码,它可以快速将其转换为适用于任何计算机的程序集。
WebAssembly Ethereum 2.0 eWASM 的优势 看完这篇你可能已经发现,eWASM(Ethereum WebAssembly)就是以太坊 2.0 的 WebAssembly。
据相关团队介绍:
eWASM = WASM – 非确定性(浮点数)+ 计量 + EEI 路径(与以太坊交互)
eWASM团队给出了具体的设计目标:EOS、Tron、Cardano等项目已经或即将采用WASM。 eWASM实现后,以太坊也将成为其中之一。
eWASM vs EVMEVM 的主要设计目标是确保正确性,即使它可能会牺牲一些效率。 以太坊开发者 Lane Rettig 认为,EVM 是基于理论设计而非实际设计,因此可能无法完美支持现实世界的应用。 EVM中的每个节点都必须完整、正确地运行EVM,而WASM是为现实应用而生的,能够翻译简单实用的代码逻辑,因此在效率和速度上更具优势。
有了大致的了解之后,我将进一步比较eWASM和EVM。
eWASM vs EVM #1:速度 简单来说,EVM 可以看成是“万种精油”,但并没有达到预期的效果。 以代码编译为例。
EVM 通常无法有效地编译大量代码。 而浏览器的原生 JS 引擎通常需要大量的工作来匹配执行某些操作的最佳路径,这会对 EVM 的整体吞吐量产生巨大的影响。 此外,EVM 只能处理 256 位字节码,因此小于 256 位的字节码必须转换为 256 位格式。
EVM 的设计极大地限制了以太坊的速度和可扩展性,使其每秒最多可以处理 25 笔交易。 这对于现实世界和现实需求来说是非常不切实际的。
eWASM 可以直接转换为编译代码,从而提高加载速度,大大增加每个区块可以处理的交易量。 此外,在分片和layer2解决方案的支持下,以太坊2.0的速度将得到显着提升。 eWASM vs EVM #2:预编译 eWASM 还消除了以太坊对预编译的依赖。 预编译是 EVM 字节码的一个特殊位。 优点是可以节省 gas 成本并执行高效的密码操作。 在大多数情况下,如果不进行预编译,几乎不可能将创建合约所需的 gas 控制在上限之内。 eWASM 的 gas 效率非常高,可以省略大部分甚至所有的预编译。
然而,预编译也有其缺点。 引入新的预编译通常需要在系统范围内对网络进行硬分叉。 根据历史经验,硬分叉存在一些争议,因为它可能会导致社区分裂。
这些是什么意思?
eWASM 可以帮助开发人员快速且经济高效地创建智能合约,而无需担心硬分叉。 eWASM 与 EVM #3:灵活性 最后,eWASM 相对于标准 EVM 的最显着优势是代码灵活性。 以太坊开发者要编写智能合约,必须专门学习Solidity语言,这成为了开发者的知识瓶颈。
eWASM 可以与多种语言交互,并拥有更广泛的开发者工具集。 eWASM 将支持 C/C++/Rust 语言。
eWASM 将得到所有主要 JavaScript 引擎的支持,例如:
eWASM 还将获得对以下非浏览器实现的支持,例如:
EWASM 还具有以下突破性的优势,这是以前的 EVM 无法实现的: 结语:eWASM 能否帮助 Eth 2.0 更上一层楼? 以太坊社区对 eWASM 感到非常兴奋。 然而,相关讨论总是伴随着炒作,我们需要听到不同的声音。 高级以太坊开发人员 Greg Colvin 对 eWASM 智能合约持怀疑态度。 他的主要观点是:事实上,大多数以太坊开发人员认为 eWASM 将对协议的整体性能和吞吐量产生巨大影响。
会发生什么? 让我们拭目以待!