Polkadot Solidity开发-课程笔记9
🚩课程学习链接:https://youtube.com/playlist?list=PLKgwQU2jh_H8zyq46XsUkAz10213HDL0i&si=UqonC3oL304_Mtrk
✏️ 第二课 Task2 任务:
1⃣️选择题:https://wj.qq.com/s2/25402456/fb1j/
2⃣️实践题:https://github.com/papermoonio/2026-h1-building-production-grade-dApps/blob/main/homework/lesson-2/README.md
get-metadata.sh的作用
npx papi add devnet -w ws://localhost:9944
npx papi add hub -w wss://asset-hub-paseo-rpc.n.dwellir.com
你提供的这几行内容并不是编程语言代码,而是在终端/命令行中执行的Shell命令,核心作用是通过 papi 工具配置和添加Polkadot/Substrate生态下的区块链网络节点连接信息,方便后续和这些节点交互。
我来逐行拆解它们的具体作用:
1. get-metadata.sh
这是执行一个名为 get-metadata.sh 的Shell脚本文件(.sh 是Linux/macOS系统的脚本后缀)。
- 结合Polkadot生态的上下文,这个脚本的核心功能大概率是从指定的区块链节点获取链的元数据(metadata);
- 元数据是Substrate链的核心配置,包含链的模块、调用方法、数据结构等关键信息,后续和链交互(如调用接口、查询数据)都依赖它。
2. npx papi add devnet -w ws://localhost:9944
npx:Node.js的包执行工具,无需全局安装papi,直接临时下载并执行papi命令;papi:是Polkadot生态中用于和Substrate节点交互的命令行工具(Polkadot API CLI);add devnet:给这个节点连接配置命名为devnet(自定义名称,方便后续引用);-w ws://localhost:9944:指定连接方式为WebSocket(-w是--ws的简写),连接地址是本地运行的Substrate开发节点(localhost:9944是Substrate本地节点默认的WebSocket端口)。- 整体作用:添加一个名为
devnet的本地开发网节点配置,后续可以通过papi直接用devnet这个别名操作本地节点。
3. npx papi add hub -w wss://asset-hub-paseo-rpc.n.dwellir.com
- 逻辑和上一行一致,区别是:
- 节点配置命名为
hub; - 连接的是远程的公开节点:
wss://asset-hub-paseo-rpc.n.dwellir.com(这是Polkadot的Asset Hub Paseo测试网的公开RPC节点,wss是加密的WebSocket协议)。
- 节点配置命名为
- 整体作用:添加一个名为
hub的远程Asset Hub测试网节点配置,方便后续和这个公开测试网交互。
总结
- 这组命令的核心目的是:配置
papi工具的节点连接,分别添加本地开发网和远程Asset Hub测试网的节点; - 先执行脚本获取链元数据(交互基础),再添加节点配置(交互入口),最终实现通过
papi便捷操作这两个区块链节点; - 核心工具
papi是Polkadot API的命令行封装,-w指定WebSocket连接是Substrate节点交互的标准方式。
问题一: subkey命令找不到
你在Kali Linux中执行 subkey inspect //Alice 命令时提示 command not found,但通过 find 命令已经找到了 subkey 可执行文件的具体路径,现在需要解决的是如何正确执行这个命令的问题。
解决方法
subkey 命令找不到,核心原因是它的可执行文件所在目录不在系统的 PATH 环境变量中,系统不知道去哪里找这个命令。我给你提供两种最常用的解决方案:
方案1:直接使用绝对路径执行(临时生效,简单快捷)
既然你已经找到了 subkey 的路径,直接用完整路径执行即可,推荐使用 /home/kali/polkadot-sdk/target/release/subkey 这个路径(编译后的release版本):
1 | |
方案2:将路径添加到PATH环境变量(永久生效,推荐)
如果需要长期使用 subkey 命令,把它的目录加入系统PATH是更方便的方式:
- 临时添加(仅当前终端生效):
1 | |
- 永久添加(所有终端、重启后仍生效):
1 | |
补充说明
- 你通过
find找到的多个subkey路径中,/home/kali/polkadot-sdk/target/release/subkey是编译后的可执行文件,是最适合直接使用的。 find命令提示的Permission denied是正常现象,只是某些系统目录没有访问权限,不影响找到subkey。
总结
- 临时执行:直接使用
subkey的绝对路径/home/kali/polkadot-sdk/target/release/subkey inspect //Alice。 - 永久生效:将
subkey所在目录/home/kali/polkadot-sdk/target/release添加到系统PATH环境变量,之后即可直接用subkey命令。
subkey inspect //Alice 是什么?
你成功执行了 subkey inspect //Alice 命令,现在我会一步步解释这个命令的作用,以及回显中每一部分的具体含义,让你能清晰理解这些和Substrate/Polkadot账户相关的核心信息。
1. 命令本身:subkey inspect //Alice 是什么?
subkey 是Substrate/Polkadot生态中用于管理和检查密钥对的官方工具,核心作用是处理账户的密钥生成、解析、验证等;inspect 是 subkey 的子命令,意思是“解析/检查”;//Alice 是Substrate内置的测试用密钥URI(统一资源标识符),是预定义的测试账户(类似的还有//Bob、//Charlie等),专门用于开发和测试环境,绝对不能用于生产环境。
简单来说,这个命令的作用是:解析并展示内置测试账户Alice的所有密钥相关信息。
2. 回显内容逐行解释
1 | |
这行是提示:你输入的密钥URI(//Alice)对应的账户信息如下。
核心字段解释(从私密到公开):
| 字段 | 含义 | 重要性 |
|---|---|---|
Network ID: substrate |
该账户所属的网络标识,substrate 是默认的Substrate通用网络标识(也可指定polkadot、kusama等) |
区分不同区块链网络的账户格式 |
Secret seed: 0xe5be9a5092b81bca64be81d212e7f2f9eba183bb7a90954f7b76361f6edb5c0a |
账户的私钥种子(助记词的原始哈希形式),是生成私钥的核心,等同于账户的“终极密码” | 绝对保密!泄露则账户资产被盗 |
Public key (hex): 0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d |
公钥的十六进制格式,由私钥通过非对称加密算法生成(无法反向推导私钥) | 公开,用于验证签名、生成地址 |
Account ID: 0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d |
Substrate中Account ID等同于公钥(部分链会对其哈希处理),是账户的“唯一标识” | 链上存储账户状态的核心标识 |
Public key (SS58): 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY |
公钥的SS58编码格式(Substrate专属的地址编码标准) | 兼容不同网络的地址格式 |
SS58 Address: 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY |
最终的账户地址,也是你在钱包/链上交互时使用的“收款/转账地址” | 日常使用的公开地址 |
关键补充说明
私钥 vs 公钥 vs 地址的关系:
- 私钥(Secret seed):自己保管,用于签名交易(证明“你是账户主人”);
- 公钥:由私钥生成,公开,用于验证签名;
- 地址(SS58 Address):公钥的“易读易记”编码形式,是对外展示的账户标识。
//Alice是测试账户的原因:
Substrate预定义了一批测试账户(Alice、Bob、Charlie等),它们的私钥是公开的,所有开发者都知道,因此只能用于本地测试/开发网,绝对不能用于主网(否则资产会被瞬间转走)。SS58编码的作用:
不同区块链(如Polkadot主网、Kusama、本地测试网)的SS58前缀不同,编码后的地址也不同,这样可以避免把Polkadot的资产转到Kusama地址(格式不兼容)。
总结
subkey inspect //Alice的核心作用是解析测试账户Alice的密钥对信息,展示从私钥到公开地址的全链路数据;- 回显中Secret seed是核心私密信息,其余均为公开信息,SS58 Address是日常使用的账户地址;
//Alice是测试账户,仅用于开发/测试,切勿在生产环境使用。
安装python包报错
pip install substrate-interface eth-utils
1 | |
看来你正在使用 Kali Linux(或者类似的 Debian 系系统)。这个错误是因为现在的 Python 遵循了 PEP 668 规范,为了防止你安装的第三方库破坏系统自带的 Python 工具,禁止了直接使用 pip install 进行全局安装。
作为一名未来的技术大牛,我们需要用优雅、合规的方式解决这个问题。我有三种方案供你选择:
方案一:最推荐 - 创建虚拟环境 (Virtual Environment)
这是最符合最佳实践的方法。它会为你的波卡学习项目创建一个独立的“褶式 (The Fold)”空间,互不干扰。
1 | |
提示:当你写完代码想退出时,输入 deactivate 即可。
方案二:快速通关 - 使用 --break-system-packages 标志
如果你觉得创建虚拟环境太麻烦,只是想快速测试一下代码,可以强制跳过保护机制。注意:虽然名字叫 “break”,但通常安装这两个小库不会真的弄坏系统,但在生产环境下不建议这样做。
1 | |
方案三:使用 pipx (针对工具类)
如果你打算把这个转换脚本做成一个经常使用的系统工具,pipx 是最好的选择。
1 | |
接下来你的代码逻辑
当你安装好库后,针对你的“地址转换”作业,有一个核心逻辑需要你预判:
在波卡 EVM 链中,转换逻辑并不是简单的 Base58 编解码。对于像 Moonbeam 这种完全兼容 EVM 的链,你可以直接用这个逻辑验证地址:
- H160 地址:
0x123...(20字节) - AccountId32:在 Moonbeam 里,它实际上是把
0x123...后面补零或者按特定规则映射到 32 字节。
解决安装问题后,你想让我帮你写一个完整的 Python 脚本,直接连接到 Moonbeam 或者 Astar 的测试网,同时把地址转换、Substrate 余额、EVM 余额这三项全部打印出来做对比吗?