作者:PaperMoon 团队

选区块链,通常意味着选一条路走到黑。你用了以太坊的 Solidity,就很难同时享受 Rust 的性能优势;你选了 WASM 运行时,就放弃了以太坊生态的工具链。这种"选了就锁死"的模式,是行业里长期存在的痛点。

Parity Technologies 在最近的一条推文中直接点破了这个问题:

"Developers often assume choosing a blockchain means committing to a single execution model forever... Most ecosystems force you to pick one. Polkadot separates infrastructure from execution."
@paritytech, https://x.com/paritytech/status/2037462186553958555

翻译过来就是:Polkadot 把基础设施和执行层解耦了,你不用在 EVM 和 WASM 之间做取舍,两个都能用。而推文最后推荐的入口,是一个叫 RevX 的工具。

今天我们就来聊聊:Polkadot 的"全都要"到底是怎么实现的?RevX 又是什么?怎么用它写出你的第一个 Rust 智能合约?

Polkadot 的多执行模型:不是"或",是"和"

在理解 RevX 之前,先搞清楚 Polkadot 的底层架构为什么能做到"多路并行"。

传统区块链的困境

以太坊只有 EVM(以太坊虚拟机),你只能用 Solidity 或 Vyper 写合约。Solana 用的是 BPF/SVM,你必须用 Rust + Anchor。每条链的虚拟机决定了你能用什么语言、什么工具、什么生态——选了就走不了回头路。

Polkadot 的解法:PolkaVM + pallet-revive

Polkadot Hub 的智能合约环境建立在两个核心组件之上:

- pallet-revive:Polkadot 的智能合约运行模块,类似以太坊的 EVM,但设计上支持多种字节码格式
- PolkaVM:基于 RISC-V(一种开放的硬件指令集架构,被广泛用于嵌入式系统和学术研究)的高性能虚拟机

这套架构的关键在于:pallet-revive 同时支持 EVM 字节码和 RISC-V 字节码。也就是说:

路径 语言 编译目标 运行环境 工具链
以太坊兼容路径 Solidity EVM 字节码 pallet-revive (EVM 模式) MetaMask, Hardhat, Foundry
Polkadot 原生路径 Rust RISC-V 字节码 PolkaVM RevX, Foundry-Polkadot

最关键的一点:两种合约可以互相调用。你用 Solidity 写的 DeFi 协议,可以直接调用用 Rust 写的高性能计算模块——反过来也行。这不是两条平行线,而是一张网。

RevX 是什么?

