找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2697

积分

0

好友

353

主题
发表于 5 天前 | 查看: 20| 回复: 0

对于习惯了以太坊开发的 Solidity 工程师而言,踏入 Polkadot 生态不仅仅是编程语言的迁移,更意味着需要对底层架构进行全新的认知。Polkadot 通过其 Revive 模块提供了对以太坊虚拟机(EVM)的兼容支持,但这并不意味着可以完全照搬原有的开发模式。

本文将从一个最基础的起点——“克隆代码”开始,带领你一步步完成 Polkadot SDK 的编译、本地测试节点的启动以及 RPC 服务的运行。在实操环节之外,我们还将深入探讨 Polkadot 生态中独特的 SS58 账号体系、多种签名算法的区别,以及在 Revive 环境下计算 Gas 费用的三个关键维度。这是一份旨在同时解决“环境如何搭建”和“核心概念如何理解”的实用开发笔记。

实操:Polkadot 上的 Solidity 与 EVM 开发路径

克隆下载项目

git clone git@github.com:qiaopengjun5162/polkadot-sdk.git

切换到项目目录

cd polkadot-sdk/

编译 RPC 服务

cargo build --release -p pallet-revive-eth-rpc

使用 Cargo 进行编译是 Rust 项目开发的常规操作,上述命令会编译出专门用于 Ethereum RPC 的服务端程序。

实操输出示例:

polkadot-sdk on  master [?] via 🦀 1.92.0
➜ cargo build --release -p pallet-revive-eth-rpc
warning: unused import: `vec`
   --> substrate/frame/message-queue/src/lib.rs:208:13
    |
208 | use alloc::{vec, vec::Vec};
    |             ^^^
    |
    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default

warning: `pallet-message-queue` (lib) generated 1 warning (run `cargo fix --lib -p pallet-message-queue` to apply 1 suggestion)
...
    Compiling pallet-revive-eth-rpc v0.1.0 (/Users/qiaopengjun/Code/Polkadot/polkadot-sdk/substrate/frame/revive/rpc)
    Finished `release` profile [optimized] target(s) in 32.26s

启动RPC服务

target/release/eth-rpc

启动后,服务会尝试连接本地节点并开启 JSON-RPC 端口。

实操输出示例:

polkadot-sdk on  master [?] via 🦀 1.92.0 took 3.1s
➜ target/release/eth-rpc
2026-01-16 20:45:32 🌐 Connecting to node at: ws://127.0.0.1:9944 ...
2026-01-16 20:45:32 🌟 Connected to node at: ws://127.0.0.1:9944
2026-01-16 20:45:32 💾 Using in-memory database, keeping only 256 blocks in memory
2026-01-16 20:45:32 Node does not have getAutomine RPC. Defaulting to automine=false. error: User(UserError { code: -32601, message: "Method not found", data: None })
2026-01-16 20:45:32 〽️ Prometheus exporter started at 127.0.0.1:9616
2026-01-16 20:45:32 Running JSON-RPC server: addr=127.0.0.1:8545,[::1]:8545
2026-01-16 20:45:32 🔌 Subscribing to new blocks (BestBlocks)
2026-01-16 20:45:32 🔌 Subscribing to new blocks (FinalizedBlocks)

Polkadot EVM RPC服务启动终端日志

编译Node节点服务

在另一个终端中,我们需要编译并启动本地的 Polkadot 节点。

cargo build --release --bin substrate-node

实操输出示例(节选):

polkadot-sdk on  master [?] via 🦀 1.92.0
➜ cargo build --release --bin substrate-node
warning: unused import: `vec`
   --> substrate/frame/message-queue/src/lib.rs:208:13
    |
208 | use alloc::{vec, vec::Vec};
    |             ^^^
    |
    = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
...
    Finished `release` profile [optimized] target(s) in 2.71s

启动运行Node节点服务

target/release/substrate-node --dev --tmp

使用 --dev --tmp 参数可以快速启动一个临时的开发链节点。

实操输出示例(节选):

polkadot-sdk on  master [?] via 🦀 1.92.0
➜ target/release/substrate-node --dev --tmp
2026-01-16 20:43:58 Substrate Node
2026-01-16 20:43:58 ✌️  version 3.0.0-dev-62fa27df30d
2026-01-16 20:43:58 ❤️  by Parity Technologies <admin@parity.io>, 2017-2026
2026-01-16 20:43:58 📋 Chain specification: Development
2026-01-16 20:43:58 🏷  Node name: disgusting-hobbies-0251
2026-01-16 20:43:58 👤 Role: AUTHORITY
2026-01-16 20:43:58 💾 Database: RocksDb at /var/folders/fw/s14m5tcs46j9t16ph766kc9h0000gn/T/substrateNaQTlJ/chains/dev/db/full
2026-01-16 20:44:04 🔨 Initializing Genesis block/state (state: 0xfe53…3782, header-hash: 0x6968…cef5)
2026-01-16 20:44:04 👴 Loading GRANDPA authority set from genesis on what appears to be first startup.
...
2026-01-16 20:44:04 Running JSON-RPC server: addr=127.0.0.1:9944,[::1]:9944

Rust项目Cargo.toml配置与编译终端输出

