使用Ink!在PolkaVM上进行开发

文章介绍了在Polkadot上使用Rust语言的ink!框架在PolkaVM虚拟机上开发智能合约的方法。PolkaVM支持以太坊的JSON-RPC接口,使得使用ink! (version 6) 编写的智能合约可以在PolkaVM上运行。文章还提供了一个简单的步骤指南,包括安装ink! v6、实现flipper合约并编译,创建viem项目与PolkaVM交互,以及进行测试。

动机

我认为对于简单的程序——例如示例、演示应用程序或那些在测试网上用于概念验证部署的程序——Solidity 就足够了。然而,当涉及到实现旨在生产使用的应用程序时,说实话,Solidity 不是我首选的语言。

对于简单的逻辑,Solidity 可以完成任务。但是,当目标是实现稍微复杂的过程时,我发现 Solidity 不足。我认为这是由于强大的库数量有限、知识库不足,以及最终开发者社区相对较小。

在我看来,这种情况让人想起 TypeScript 从 JavaScript 中脱颖而出的背景。随着代码库在规模和复杂性上不断增长,并且随着对可维护性和正确性的要求不断提高,一种更合适的编程语言变得至关重要。

从这个角度来看,我认为使用 Rust 进行智能合约开发的能力为构建用于生产环境的应用程序的开发人员提供了一个极其强大的工具集。

智能合约中的 Rust

截至目前,如果你想在 Rust 中而不是 Solidity 中实现智能合约,你不能在以太坊上这样做。更准确地说,这在 EVM 上是不可能的。

这就是为什么我选择 Polkadot 上的 WASM 合约作为实现我自己应用程序的替代方案之一。这就是 Ink! 发挥作用的地方,我将在下面介绍它。

(我不太熟悉其他区块链的当前状态,但据我所知,Rust 也可以用于在 NEAR、Solana 和 Sui 等平台上实现智能合约。)

但是,在 Polkadot 上实现 WASM 合约时,关键的限制——除非你使用跨链桥——是没有与以太坊智能合约通信的本地方式。Polkadot 确实有一个名为 Frontier EVM 的虚拟机,但不幸的是,它不支持最新的 EIP,因此,以太坊社区开发的各种应用程序无法在 Polkadot 上实现。

当时,Polkadot 链通常在同一条链上运行两个独立的虚拟机——一个用于 EVM,另一个用于 WASM 智能合约——但在两者之间共享数据在技术上很困难。

(有一种称为 XVM 的解决方案,这是一种由 Astar 团队开发的虚拟机间通信技术。)

什么是 Ink!?

https://use.ink/docs/v6/

以上是 Ink! 官方网站的摘录。简而言之,我将其理解为一种智能合约开发环境,允许使用 Rust 进行实现。

Ink! 不是新发布的产品。它已经存在很长时间了,最初是作为一种智能合约框架实现的,旨在在 Polkadot 平行链上运行。

有关更多详细信息,请参阅 Ink! 官方主页。

Home

这次有什么不同?

那么,这次有什么新东西呢?是 PolkaVM。PolkaVM 是一种基于 RISC-V 体系结构的虚拟机。有关更多详细信息,请参阅以下内容。

PolkaVM Design

如下图所示,PolkaVM 支持以太坊的 JSON-RPC 接口。这意味着虽然它是一个不同的虚拟机,但它可以像 EVM 一样用于与智能合约交互。当然,它与 EVM 并不完全相同,因此存在一些差异,但预计许多用 Solidity 编写的智能合约都可以在它上面运行。

https://docs.polkadot.com/polkadot-protocol/smart-contract-basics/polkavm-design/

EVM vs PolkaVM

这次我想强调的是,用 ink!(版本 6)编写的智能合约,也就是说,用 Rust 实现的合约,可以在 PolkaVM 上运行。

我想以一个简单的分步指南的形式解释这是如何工作的。

使用 Ink! 在 PolkaVM 上开发智能合约的步骤指南

该过程大致可分为以下三个步骤:

  • (1) 安装 ink! 版本 6,实现示例 flipper 合约,并编译它。
  • (2) 创建一个 viem 项目以与 PolkaVM 交互。
  • (3) 测试。

前提条件

这次,我们将使用 PassetHub 作为测试网。请参考以下网站并从 faucet 获取测试网 token。

Networks for Polkadot Hub Smart Contracts

(1) 安装 ink! 版本 6,实现示例 flipper 合约,并编译它。

如果你没有设置 ink! 版本 6 环境,请参考以下内容并完成环境设置。

Setup

注意:这次,我们不使用“ink-node”。

Get Realtakahashi Work’s stories in your inbox

Join Medium for free to get updates from this writer.

通过免费加入 Medium,可以获得这位作者的更新。

接下来,创建并编译示例合约。

通过运行以下命令,将在 flipper_v6 目录中准备一个示例合约。

cargo contract new flipper_v6

在编译之前,如下所示修改 Cargo.toml 文件。

默认情况下,ink! 配置为输出其自己的 ABI 格式。

我们需要更改此设置,以便生成与 Solidity 兼容的 ABI。

[package.metadata.ink-lang]
abi = "sol"

文件的所有其他部分可以保持不变。使用以下命令编译合约:

cd flipper_v6
cargo contract build

如果看起来像下面这样,则编译成功。

(2) 创建一个 viem 项目以与 PolkaVM 交互。

请按照以下教程创建一个与合约交互的项目。

viem for Polkadot Hub Smart Contracts

你可以使用 storage.sol 运行示例,因此首先确认你可以使用 storage.sol 将合约部署到 PolkaVM,并验证是否可以正确更新和检索值。

接下来,准备部署 flipper_v6 合约并运行测试。

  • 首先,将你之前编译的“flipper_v6.abi”文件重命名为“flipper_v6.json”并将其复制到“viem-project/artifacts”目录中。
  • 与此同时,还将“flipper_v6.polkavm”复制到同一目录。

接下来,准备部署和测试脚本。请参考以下示例。

polkavm

polkavm

添加脚本后,将以下两行添加到 package.json 文件中的“scripts”部分。

    "deployInk": "ts-node src/deployInk.ts",
    "interactInk": "ts-node src/interactInk.ts",

(3) 测试

使用如上所述准备的文件,继续运行测试。

上面描述的完整代码集存储在我的以下 GitHub 存储库中。

GitHub - realtakahashi/polkavm

下一步

我对 Polkadot 作为下一代区块链寄予厚望,我全心全意地支持它。PolkaVM 目前已在 Kusama(Polkadot 的 Canary Network)上实现,并且正在接受测试。我坚信 Polkadot 未来的技术进步及其社区的增长。

现在,我觉得社会对 web3 的期望正在降低。这背后有各种因素,但我认为最大的原因是缺乏可靠的用例。

我坚信 web3 技术可以帮助建立一个更美好的社会。我想提出尽可能多有意义的 web3 用例。

  • 原文链接: blog.blockmagnates.com/p...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
blockmagnates
blockmagnates
The New Crypto Publication on The Block