RevX (https://revx.dev/) 是 Parity Technologies 推出的浏览器端 Rust 智能合约 IDE,于 2026 年 2 月 19 日开放 Beta 测试。它的定位很清晰:让 Rust 开发者像用 Remix 写 Solidity 一样,在浏览器里写 Rust 合约、编译、部署到 PolkaVM。

核心特点

- 纯浏览器操作:不需要本地安装任何工具链,打开网页就能写代码
- Bare Rust:直接用原生 Rust 编写合约,编译为 RISC-V 字节码,不依赖 ink! 或其他框架
- 服务器端编译:代码在服务器上编译(约 20-30 秒),不占用本地资源
- AI 辅助编码:内置 AI 功能,可以根据自然语言描述生成合约模板
- **GitHub 集成**:支持从 GitHub 导入项目,也可以将代码推送回去
- **钱包自动检测**:自动识别浏览器中的 Polkadot 钱包插件
- **Bulletin 社区**:可以将你的合约项目分享到社区 Bulletin 上

### RevX vs Remix:一张对比表

如果你用过 Remix(以太坊的在线 IDE),这张表能帮你快速定位 RevX 的角色:

维度 Remix (以太坊) RevX (Polkadot)
语言 Solidity Rust
编译目标 EVM 字节码 RISC-V 字节码
运行环境 EVM PolkaVM
编译位置 浏览器本地 服务器端
框架依赖 无(原生 Solidity) 无(Bare Rust,不依赖 ink!)
AI 辅助 ❌ 无 ✅ 有

实战:用 RevX 部署你的第一个 Rust 合约

下面是完整的动手流程。你只需要一个浏览器和一个 Polkadot 钱包。

前置准备

1. 安装 Polkadot.js 插件:[polkadot.js.org/extension](https://polkadot.js.org/extension/),创建一个账户
2. 领取测试币:到 [Polkadot 水龙头](https://faucet.polkadot.io/) 领取 PAS(选择 Paseo Asset Hub 测试网)
3. 打开 RevX:访问 [revx.dev](https://revx.dev/)

步骤一:选择或创建合约模板

打开 RevX 后,你会看到几个选项:

- Pick a template:从预置的合约模板开始(推荐新手使用)
- Describe what you want:用自然语言描述你想构建的合约,AI 会生成初始代码
- import from GitHub:导入已有的 Rust 合约项目

对于第一次体验,选择一个预置模板即可——比如最基础的存储合约(Storage Contract),它实现了链上数据的读写操作。

步骤二:理解 Bare Rust 合约结构

RevX 使用的是 Bare Rust,不是 ink! 框架。这意味着你直接操作底层 API,没有宏(macro)帮你自动生成 ABI 和存储布局。一个最简单的 Rust 合约结构大致如下:

```rust
// A minimal Polkadot Rust smart contract
// 中文:一个最简单的 Polkadot Rust 智能合约

#![no_std]
#![no_main]

// Entry point for the contract
// 中文:合约的入口函数
#[no_mangle]
pub extern "C" fn call() {
    // Your contract logic here
    // 中文:在这里编写合约逻辑
}

// Called when the contract is first deployed
// 中文:合约首次部署时调用
#[no_mangle]
pub extern "C" fn deploy() {
    // Initialization logic
    // 中文:初始化逻辑
}
```

注意几个关键点:

- `#![no_std]`:不使用 Rust 标准库(区块链环境下没有操作系统)
- `#![no_main]`:没有 main 函数,合约通过 `call()` 和 `deploy()` 入口执行
- `#[no_mangle]`:防止编译器重命名函数,确保 PolkaVM 能找到入口

> **与 ink! 的区别**:如果你之前用过 ink!(Polkadot 之前的 Rust 合约框架),会发现 Bare Rust 更底层——没有 `#[ink::contract]` 宏、没有自动 ABI 生成、没有内置存储管理。这带来了更大的灵活性,但也意味着你需要自己处理更多细节。ink! Alliance 将此类比为"在 Solana 上不用 Anchor、直接写裸 Rust"。

步骤三:编译合约

在 RevX 编辑器中写好代码后:

1. 点击界面上的 **Build** 按钮
2. 代码会被发送到服务器端进行编译(大约 20-30 秒)
3. 编译成功后,你会得到 RISC-V 格式的字节码

如果编译失败,RevX 会显示 Rust 编译器的错误信息——和你在本地用 `cargo build` 看到的错误格式一样。

步骤四:部署到测试网

编译成功后:

1. 点击 **Deploy** 按钮
2. RevX 会自动检测你浏览器中的 Polkadot.js 钱包
3. 选择你的测试账户(确保有 PAS 余额)
4. 确认部署交易并签名
5. 等待交易上链(几秒钟)

部署成功后,你会看到合约地址。你可以把这个地址粘贴到测试网的区块浏览器中验证:

- BlockScout:`https://blockscout-testnet.polkadot.io/`
- Subscan:`https://assethub-paseo.subscan.io/`

步骤五:与合约交互

部署完成后,RevX 提供了直接在浏览器中与合约交互的界面:

1. 选择要调用的函数
2. 填入参数(如果有的话)
3. 选择「读取」(免费查询)或「写入」(需要签名和 Gas)
4. 查看返回结果

进阶:Foundry-Polkadot 本地开发工作流

RevX 非常适合快速原型验证和学习,但如果你要做正式项目开发,可能需要本地开发环境。这时候 **Foundry-Polkadot** 就派上用场了。

什么是 Foundry-Polkadot?

Foundry 是以太坊生态最流行的开发框架之一(`forge`, `cast`, `anvil`)。Parity 团队为它开发了 Polkadot 适配版本,核心创新是 `forge test --polkadot` 命令——让你的 Solidity 测试直接在 pallet-revive 中运行,而不是标准 EVM。

它与 RevX 的关系

```text
开发工具定位:

RevX(浏览器 IDE)
  → 快速原型、学习、小型项目
  → Rust → RISC-V → PolkaVM

Foundry-Polkadot(本地 CLI)
  → 正式项目开发、CI/CD 集成、测试
  → Solidity → EVM 或 PVM 字节码 → pallet-revive
```

双后端测试

Foundry-Polkadot 支持两种执行后端:

后端 命令 说明 稳定性
EVM forge test --polkadot 用 REVM 解释器执行 EVM 字节码 ✅ 稳定(90-100% 通过率)
PVM forge test --polkadot=pvm 用 PolkaVM 执行 RISC-V 字节码 ⚠️ 实验性

还可以在测试中动态切换后端:

```solidity
// Switch to Polkadot execution within a test
// 中文:在测试中切换到 Polkadot 执行环境
vm.polkadot();
```

配套的 anvil-polkadot 提供本地 Substrate 节点 + 以太坊兼容 RPC,替代标准 `anvil` 作为本地开发环境。

两条路径怎么选?

回到最开始的问题——Polkadot 给了你选择权,但选择多了反而容易迷茫。这里给一个实用的决策框架:

选 Solidity + EVM 路径,如果你是:

- 已有以太坊项目想迁移到 Polkadot
- 团队技术栈以 Solidity 为主
- 需要立即使用成熟的 DeFi 协议和工具(OpenZeppelin、Hardhat、Foundry)
- 优先考虑"快速上线"而非极致性能

选 Rust + PolkaVM 路径,如果你是:

- Rust 开发者想进入区块链领域
- 需要更低的执行成本和更高的计算性能
- 正在构建计算密集型应用(如链上 ZK 验证、复杂数学运算)
- 愿意接受更早期的工具生态(RevX 仍在 Beta 阶段)

或者两个都用:

这才是 Polkadot 真正的优势。一个实际的例子:

- **DeFi 协议核心**用 Solidity 写(复用 OpenZeppelin 的审计过的合约库)
- **高性能计算模块**用 Rust 写(链上价格计算、风险模型)
- 两者部署在同一个 Polkadot Hub 上,**直接互相调用**,不需要跨链桥

已知限制和注意事项

任何处于早期阶段的工具都有局限性,使用时需要注意:

RevX 方面

- **Beta 阶段**:功能仍在快速迭代中,可能遇到 Bug
- **服务器端编译**:编译依赖 Parity 的服务器,高并发时可能变慢
- **Bare Rust 复杂度**:没有 ink! 的安全抽象,需要开发者自行处理存储管理、ABI 编码等底层细节
- **生态早期**:Rust 合约的库和示例还在积累中,不像 Solidity 那样有海量开源代码可参考

pallet-revive 方面

- **Gas 模型差异**:与标准 EVM 的 Gas 计算不完全一致
- **数值类型不兼容**:余额使用 u128(不是 EVM 的 u256),区块数据使用 u64(不是 EVM 的 u256)
- **初版重心在正确性**:性能优化将在后续版本迭代

全景图:Polkadot 智能合约工具链一览

把本文涉及的所有工具和路径整理到一张图里:

```text
Polkadot Hub 智能合约生态

├── EVM 兼容路径(以太坊开发者)
│   ├── 语言:Solidity
│   ├── 编译:Revive(Solidity → RISC-V / EVM 字节码)
│   ├── 工具:MetaMask, Hardhat, Foundry-Polkadot, Remix
│   ├── 测试:forge test --polkadot(EVM 后端)
│   └── 浏览器:BlockScout, Routescan, Subscan

├── Polkadot 原生路径(Rust 开发者)
│   ├── 语言:Rust(Bare Rust)
│   ├── 编译:RevX / rustc → RISC-V 字节码
│   ├── 工具:RevX (浏览器 IDE), Foundry-Polkadot (PVM 后端)
│   ├── 测试:forge test --polkadot=pvm(实验性)
│   └── 浏览器:Subscan(支持 Substrate 原生数据)

└── 两条路径共享
    ├── 运行环境:pallet-revive
    ├── 虚拟机:PolkaVM (RISC-V)
    ├── 跨链:XCM(内置,无需桥接)
    └── 合约互操作:EVM 合约 ↔ PVM 合约 可直接互相调用
```

Polkadot 给了开发者一个在其他链上不存在的选项:**不做选择**。你可以用最熟悉的语言开始,等项目成长后再引入另一条路径的优势——而不是从第一天就被锁死在一个生态里。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