区块链技术专题——Wasm是怎么和区块链攀亲戚的?

小链君每日精心分享

区块链上可以用的技术很多,原先从来没有想过的DAG也上了区块链。但不管如何,只要是靠谱的项目,采用新技术都会有个理由。那么WASM是什么?它为啥能上区块链?

Wasm,即WebAssembly,是一种用来补充JS在运行上不足的“低级”语言——基于二进制编写。其目标之一正是达到在网页上如同运行机器语言一样快速高效。其开发团队分别来自Mozilla、Google、Microsoft、Apple,代表着四大网络浏览器Firefox、Chrome、Microsoft Edge、Safari。

Wasm允许用户采用自己熟悉的语言书写(目前支持C/C++/Rust),再在虚拟机引擎在浏览器上运行。它支持沙盒模式,即先用高级语言编写wasm模块,再在JS中以库函数加载。

与区块链的结合点

Web端DApp

JS的时代下Web端编译语言多半是解释性语言,虽然它们易于被使用者解释并理解,但运行效率并不高,特别是JS。Node.js固然给了一个框架可以编写本地和服务端应用,但对于加密计算、图像处理等效率过于低下。HTML5解决了很多浏览器的功能和性能标准问题,但是H5仍然沿用了JS作为主要语言,没有本质上解决问题。在诸多Web开发端在各行其是自己搞编译性语言无法得到统一下,Wasm应运而生。

在 Web 平台的很多项目中, 对于原生新功能的支持需要 Web 浏览器或者 Runtime 提供复杂的标准化的 API 来实现, 但是 Java API 往往较慢。 使用 WebAssembly, 这些标准 API 可以更简单, 并且在底层进行操作。例如, 对于一个面部识别的 Web 项目, 对于访问数据流我们可以由简单的 Java API 实现, 而把面部识别原生 SDK 做的事情交由 WebAssembly 实现。

那么对于区块链DApp,它的意义非常明确——

1.允许开发者以其他语言开发,再加载在JS上。

2.提升程序性能,允许大型区块链DApp的开发。

EVM

这是ETH、EOS等项目想要使用wasm这个技术的原因。

由于EVM需要预编译,同时需要付出gas作为代价,实际上在EVM上编程成本很高。同时对于EVM的臃肿毫无帮助。最后,Solidity相比其语言基础C比较难学。

而Wasm是是内存安全的、平台独立的,并且可以有效地映射到所有类型的CPU架构。其指令集效率高,同时保有足够的可移植性。此外,Wasm指令集可以很容易地通过移除浮点指令来确定化,这将使它适合于替换EVM语言。

同时,Wasm在不增加内存消耗的情况下,可以达成无信任编程。可以通过在Wasm上进行堆栈分析与计量进行精确计算。

目前ETH打算将DApp也用上基于eth-WASM的智能合约,而EOS、Polkadot和Ontology则是用于虚拟机。其余涉及WASM的项目似乎并没有真正理解WASM是做什么的。

文/烨煌

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180911G0DRRB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券