Polkadot 账户创建完整指南:JavaScript、Python、Rust 三语言代码实战

原文作者:PaperMoon 团队

刚接触 Polkadot 开发,第一个问题往往是:怎么创建账户?在以太坊里你可能习惯了 `ethers.Wallet.createRandom()`,三行代码就搞定。到了 Polkadot 生态,账户体系的底层逻辑不太一样——默认签名算法不是 ECDSA,地址格式不是十六进制的 `0x...`,甚至连 JS 的库都换了一套。本文直接给你三种语言的可运行代码,同时把几个关键概念说清楚,让你知道自己在做什么。

一、Polkadot 账户基础

一个 Polkadot 账户本质上还是一对密钥:私钥用来签名,公钥派生出地址。但有几点和以太坊不同,值得提前了解。

签名算法:默认是 SR25519

Polkadot 默认使用 SR25519 签名方案,而不是以太坊常用的 ECDSA(secp256k1)。SR25519 基于 Schnorr 签名,在安全性和性能上有一定优势,尤其在需要签名聚合的场景下。

此外还支持 ED25519 和 ECDSA。如果你在构建需要和以太坊兼容的场景,可以选择 ECDSA;绝大多数 Polkadot 原生应用用 SR25519 就好。

地址格式:SS58

Polkadot 使用 SS58 编码的地址,而不是以太坊的十六进制格式。SS58 是一种 base58 变体,会在地址中编入网络前缀,不同网络(Polkadot、Kusama、各平行链)的同一个账户显示的地址会不同,但底层是同一把私钥。

`ss58Format: 0` 对应 Polkadot 主网;Kusama 是 `2`;通用格式是 `42`。

助记词:BIP39

这一点和以太坊一样,Polkadot 使用 BIP39 标准的助记词(12 或 24 个英文单词)来备份私钥。助记词是账户的唯一凭证,丢失了无法找回,不要截图保存,不要发给任何人。

 二、JavaScript / TypeScript 实现

2.1 环境准备

```bash
mkdir account-creator
cd account-creator
npm init -y && npm pkg set type=module
```

安装依赖:

```bash
npm install @polkadot/util-crypto @polkadot/keyring
npm install --save-dev typescript tsx
```

`@polkadot/util-crypto` 提供密码学工具函数(包括助记词生成);`@polkadot/keyring` 管理账户密钥对。

2.2 代码

新建 `create-account.ts`:

```typescript
import { cryptoWaitReady, mnemonicGenerate } from '@polkadot/util-crypto';
// 中文:从 util-crypto 导入两个函数:等待 WASM 密码学模块初始化完成、生成助记词
import { Keyring } from '@polkadot/keyring';
// 中文:导入 Keyring 类,用于管理账户密钥对

async function main() {
  await cryptoWaitReady();
  // 中文:@polkadot/util-crypto 底层使用 WASM,必须等待初始化完成才能调用密码学函数

  const mnemonic = mnemonicGenerate(12);
  // 中文:生成一个 12 单词的 BIP39 助记词,这是账户私钥的人类可读备份形式

  const keyring = new Keyring({ type: 'sr25519', ss58Format: 0 });
  // 中文:创建 Keyring 实例,指定使用 SR25519 签名方案,ss58Format: 0 表示 Polkadot 主网地址格式

  const pair = keyring.addFromMnemonic(mnemonic);
  // 中文:从助记词派生密钥对,并加入 Keyring 管理

  console.log(`Address: ${pair.address}`);
  console.log(`Mnemonic: ${mnemonic}`);
}

main().catch(console.error);
```

2.3 运行

```bash
npx tsx create-account.ts
```

预期输出:

```
Address: 15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5
Mnemonic: cushion dog echo people vendor curve truck begin latin romance rebuild ...
```

每次运行都会生成一个新的助记词和对应地址。

三、Python 实现

Python 方案用的是 `substrate-interface` 这个库,它封装了 Substrate 链的所有常用操作,创建账户只是其中一个功能。

3.1 环境准备

```bash
mkdir account-creator-python
cd account-creator-python
python3 -m venv venv
source venv/bin/activate  # Windows 用: venv\Scripts\activate
```

安装依赖:

```bash
pip install substrate-interface
```

3.2 代码

