You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust客户端用substrate-subxt为个人Polkadot账户生成PairSigner?

Subxt替换测试账户为个人Polkadot钱包账户签名的实现方案

你只需要将原来通过AccountKeyring生成测试密钥对的逻辑,替换为从你个人钱包的助记词/私钥生成对应密钥对即可,具体实现如下:

前置准备

你需要提前获取个人Polkadot钱包的12/24位助记词,或者私钥的十六进制字符串,注意:请妥善保管密钥信息,不要泄漏给第三方

方法1:通过助记词生成PairSigner

1. 添加依赖

在Cargo.toml中添加sp-core依赖:

sp-core = { version = "21.0", default-features = false, features = ["std"] }

2. 代码实现

use sp_core::{sr25519, Pair, crypto::Ss58Codec};
use subxt::signer::PairSigner;

fn get_polkadot_signer(mnemonic: &str, password: Option<&str>) -> Result<PairSigner<sr25519::Pair>, Box<dyn std::error::Error>> {
    // Polkadot默认使用sr25519签名算法,若你的账户用ed25519则替换为ed25519::Pair
    let (pair, _) = sr25519::Pair::from_phrase(mnemonic, password)?;
    // 验证生成的账户地址是否和钱包内地址一致,0为Polkadot的SS58前缀,Kusama替换为2
    println!("当前签名账户地址:{}", pair.public().to_ss58check_with_version(0));
    Ok(PairSigner::new(pair))
}

3. 调用示例

建议通过环境变量读取助记词,避免硬编码:

let signer = get_polkadot_signer(&std::env::var("POLKADOT_WALLET_MNEMONIC")?, None)?;
// 后续交易逻辑和之前使用Alice账户的逻辑完全一致

方法2:通过私钥十六进制字符串生成PairSigner

代码实现如下:

use sp_core::{sr25519, Pair, hex::FromHex};
use subxt::signer::PairSigner;

fn get_polkadot_signer_from_privkey(privkey_hex: &str) -> Result<PairSigner<sr25519::Pair>, Box<dyn std::error::Error>> {
    let privkey_bytes = Vec::from_hex(privkey_hex.trim_start_matches("0x"))?;
    let pair = sr25519::Pair::from_seed_slice(&privkey_bytes)?;
    Ok(PairSigner::new(pair))
}

注意事项

  • 绝对不要将助记词、私钥硬编码在代码或者公开的配置文件中,生产环境请使用加密存储或者密钥管理服务存储敏感信息
  • 若你的账户使用了衍生路径,需要在解析助记词时指定对应的衍生路径,sp_core的Pair类型支持衍生路径解析
  • 生成的signer可以直接替换原来的测试账户signer,后续交易提交、监听逻辑不需要做任何修改

内容的提问来源于stack exchange,提问作者vadersfather

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 05:39:01