WASM 智能合约生态系统搭便车指南

WASM 智能合约生态系统搭便车指南

原文出自 Astar Network 首席产品经理 Hoon Kim请浏览至文末左下角查看原文链接

引 言

智能合约允许其他人在区块链之上创建自定义用例。

一个区块链要支持智能合约,必须拥有一个智能合约执行环境或者说智能合约虚拟机。目前最流行的是最先由以太坊区块链引入的以太坊虚拟机(EVM),被许多希望利用以太坊所能创造的大规模生态系统的不同网络所采用。然而,除了 EVM,还有其他的智能合约虚拟机,其中大部分是基于 WebAssembly(WASM)构建的。

EVM vs WASM 

EVM 是一个基于堆栈的状态机,能够将 EVM 操作码解释为可以在区块链上执行的计算指令,由 Polkadot 创始人 Gavin Wood 博士研创。开发人员可以使用面向合约的语言,如 Solidity 或 Vyper,来编写那些能够编译成 EVM 字节码的应用程序。EVM 的深度有 1024 项,每项是一个 256-bit 的字。

1024 项的限制意味着 EVM 智能合约存在固有的复杂性限制。除此之外,由于所有的操作都是 256-bit 的,那么在计算这些操作时,所有非 256-bit 的处理器就都会有很大的开销。

此外,语言能力也是一个问题,因为 EVM 字节码是需要从头开始制作的,所以任何其他以 EVM 为目标的语言都将不得不从头开始创建编译器,这非常不利于可扩展性,更不用说进入门槛非常高的合约语言。总的来说,EVM 的限制使得 Solidity dApp 开发者在创建复杂的用例时面临很大的挑战。

随着更高级的用例的出现,智能合约需要更高的复杂性,EVM 局限性浮出水面,此时便是基于 WASM 的智能合约的用武之地。

从技术上来讲,WASM 是一种二进制指令格式,可以运行在基于堆栈的、能够实现一些指令(如 V8)的虚拟机之上。但一般情况下,当我们提及 WASM 时,我们指的是一个可以执行 WASM 指令的通用虚拟机。WASM 本身是一个通用标准,用于从浏览器环境中执行本地级操作。其开发工作由谷歌、微软、Mozilla、苹果等行业领导者主导。有了 WASM 的加持,你可以从浏览器中运行任何硬件密集型的工作(如,游戏),并具有接近本地级的性能。

与 EVM 类似,WASM 自身也是一个基于堆栈的、通过字节码进行操作的虚拟机。在 WASM 中编程意味着需要使用一种高级语言 ——  WASM 字节码:可被编译为仅能在 WASM 沙盒(虚拟机)中运行。换句话说,WASM 可以说是智能合约虚拟机的完美结合。许多流行的区块链也认同这个观点,因为越来越多的高性能网络使用个性化的虚拟机,这些虚拟机要么受到 WASM 的启发,要么直接使用 WASM。

WASM 相对于 EVM 的主要优势如下,但不限于:

本地 32/64-bit 操作

广泛的语言支持

更易于生态系统扩展

高性能、高兼容性

也许 WASM 相对于 EVM 还有更多优势,但以上几点是区块链生态系统正在转向 WASM(包括 eWASM——EVM 的 WASM 实现)的主要原因是。

由此可知,基于 WASM 的智能合约在技术上是优于 EVM 的,但为什么 EVM 在 dApp 开发方面仍是王者呢?为什么这么多网络仍在使用 EVM 呢?

答案其实很简单,归功于它的开发者生态系统。其背后

(1)有许多工具、例子、材料和社区;

(2)Solidity 是许多新 dApp 开发者的入门语言;而且

(3)大多数具有高流动性的区块链都支持 EVM。

这些都是新项目无法视而不见的。

那么,让我们来看看其他使用替代虚拟机(非 EVM)的区块链网络是如何管理他们的生态系统。

 其他智能合约平台

  Solana

Solana 因其近乎即时最终确定性(Near-instant Finality)和智能合约性能而闻名。

注:近乎即时最终确定性是指区块链交易在很短的时间内达到不可逆状态的能力。这意味着一旦交易被处理和确认,它们就很快达到一个状态,在这个状态下,它们不再有可能被反转或回滚。这样的特性有助于提高区块链的性能,降低延迟,并增强用户体验。

Solana 

把自己的智能合约称为可以通过 C++ 和 Rust 语言编写的 “链上程序”。在技术层面,Solana 并不在 WASM 中运行,相反,他们使用 Berkeley Packet Filter 字节码来作为他们的虚拟机;而合约语言则使用 LLVM(与针对 WASM 的编译器相同)来编译他们的程序,如此仅需对 WASM 进行最小程度的更改,就可非常容易地重新编译代码。

