Wasm 合约生态的合约编程实践
本文为节选内容,详细的开发、部署、调用代码示例请移步 https://mp.weixin.qq.com/s/jNRlVo6fuWuj8MzD180_Bw 查看。
近几年,一些区块链项目陆续支持使用 WebAssembly (Wasm) 来执行用户编写的智能合约。今天主要向大家简单介绍 Polkadot、NEAR、Dfinity 这 3 个项目,如何使用各自提供的合约语言框架实现简单的 Counter 合约,并将其编译成 Wasm 合约部署到链上。备注:默认前置条件是已安装并配置好 Rust 的开发环境。
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 模块,它可用于运行合约。
详细的开发、部署、调用代码示例请移步 https://mp.weixin.qq.com/s/jNRlVo6fuWuj8MzD180_Bw 查看。
更多细节参考 ink! 文档:
https://paritytech.github.io/ink-docs/getting-started/creating-an-ink-project
NEAR
NEAR 是开放网络的基础架构,提供了一个去中心化应用平台。通过底层的可延展性,中间层的优化,应用层成熟的工具,为开发者和用户提供简洁友好的使用体验。
目前,NEAR 通过 NEAR SDK 支持两种语言 AssemblyScript 和 Rust 开发智能合约。无论使用哪种语言来构建智能合约,一旦编译为 Wasm,它们最终会以完全相同的方式在 NEAR 平台上部署和执行。
详细的开发、部署、调用代码示例请移步 https://mp.weixin.qq.com/s/jNRlVo6fuWuj8MzD180_Bw 查看。
更多细节参考开发者文档:
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
详细的开发、部署、调用代码示例请移步 https://mp.weixin.qq.com/s/jNRlVo6fuWuj8MzD180_Bw 查看。
更多细节参考 DFINITY 文档:
https://sdk.dfinity.org/docs/rust-guide/rust-quickstart.html
小结
通过实践我们发现做智能合约开发,遵循的基本步骤是:
1.通过工具初始化项目,编写合约代码,并编译合约;
2.部署合约到本地区块链或测试网络上;
3.调用合约中的方法。
备注:Patract 关于合约语言框架(https://docs.patract.io/contracts/language.html)的描述。
我们可以看出部署智能合约有多种方式,命令行的,浏览器的都有,但这往往跟我们程序员的风格不太相符,因为我们习惯了在 IDE 里写代码然后打包运行看效果。虽然目前 IDE 中已经存在一些合约插件,可以编写智能合约,但是部署智能合约却要另走他路,没办法进行一个快捷的部署与测试。
深耕 Polkadot 生态 Wasm 合约技术的技术服务商 Patract(https://patract.io/),提供了让 Ink!、Ask! 等合约开发项目化的开发测试套件 Redspot(https://redspot.patract.io/en/),简化开发者对合约的测试和交互过程的合约集成构建工具。Redspot 的功能覆盖整个合约开发环节(开发-调试-测试-部署),并且可以允许开发者构建丰富的插件以扩展 Redspot 的功能,最大程度简化合约开发者的负担,自动化执行重复的过程。Redspot 的设计目标类似 Ethereum 生态中的 Truffle,但是会比 Truffle 具备更广泛的扩展功能。
同时,Patract 设计了 Europa(https://github.com/patractlabs/europa),用于帮助合约开发者调试及测试合约的合约沙盒。该合约沙盒的定位类似于 Ethereum 生态中的 Ganache,但 Europa 的特性更多的体现在其提供了部署调用合约过程中的详细执行信息的日志,能够最大程度反应出合约模块这个“黑盒”的运行情况,对合约的开发者十分有帮助。
About Patract
Patract 为波卡 Wasm 合约生态的平行链和 DApp 开发提供解决方案。我们帮助社区平行链设计和开发链上合约模块和 Runtime 支持,并且为 DApp 开发者提供覆盖开发、测试、调试、部署、监控、数据提供和前端开发等阶段的全栈工具和服务支持。
How to join Patract
1.对于合约开发者,可以访问官网(https://patract.io),熟悉测试链和工具套件。欢迎加入官方开发群:Element(https://app.element.io/#/room/#PatractLabsDev:matrix.org)
Discord(https://discord.gg/wJ8TnTfjcq)
2.对于将要集成 Wasm 合约功能的平行链项目方,或者使用 Wasm 合约开发的 DApp 项目方,欢迎加入 Patract 开放平台:https://open.patract.io
3.对于用户,欢迎加入:
Telegram(https://t.me/patract)
Twitter(https://twitter.com/PatractLabs)
4.对于求职者,我们在招聘区块链开发工程师、前端/全栈开发工程师、产品经理等岗位,可以联系 sean@patract.io
评论