新建 `create_account.py`:

```python
from substrateinterface import Keypair
# 中文:从 substrate-interface 导入 Keypair 类,它封装了账户的密钥对管理功能

mnemonic = Keypair.generate_mnemonic()
# 中文:生成一个 BIP39 标准的助记词(默认 12 个词)

keypair = Keypair.create_from_mnemonic(mnemonic)
# 中文:从助记词派生出密钥对,默认使用 SR25519 签名方案

print(f"Address: {keypair.ss58_address}")
# 中文:输出 SS58 格式的账户地址
print(f"Mnemonic: {mnemonic}")
# 中文:输出助记词,生产环境中不应将助记词打印到日志
```

3.3 运行

```bash
python create_account.py
```

预期输出:

```
Address: 15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5
Mnemonic: cushion dog echo people vendor curve truck begin latin romance rebuild ...
```

Python 的实现是三个版本里最简洁的,`substrate-interface` 把很多底层细节都封装好了,适合写脚本或后端自动化工具。

四、Rust 实现

Rust 版本直接用 Substrate 的核心库 `sp-core`,这和 Polkadot 节点本身用的密码学实现完全相同,不是 binding,是原生实现。

 4.1 环境准备

```bash
cargo new account-creator-rust
cd account-creator-rust
```

在 `Cargo.toml` 的 `[dependencies]` 中添加:

```toml
[package]
name = "account-creator-rust"
version = "0.1.0"
edition = "2021"

[dependencies]
sp-core = "28.0"
sp-runtime = "31.0"
```

4.2 代码

编辑 `src/main.rs`:

```rust
use sp_core::{crypto::Ss58Codec, Pair};
// 中文:导入 Ss58Codec trait(提供 to_ss58check 方法)和 Pair trait(提供密钥对操作接口)

fn main() {
    let (pair, phrase, _) = sp_core::sr25519::Pair::generate_with_phrase(None);
    // 中文:generate_with_phrase 返回三个值:密钥对、助记词字符串、可选的密码短语(这里传 None 表示不设密码)

    let address = pair.public().to_ss58check();
    // 中文:从密钥对中取出公钥,再用 to_ss58check() 编码为 SS58 格式的地址字符串

    println!("Address: {}", address);
    println!("Mnemonic: {}", phrase);
}
```

4.3 运行

```bash
cargo run
```

预期输出:

```
Address: 15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5
Mnemonic: cushion dog echo people vendor curve truck begin latin romance rebuild ...
```

Rust 版本的依赖体积比较大,首次 `cargo build` 会花几分钟编译。如果只是写脚本,Python 方案更省事;如果你在构建高性能服务或需要和 Substrate 深度集成,Rust 是更自然的选择。

五、三种语言横向对比

对比项

JavaScript / TypeScript

Python

Rust

核心库

@polkadot/keyring

substrate-interface

sp-core

核心逻辑代码量

约 8 行

约 4 行

约 6 行

适用场景

前端钱包、浏览器 dApp、Web 应用

自动化脚本、运维工具、后端服务

高性能服务、链上组件、节点集成

上手难度

⭐ 最容易

⭐⭐ 容易

⭐⭐⭐ 较高

首次编译/运行时间

快(即开即用)

快(解释执行)

较慢(需编译,数分钟)

类型安全

高(编译期检查)

典型开发者

Web3 前端工程师

DevOps / 数据工程师

区块链核心开发者

六、下一步

账户创建只是第一步。有了账户之后,通常接下来要:

- 发送交易:用刚创建的账户签名并发送交易,参考 Polkadot 文档中"使用 SDK 发送交易"部分
- 查询余额:获取账户的 DOT 余额或资产余额,参考"查询链上数据"部分
- 计算手续费:在实际发送前预估交易费用,参考"计算交易费用"部分

账户创建的代码本身不复杂,复杂的是搞清楚 SS58 格式、签名算法、助记词这些概念为什么和以太坊不一样。理解这些之后,你会发现 Polkadot 的账户体系设计得更灵活——同一把私钥在不同网络上显示不同地址,不同签名算法各有适用场景,这些都是有意为之的设计,不是随便起的。

阅读原文:https://docs.polkadot.com/chain-interactions/accounts/create-account/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值