前言:以太坊EVM是低效的,WebAssembly能带来更高效的执行层吗?本文作者是Raul Jordan,来源于medium.com,由蓝狐笔记社区“鑫鑫”翻译。
2013年提出的以太坊的概念成为了区块链技术的一个主要扩展,将其从一个P2P资金的去中心化结算层,转变为一个程序执行的无信任层,为应用程序和可编程资产开创了一个全新的世界。
把自己概念化为一个“全球计算机”,以太坊的核心思想是很简单易懂的:把区块链技术的信任最小化的天然属性应用到计算机程序输出的共识上。也就是说,开发者可以部署被称为“智能合约”的代码,它是完全确定性的,输出可以被所有和它进行交互的角色所信任。
各种各样非常好的想法在一开始就被提了出来,包括使用以太坊智能合约创建公平拍卖或者乐透彩票,创建预测市场,去中心化交易所等等。这些用例中最广为人知的是创建以太坊可编程token,这是各类公司通过首次代币发行筹集资金的一种流行的方式。
以太坊内核实现了一个图灵完备的虚拟机,即以太坊虚拟机(简称EVM)。它定义了一套通用的、确定性的指令,程序可以被编译成这些指令,并且可以在全世界任何一台计算机上运行。在EVM上执行的每一个操作和程序需要被以太坊网络中的每一个全节点运行,意味着这台“世界计算机”需要有一种内建的机制来制止恶意占用(spam)攻击。为解决这个问题,EVM实现了gas(油费)的概念,可以理解为在这台全球计算机上运行每个基本操作需要消耗的“燃料”,这是需要预付的。
区块链计算机是确定性的
图灵完备意味着你可以在以太坊虚拟机上编写和运行任何你能想到的程序,只要你能为它的所有执行步骤支付足够的gas。昂贵的操作,例如训练机器学习算法,由于它的固有限制,在EVM上是完全不可行的。EVM中的每一条指令,被称为OPCODE,都有一个特定的固定费用。每个OPCODE都是确定的,对每个程序的输出达成一致意见是在以太坊上达成全局共识的必要条件。
(以太坊从区块创建到交易执行的完整系统,引用自StackExchange)
通过为opcode设置固定费用,节点就可以确定执行某个特定程序时用户需要预付多少费用。在这种情况下,gas的概念不仅仅被用于阻止恶意占用攻击,还是一种确定性的指标。例如,一个消耗gas X的程序总是会消耗X,不管是网络中的哪个节点在执行它。gas的单价依赖于整个平台的供求关系,经常会随着以太坊网络的交易负载量而发生变化。
EVM是如何设计的?为什么它是低效的?
l 架构尺寸过大
传统计算机包含的指令集只接受32位或者64位的输入。EVM与此不同并且很特殊,它是一台256位的计算机,故意设计成这样是为了更易于处理以太坊的哈希算法,它会明确产生256位的输出。
然而,实际运行EVM程序的计算机则需要把256位的字拆分成它们的本地架构来执行智能合约,从而使得整个系统变得非常低效和不实用。
另外,如果你想在以太坊上用它的基本OPCODES实现一个类似于SHA256的复杂算法,那你就自祈多福吧!为了解决通过指令集运行复杂程序产生的高额gas问题,以太坊引入了预编译的概念,把程序编译进EVM并且消耗固定的gas。一个值得关注的预编译是以太坊哈希算法,因为如果在虚拟机中实现该算法,合约在调用时将会产生极其昂贵的费用。
l 臃肿的预编译
预编译带来的问题是它会不断增加虚拟机的臃肿度和复杂度,而不能解决核心问题:当前指令集和规范的低效而粗劣的设计。
如果我们能够定义一种新的规范和指令集,不需要预编译这些复杂程序,而只需要通过基本指令就可以高效实现呢?
走进WebAssembly
WebAssembly是由W3C开发的一个高效轻量级指令集标准,被誉为网络和高性能的颠覆者,支持跨浏览器执行。这意味着我们可以把包括C/C++, Go, Rust等在内的不同编程语言编译成统一的标准格式,并将其作为JavaScript的替代品以近乎原生代码的效率在浏览器中运行。WebAssembly,或者简称为WASM,是内存安全、平台独立的,可以完美高效地映射到所有类型的CPU架构上。
这和区块链有什么关系?
不依赖于EVM,现在我们有了一套优秀并且高效的指令集,可以编译各种类型的语言,并且有信心它们可以在不同类型的平台上执行且具有同等的性能 – 这对于去中心化应用来说是非常理想的!更进一步,通过去除浮点运算指令,WASM指令集可以很容易地变成确定性指令集,从而很适合作为EVM的替代品。
EWASM团队已经着手在以太坊上集成WebAssembly,从而保证以太坊2.0的执行层更加高效、简单,适合作为完全的去中心化计算平台。https://github.com/ewasm
WASM已经被许多其他项目接纳为标准,包括Dfinity和EOS都使用它来强化它们的执行层。
Web的性能和智能合约平台执行层的未来一片光明。不仅dApp会具有更高的性能,集成WASM也可以让那些熟悉Rust和Go之类的主流语言的鲁棒性的人更容易进行智能合约的开发,而不是需要学习solidity的各种细节才能在以太坊上开发有用的应用程序。
事实上,你已经可以在以太坊的Kovan测试网上根据Parity-Ethereum的教程来部署WASM合约了:https://github.com/paritytech/pwasm-tutorial
确保你对WASM和区块链虚拟机执行的最新开发状态持续保持关注 – 因为这才刚刚开始。
——
风险警示:蓝狐笔记所有文章都不构成投资推荐,投资有风险,投资应该考虑个人风险承受能力,建议对项目进行深入考察,慎重做好自己的投资决策。