WebAssembly和区块链计算的未来

2018-11-06 09:19 稿源:蓝狐笔记  0条评论

来源:蓝狐笔记(公众号:lanhubiji)

前言:以太坊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是如何设计的?为什么它是低效的?

架构尺寸过大

传统计算机包含的指令集只接受 32 位或者 64 位的输入。EVM与此不同并且很特殊,它是一台 256 位的计算机,故意设计成这样是为了更易于处理以太坊的哈希算法,它会明确产生 256 位的输出。

然而,实际运行EVM程序的计算机则需要把 256 位的字拆分成它们的本地架构来执行智能合约,从而使得整个系统变得非常低效和不实用。

另外,如果你想在以太坊上用它的基本OPCODES实现一个类似于SHA256 的复杂算法,那你就自祈多福吧!为了解决通过指令集运行复杂程序产生的高额gas问题,以太坊引入了预编译的概念,把程序编译进EVM并且消耗固定的gas。一个值得关注的预编译是以太坊哈希算法,因为如果在虚拟机中实现该算法,合约在调用时将会产生极其昂贵的费用。

臃肿的预编译

预编译带来的问题是它会不断增加虚拟机的臃肿度和复杂度,而不能解决核心问题:当前指令集和规范的低效而粗劣的设计。

如果我们能够定义一种新的规范和指令集,不需要预编译这些复杂程序,而只需要通过基本指令就可以高效实现呢?

声明:本文转载自第三方媒体,如需转载,请联系版权方授权转载。协助申请

相关文章

相关热点

查看更多