区块链、硬件与面向服务的架构,WASM 即将迎来大爆发?
在上一篇文章中我们探讨了WASM在服务端的巨大潜力。这篇文章将从技术角度出发,以将 Rust 程序、C 程序编译成 WASM 的实例来深入解读 WebAssembly(Wasm),并探讨了 WASM 在区块链、硬件以及面向服务的架构(SOA)的实现。
本文作者: Second State 的研究员、开源核心开发 Tim McCallum。
以下为正文:
本文不仅仅是对 Wasm 的技术探讨,还在更广义的范围内讨论 了Wasm 未来的潜力。
技术示例1:把一个简单的 Rust 程序编译成Wasm,并部署到一个独立的 Wasm 虚拟机(称为WAVM)上。
技术示例2:编写一个 C 程序,然后将其编译为 Wasm 并部署在 x86_64 硬件(macOS Catalina)上。在这个示例中,我们将使用 Fastly 的本地 WebAssembly 编译器和称为 Lucet 的运行时来执行。
本文还将讨论:
- Wasm在区块链(全球去中心化计算)中的应用实现
- 硬件实现(可移植binary )
- 面向服务的架构(SOA) 实现
什么是 Wasm?
WASM 是一种接近机器的、独立于平台的、低级的、类似于汇编的语言(Reiser and Bläser,2017)。 Wasm 让 Web 有了安全、快速、可移植的低级代码(Rossberg等,2018)。
Wasm 计算模型基于堆栈机器(译者注:一种计算模型),指令通过隐式的操作数栈控制值,使用(出栈)参数值并产生或返回(入栈)结果值(webassembly.github.io,2019)。
Wasm 得到了极大的发展
下图是过去几年“ WebAssembly”学术论文的数量。
可以看出, 与“ WebAssembly” 相关的学术论文急剧增加,同时包含关键词“ WebAssembly”和“ Blockchain”两个词的论文数量也呈上升趋势。
本文将分别讨论浏览器内 Wasm 的实现和区块链中的 Wasm 实现。
浏览器内 Wasm 实现
WASM 的设计实现了渐进式 Web 开发(Webassembly.org,2019)。 Wasm 在浏览器中有许多让人眼前一亮的实现。
案例之一:在线 Wasm 迷宫游戏。
在编译后,这个网页版游戏的大小不超过2048字节!
浏览器内 Wasm 实现的案例之二:同样抓人眼球的 wasm-flate 的压缩/解压缩软件。
Wasm-flate 是当前浏览器中速度最快的压缩和解压软件。这种浏览器内的 Wasm 执行使 Web 开发者有机会将强大的新功能无缝集成到其 Web 应用程序中。这样的 Wasm 开发意味着最终用户不需要安装第三方系统级应用,也无需在第三方系统级应用之间切换。
浏览器中的像 Wasm-flate 这样的 Wasm 应用程序能否最终取代传统的系统级竞品应用程序,如WinZip?
Wasm 在区块链中的实现
比特币和以太坊使用基于堆栈的架构,该架构与 WebAssembly 基于堆栈的架构相似。
当然,每个独特的基于堆栈的虚拟机都有一些差异。例如,在 Wasm 中找不到类似大家熟知的堆栈项目重复操作的功能,例如比特币的 OP_DUP 操作码和以太坊的 DUP1 至 DUP16 操作码。
以太坊黄皮书中的复制操作。
幸好,Wasm 为每个 Wasm 函数提供了固定数量的局部变量。这些变量将信息存储在该特定函数本地的单个索引空间内。更值得关注的是,还有其他方法可以模拟特定堆栈行为。
另一个重要的差异是每次操作可入栈的项目数量。仔细查看以太坊黄皮书(上图),能够注意到两列标记为 δ 和 α 的列。
标记为 δ 的列表示要从堆栈中删除的项目数。标记为 α 的下一列代表要放置在堆栈上的其它项目的数量。以太坊虚拟机(EVM)上的每个操作都可以将许多项目入栈。在上面的示例中,DUP16 能够将17个项目入栈。
但是,在当前版本的 Wasm 中,一条指令只能将一个结果值入栈(webassembly.github.io,2019)。
还有许多像这样的细微差别。
毫无疑问,构建能将任何高级区块链智能合约源代码转换为可执行的 Wasm 式代码的编译器,这样的工作非常复杂且繁重。
但 Second State 的开发者最近构建了一个名为 SOLL 的编译器(点击此处有视频demo),这是第一个允许在 Ewasm 测试网上进行以太坊 Solidity 智能合约的编译、部署、交互的编译器。
诸如此类的开拓性工作,标志着去中心化网络中数字价值和数据的交换,以及设备之间基于规则的交互开始了。将基于浏览器的设备编织到已经去中心化的区块链架构中,可以使无需许可、抗审查、没有边界、安全并基于Web的交易成为主流。
在今年的Devcon5(以太坊开发者大会)上,与以太坊的开发者进行交流后,Second State 也正在考虑构建从以太坊的中间语言Yul 到 LLVM 到 Ewasm 的编译器。
这项新增的工作可能促成用C ++,Rust,Vyper等语言编写的智能合约,得以部署到以太坊的 Wasm 区块链实现中。
很快,大家会意识到,引入新语言(跨编译器工具链的不同部分)会在多语言协作方面带来无穷的可能性。
这是 Wasm 潜在的巨大益处。
Wasm——更接近硬件
Wasm不仅仅是Web浏览器或区块链虚拟机的字节码。这个你们知道吗?
图片出处:Raimond Spekking / CC BY-SA 4.0(Wikimedia Commons)
Web 跑在不同的浏览器、不同类型的设备、机器体系结构和操作系统上。针对Web的代码必须独立于硬件和平台,这样一来,应用程序在不同类型的硬件上运行,可以执行相同的结果(Rossber