主要的文档可以在官方的 Solana docs(https://docs.solana.com/)

中查看,所有新开发人员都可以从这里开始,但里面没有由核心团队维护或认可的其他教育材料。

尽管他们的客户端 API @solana/web3.js 由于与链上程序的通信方式而显得乏善可陈,但他们的最大优势来自于他们的一体式工具 —— Solana Command-line 工具。

通过一个 CLI 工具,用户便可以使用以下功能,仅举几例:

水龙头空投

账户管理

部署链上程序

创建交易

节点管理

质押(Staking)

签名工具 (Signature utility)

在 CLI 中有一个由核心团队维护的独立存储库,开发人员可以将其应用于他们的项目,并没有嵌入脚手架。

  Near

Near 因其 Nightshade Shards(一种区块链分片技术,旨在提高区块链的可扩展性和性能) 和高性能的 WASM 智能合约虚拟机而闻名。

* Nightshade Shards 是一种区块链分片技术,旨在提高区块链的可扩展性和性能。

但它能够在开发者中流传的另一个原因可能是它成熟的开发者生态系统。你可以用 Rust 和 AssemblyScript(TypeScript 的一个变种)编写 Near 智能合约。

与 Solana 类似,Near 也有一个独立的文档网站(https://docs.near.org/)。初次开发者有此文档便可进行客户端和智能合约的开发,其中还包含跳转到节点管理/开发的链接。

他们还有一个外部资源列表,对希望在首页学习的开发者很有帮助。

Near 也有自己的 JavaScript 客户端 API —— near-api-js 。开发人员可以使用这个 API 为节点创建任何 RPC,如调用智能合约以及进行交易等。

也许 Near 拥有的最强大的工具是 Near CLI ,一个 Node.js CLI 工具,在后端使用 near-api-js 与 Near 区块链互动。

通过 Near CLI 可以实现以下功能:

账户管理

部署智能合约

与智能合约互动

创建交易

管理验证者

架构 dApp 库(合约和前端)

  CosmWasm

Cosmos 生态系统与 Polkadot 生态系统非常相似,都有一个核心 SDK 用于构建具有互操作性的模块化区块链。CosmWasm 是 Cosmos SDK 的一个模块,为 Cosmos 生态系统增加了智能合约功能,Terra 便是使用的该模块。目前,CosmWasm 仅正式支持 Rust 智能合约,不过由于核心模块是用 Go 编写的,我们可以想象其在未来将扩展语言支持。

由于 CosmWasm 是 Cosmos SDK 的一个模块,所以它有一个 CosmWasm 开发者主文件和多个小文件,这些文件经由使用 CosmWasm 模块的 Cosmos 生态系统项目维护。

比如,Terra Academy (https://academy.terra.money) 是学习使用 Rust 进行实践开发以及用 CosmWasm 进行智能合约开发的主要资源。而主 Terra 文档只包含了 CosmWasm 智能合约的开发人员参考。

大部分的开发者文档都可以在 CosmWasm 主文档页面(https://docs.cosmwasm.com)找到。然而,CosmWasm 并不是一个主权区块链,大多数新开发者开始旅程之处仍是那些使用 CosmWasm 模块的项目所维护的文档,但最终需参考主文档以了解细节。

CosmWasm 有自己的 JavaScript API —— CosmJs 和 terra.js,后者用于与 Terra 网络上的 WASM 智能合约进行互动。

与其他网络不同,CosmWasm 没有专门的一体化 CLI 工具,但它使用 cargo 来编译 Rust 智能合约,使用称为 wasmd 的 Go CLI 来对其进行部署并从终端与之互动。然而,在为 CosmWasm 设置开发者环境时,需要许多手动配置和先决条件。这也就是为什么 Terra 会有一个名为 Terrain 的一体化 CLI 工具,可以用于做以下工作:

帐户管理

网络管理

架构 dApp 资源库(合约和前端)

测试

部署智能合约

与合约互动

客户端脚本框架

  Polkadot/Substrate

Polkadot 生态系统也有一个有趣的结构 —— Polkadot 网络本身并不支持智能合约。但用 Substrate(相当于一个 Polkadot SDK )构建的区块链可以实现一个称为合约托盘(Contract Pallet)的 runtime 模块。这个 Pallet 允许任何实现它的区块链执行 WASM 智能合约,目前支持 ink!( Rust 的一个 eDSL ),并且正在努力支持 AssemblyScript 的 eDSL 。

Substrate 的 WASM 合约文档相当混乱且分散,没有一个独立的资源,这是因为 Substrate 将合约托盘 、WASM 合约语言(ink!)和 JavaScript API 都视为单独的项目。

Substrate 节点的开发者可以通过官方的 Substrate 开发者文档:

https://docs.substrate.io/v3/runtime/smart-contracts/ 

和他们的研习内容:

https://docs.substrate.io/tutorials/v3/ink-workshop/pt1/ 

来了解合约托盘。

希望建立在 Polkadot 生态系统上的新开发者可以从官方 Polkadot 文档开始:

https://wiki.polkadot.network/docs/build-smart-contracts

但最终,他们仍不得不从官方的 ink! 文档

https://ink.substrate.io/

或从个别平行链的开发者文档,如 Astar Network 提供的

https://docs.astar.network/wasm-smart-contracts/smart-contract-development

中阅读详细的开发指南。

某种程度上,Polkadot/Substrate 生态系统中最全面、最成熟的 WASM 智能合约开发者文档,可能是由 SuperColony 维护的 OpenBrush 。这对使用 ink! 进行一般 WASM 合约开发来说是最好的资源。

Polkadot/Substrate 也有一个名为 @polkadot/api 的 JavaScript API ,也有自己的文档。由于智能合约 API 是 Polkadot API 包的一部分,所以文档被保存在这里,由 Polkadot.js 团队维护。

正如你所看到的,在 Polkadot/Substrate 生态系统上开发 WASM 智能合约,没有像其他项目那样的可独立使用的文档。并且,由于合约托盘、语言编译器和与合约交互的 JavaScript API 都分别被视为独立的项目,所以这些文档也是被分开保存的,没有一个能够让新开发者一目了然地了解所有这些东西的统一资源。

对于 CLI 工具,Polkadot/Substrate 没有像 Terrain、Near CLI 或 Solana CLI 那样的一体化工具或标准开发者环境来构建智能合约。与之相反,这些工具被分割成 Substrate 节点管理工具和语言编译器工具。虽然曾经有一个名为 Redspot 的工具,简化了智能合约开发者的节点设置和账户管理过程,但这个工具已不再被维护。

Substrate CLI 提供以下功能:

帐户管理

签名人工具

节点管理

网络管理

而 ink! 合约编译器 CLI(也被称为 cargo 合约)提供以下功能:

创建合约

部署合约

运行单元测试

与智能合约互动

解码合同数据

 生态系统 

截至目前,我们已经探讨了 WASM 合约生态系统所能提供的东西,接下来,让我们来比较和对比一下这些网络。

正如你所看到的,单一的区块链网络更容易提供统一的开发者环境和文档,这对新的开发人员非常友好,使他们可以一目了然地了解一切。而像 Cosmos 和 Polkadot/Substrate 这样的区块链架构和 L0 链,很难创建一个统一的开发者环境和 CLI 工具,因为这可能会使某些网络出现偏差,这就是为什么建立在这类框架之上的区块链自然要像 Terra 那样再提供文档和工具。但相较之下,CosmWasm 比 Substrate 的处理方式更统一,因为 CosmWasm 是将语言、合约模块和 JavaScript API 作为单一项目的一部分,而不是像 Substrate 那样将所有东西分开作为独立个体。

现在,我们来看看工具支持。

首先,像 Near 和 Solana 这样的区块链为开发者提供了更多集成式的一体化工具,而带有 CosmWasm 的 Cosmos 生态系统只提供了基本功能,并依靠其生态系统项目,如 Terra ,与现有工具一起创建一个完全集成的环境。

其次,从另一方面,Substrate CLI 工具又非常分散,开发者必须首先设置一个本地合约节点来作为部署目标。并且,尽管有 cargo 合约,Substrate 生态系统依然被期望拥有更多的智能合约语言,如 ask ,这是因为如果一个 CLI 工具是专门为一种语言设计的,那么它将很难在未来被其他语言采用。

WASMS Swanky 😎 

从前面的章节可知,尽管 WASM 合约生态系统还很新,但有许多高知名度的项目正在积极地以实际行动推动这项技术的大规模采用。而 Substrate 生态系统的进展似乎仍然是缓慢和混乱的,即使其底层技术与前者相当甚至更好。

这里也就是我们的切入点,Astar Network 旨在推动 Substrate WASM 生态系统,以服务未来所有希望利用 Astar Network 互操作性的 dApps 。

为了做到这一点,我们将专注地为那些将从 Astar Network 开始开发者旅程的人们,提供统一的开发者文档、增加开发者教育、孵化并资助新的和创新的 WASM dApps ,以及,最重要的是创建 Swanky CLI 。

Astar 生态系统非常需要 Substrate WASM 合约开发者,对他们来讲,目前正大力开发的 Swanky CLI 是一个一体化 CLI 工具,我们计划支持的功能如:

单元测试

合同互动

部署

账户管理

开发者节点设置

截至六月底以及更远将来,我们将增加:

集成测试

为前端应用程序和合约搭建脚手架

以及更多

因为代码库是在模块化的前提下创建的,所以随着更多项目的加入,Swanky 将增加对多种智能合约语言的支持,以扩大生态系统。我们很高兴能成为智能合约未来的一部分。

以上就是 WASM 智能合约开发者生态系统的搭便车指南。

致谢。

END

About PAKA

PAKA 是一个由众多波卡平行链发起人联合创建的 DAO Venture,旨在发掘和帮助波卡以及 Web3 生态的创新团队。我们希望能够将每一代创业者的创业经验和技术沉淀,通过 DAO 的方式帮助到下一代创业者,推动 Web3 的愿景实现。

往期推荐

Skybreach:RMRK打造的元宇宙[攻略]

模块化视角下的L2、SCP、平行链反思DeFi治理的症结《拥抱 De-Service,它将构成我们未来的世》

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注