注册
关闭
区块链智慧谷

区块链智慧谷

发布于 2021-06-25 阅读数 7794

Wasm合约生态的合约编程实践

Wasm合约生态的合约编程实践

本文为节选内容,详细的开发、部署、调用代码示例请移步 查看。

近几年,一些区块链项目陆续支持使用 WebAssembly (Wasm) 来执行用户编写的智能合约。今天主要向大家简单介绍 Polkadot、NEAR、Dfinity 这3个项目,如何使用各自提供的合约语言框架实现简单的 Counter 合约,并将其编译成 Wasm 合约部署到链上。

备注:默认前置条件是已安装并配置好 Rust 的开发环境。

# 安装 Rustup

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# 配置

source $HOME/.cargo/env

# 添加 wasm

rustup target add wasm32-unknown-unknown

Polkadot

Polkadot 是具有共享安全性和互操作性的异构多链网络,网络中有中继链和平行链/平行线程。Polkadot 中继链本身不支持智能合约。但由于 Substrate 内置的Pallet-Contracts,Polkadot 上的平行链将支持 WebAssembly 智能合约。

ink! 是一种嵌入式领域特定语言 (eDSL)[1],可以使用它以 Rust 语言编写智能合约。ink! 是有“合约格式”定义的标准 Rust,使用专门的 #[ink(...)] 属性宏,这些属性宏最终允许使用 ink! 创建与 Substrate 兼容的 Wasm 字节码,然后通过Pallet-Contracts,采用 Wasm 虚拟机来运行合约。

当前支持运行于 pallet-contracts 的合约语言框架除了对应 Rust 语言的 ink! 之外,还有以下项目:

  • Ask![2],由 Patract 主导开发,是在 AssemblyScript 语言上的合约语言框架。
  • Solang,由 hyperledger-labs 主导开发,支持将 Solidity 编译到 Pallet-Contracts的 Wasm 的工具。

在开发合约之前,我们要下载安装以下工具:

https://paritytech.github.io/ink-docs/getting-started/setup

  • cargo-contract,ink! 的 CLI 工具,它用于帮助设置和管理合约
  • canvas-node,简单的 Substrate 区块链,它用于运行合约
  • Jupiter[3],Patract 维护的包含 Patract 合约设计规范并兼容最新 Pallet-Contracts 模块,它可用于运行合约。

详细的开发、部署、调用代码示例请移步 查看。

更多细节参考 ink! 文档:

https://paritytech.github.io/ink-docs/getting-started/creating-an-ink-project

NEAR

NEAR 是开放网络的基础架构,提供了一个去中心化应用平台。通过底层的可延展性,中间层的优化,应用层成熟的工具,为开发者和用户提供简洁友好的使用体验。

目前,NEAR 通过 NEAR SDK 支持两种语言 AssemblyScript 和 Rust 开发智能合约。无论使用哪种语言来构建智能合约,一旦编译为 Wasm,它们最终会以完全相同的方式在 NEAR 平台上部署和执行。

详细的开发、部署、调用代码示例请移步 查看。

更多细节参考开发者文档:

https://docs.near.org/docs/develop/contracts/overview

DFINITY

DFINITY 的 Internet Computer 是一个用于运行软件的分布式和去中心化平台。在 Internet Computer 上编写的应用程序源代码,会被编译成 WebAssembly 模块。当 Internet Computer 部署了包含应用程序的 WebAssembly 模块时,该程序将在称为软件 canister 的计算单元内执行。终端用户可以通过前端客户端(如浏览器)访问应用程序为该 canister 定义的入口函数,从而与该软件交互。

DFINITY 支持的合约语言是 Rust 以及 DFINITY 创建的现代编程语言 Motoko,Motoko 编程语言针对在 Internet Computer 区块链上开发和运行程序进行了优化,并与开发工具包 DFINITY Canister SDK 配合使用。

在开发合约之前,先下载并安装 DFINITY Canister SDK。

https://sdk.dfinity.org/docs/quickstart/local-quickstart.html#download-and-install

详细的开发、部署、调用代码示例请移步 查看。

更多细节参考 DFINITY 文档:

https://sdk.dfinity.org/docs/rust-guide/rust-quickstart.html

小结

通过实践我们发现做智能合约开发,遵循的基本步骤是:

1.通过工具初始化项目,编写合约代码,并编译合约;
2.部署合约到本地区块链或测试网络上;
3.调用合约中的方法。

Wasm合约生态的合约编程实践

备注:Patract 关于合约语言框架(https://docs.patract.io/contracts/language.html)的描述。

我们可以看出部署智能合约有多种方式,命令行的,浏览器的都有,但这往往跟我们程序员的风格不太相符,因为我们习惯了在 IDE 里写代码然后打包运行看效果。虽然目前 IDE 中已经存在一些合约插件,可以编写智能合约,但是部署智能合约却要另走他路,没办法进行一个快捷的部署与测试。

  • 0
区块链智慧谷
区块链智慧谷

0 条评论