查看原文
其他

诸多开发者使用的WebAssembly(Wasm)是一种什么工具?

Polkadot Labs Polkadot生态研究院 2022-03-30


波卡知识图谱是我们针对波卡从零到一的入门级文章,我们尝试从波卡最基础的部分讲起,为大家提供全方位了解波卡的内容,当然这是一项巨大的工程,也充满了挑战,然而我们希望通过这样的努力让大家能够正确认知波卡,也让不了解波卡的人方便快速掌握波卡相关知识,今天是该栏目的第30期,了解一种便捷、安全的开发者工具WebAssembly。



此前,关于使用Wasm进行区块链开发的话题,就引起了广泛的讨论。

EVM是区块链常用的虚拟机,也是以太坊的智能合约运行环境,虽然EVM的出现能使得开发人员更便捷的部署智能合约,但其也有很多局限性。

为了解决这些局限性,一些新兴的公链开始使用WebAssembly技术,那么这个WebAssembly是什么呢?




什么是WebAssembly?



WebAssembly,简称Wasm。官方的定义是:一个可移植、体积小、加载快并且兼容Web的全新格式。

准确来说,
Wasm是一种为基于堆栈的虚拟机设计的二进制指令格式。Wasm被设计为用类似C/C++/Rust等高级语言的平台目标,从而可以在Web上部署客户端和服务器应用程序。
 
Wasm是由万维网联盟(W3C)创建和定义的,最早是为Web而推进的标准,还得到了谷歌、微软、苹果和Mozilla等厂商的支持。最初Wasm的设计目的是为了解决JavaScript(一种编程语言)的性能问题。




WebAssembly有什么特点?



WebAssembly作为一个编译目标而不是手写的几行代码,它能将C、C++、Java等编程语言编译为机器码,这个过程中省略了转换器。因此,Wasm有着快速高效、内存安全等特点,并且十分开放获得了许多开发者的喜爱
 
高效:Wasm有着一套完整的语义,它的二进制格式加载速度快并且能在很大程度上减小代码包的体积,最终凭借硬件能力以达到原生执行效率。
 
安全性:Wasm是运行在一个沙箱化的执行环境中,甚至可以和当前的Java虚拟机共享一套环境。通过严格遵守主机浏览器的权限策略和保持向后兼容性来实现Web环境中的安全性。
 
开放:首先Wasm具备人类可读的文本格式,这种非常规整的文本格式可以用来测试、实验、调试、学习、优化以及编写,并且Wasm的开放标准不受任何一家厂商控制。




为什么使用WebAssembly?



WebAssembly是一种与平台无关的二进制格式,这意味着它将在其操作的任何机器上运行相同的指令。区块链需要确定性,以便在点对点网络中的所有节点上有可靠的状态转换更新,而无需强制每个节点运行完全相同的硬件。

Wasm很适合在各种各样的机器中实现可靠性。Wasm既高效又快捷。这种效率意味着它可以作为一个代码块上传到链上,而不会造成太多的状态膨胀,同时保持其以接近原生速度执行的能力。
 
其次,硬分叉作为升级区块链的标准方法,由于需要离线协调的级别,所以这种升级速度缓慢、效率低下且容易出错,因此,它倾向于将许多升级捆绑到一个大规模事件中。

而将Wasm使用在基于Substrate框架的波卡或Kusama中,这些链能够升级其Runtime逻辑而无需硬分叉。
通过在链上部署Wasm,并让节点在特定的块高度自动执行新逻辑,升级可以是小型的、孤立的、非常具体的




后记



WebAssembly作为一个广泛支持的高性能标准,也得到了波卡创始人Gavin Wood的肯定,Gavin认为,“WebAssembly是智能合约的未来”
 
这种格式还在快速发展的过程中,未来还会是分布式系统开发的基础。许多公链也在逐渐使用Wasm技术。而对于开发者而言,波卡智能合约可以用任何编译成Wasm的语言进行开发,而智能合约开发也会变得更加容易。
 
波卡是采用Wasm技术的,当然波卡还能兼容EVM,横跨新老技术的波卡其生态发展的后劲十足,值得期待。







欢迎大家加入我们Polkadot生态研究院的电报:

https://t.me/polkadot_eri

欢迎大家访问波卡生态研究院的Mirror地址:
https://mirror.xyz/0x9A259b3a2316281Cc948cE2Cf1Ac610a79844f05




精选文章


平行线程 | 经济模型 |Slash | 通货膨胀 | NPoS | Web3基金会
Staking
| Gavin Wood | 跨链 | 平行链 | 国库 | Parity
DOT | Web3.0 | 网络效应 | Grant指南
公链
| 区块链 | SBP计划 | 新计划
XCVM | BEEFY | XCM
XCVM



 




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存