当节点成功启动并输出 Running JSON-RPC server: addr=127.0.0.1:9944 时,意味着本地开发链已经就绪。此时,之前启动的 eth-rpc 服务会自动连接到该节点(通过 ws://127.0.0.1:9944),并为开发者提供熟悉的以太坊格式 JSON-RPC 接口(端口 8545)。

波卡账号体系

  • 公私钥体系与资产:这是区块链的基石,用于身份验证、交易签名和资产控制。
  • 什么是账号:通过对公钥进行特定处理,得到的一个方便记录、传输和处理的字符串标识。
  • 什么是波卡的SS58账号:SS58 是 Polkadot(Substrate)生态系统的标准地址格式。它是在公钥字节前添加一个代表网络的前缀(例如 Polkadot 主网是 0,Kusama 是 2),然后通过 Base58 编码生成的一种可读字符串。

波卡签名算法

Polkadot 支持多种签名算法,以适应不同的安全性和效率需求:

  • Sr25519:基于 Curve25519 椭圆曲线和 Schnorr 签名算法。Schnorr 签名相比 ECDSA 更简洁,天然支持高效的多重签名和签名聚合,是 Polkadot 的首选推荐算法。
  • Ed25519:同样基于 Curve25519 曲线,但使用 EdDSA(Edwards-curve Digital Signature Algorithm)签名算法。它在签名和验证速度上非常高效。
  • ECDSA:基于 secp256k1 椭圆曲线,这与以太坊使用的签名算法相同。提供此选项主要是为了兼容以太坊生态和现有的工具链。

EVM 和 Hub 执行环境区别

在 Polkadot Revive 环境中执行合约时,Gas 的计算方式与原生以太坊有所不同,主要从三个维度进行计量:

  • 三个维度来计算 Gas
    • Ref_time:衡量计算操作所花费的处理器时间。
    • Proof_size:衡量交易执行后,存储到区块链状态中的数据大小。
    • Storage_deposit:用户为链上状态存储预先支付的、且未来可能收回的押金。
  • ED(Existential Deposit):账户存在所需的最小余额。如果账户余额低于此值,该账户及其关联的存储空间可能会被系统回收以节省资源。
  • Memory Limit for Contract:合约执行时的内存限制,这是 Wasm 虚拟机环境下的常见约束。

练习一:基础概念

1. Solidity 和 EVM 的关系?

  • Language and execution VM(编程语言和执行虚拟机)。
  • EVM can support other language(EVM 也可以执行其他语言编译的字节码)。
  • EVM depends on block status(EVM 的执行依赖区块的状态)。

2. 波卡是否支持 Solidity?

Yes。通过 Frontier 或 Revive 等兼容层,可以使用 Solidity 编写合约并在 Polkadot 上运行。

3. 合约的 bytecode 是可修改的吗?

IM(Immutable,不可修改)。一旦部署,合约字节码通常是不可变的,但可以通过代理模式等升级逻辑。

4. 波卡虚拟机 PVM 可以执行 EVM 的 bytecode 吗?

No。PVM(Polkadot Virtual Machine)是为平行链共识和消息传递设计的,不直接执行 EVM 字节码。EVM 字节码需要在专门的 EVM 兼容模块(如 Revive)中执行。

5. 波卡出现过哪些智能合约平台?

Frontier(早期的 EVM 兼容方案)、Ink!(基于 Rust 的 Wasm 智能合约语言)。

练习二:进阶理解

1. 波卡的SS58帐号在每条链上都一样吗?

根据 prefix 不同。不同网络(如 Polkadot、Kusama、独立测试链)使用不同的前缀,因此同一个私钥在不同网络上的 SS58 地址字符串是不同的。

2. 波卡支持的签名算法?

sr25519、ed25519、ECDSA。

3. 波卡Revive计算gas的维度?

ref_time、proof_size、storage_deposit。

4. Revive precompile的地址分配?

不同类型有自己的地址空间。预编译合约被分配到特定的 EVM 地址范围(如 0x000... 到 0xffff...),每个地址对应一个特定的功能。

5. Revive precompile应该如何调用?

要根据每个precompile的定义,有的可以选择selector。通常通过 Solidity 合约调用预定义地址,或者直接发送交易到该地址并附带特定的调用数据(包括函数选择器)。

总结

通过本次实操,我们成功从源码编译并启动了支持 Ethereum RPC 的 Polkadot 节点,验证了本地开发环境的可用性。

从技术路径上看,虽然 Solidity 依然是主要的智能合约编程语言,但 Polkadot 在底层逻辑上展现了其独特性:

  1. 账号更灵活:SS58 格式与多种签名算法(Sr25519/EdDSA/ECDSA)的并存,为未来的账户抽象和复杂的权限管理提供了原生支持。
  2. 资源模型更精细:不同于以太坊单一的 Gas 计费模型,Polkadot Revive 引入了 Ref_time(计算时间)、Proof_size(存储证明大小)和 Storage_deposit(状态存储押金)三个维度,要求开发者对合约的资源消耗有更精准的把控和更经济的意识。
  3. 虚拟机隔离明确:明确了 PVM 与 EVM 的界限,虽然 PVM 不直接执行 EVM 字节码,但通过 Revive 这样的兼容层,巧妙地实现了逻辑互通和生态融合。

掌握这些基础概念和实操技能,是进一步在 Polkadot 多链生态上构建高性能、可交互 DApp 的重要前提。希望这份指南能帮助你顺利开启 Polkadot 开发之旅。如果你想了解更多类似的实战技术解析,欢迎访问 云栈社区 与其他开发者交流探讨。

参考




上一篇:硅谷能源路线之争:AI算力驱动下核聚变与太空光伏谁将胜出
下一篇:2026大厂裁员潮下,技术人如何转型超级个体求生
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-24 02:48 , Processed in 0.381174 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表