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

如何在ethers.rs中将XPriv类型私钥转换为字符串并打印?

如何从ethers.rs的XPriv类型提取并打印私钥字符串?

我是Rust新手,正在探索ethers.rs库。我通过以下代码生成助记词:

let mnemonic = Mnemonic::<English>::new(&mut rand::thread_rng());

现在想通过该助记词提取第一个私钥,使用了这段代码:

let key = mnemonic.derive_key("m/44'/60'/0'/0/0", None).unwrap()

得到的是XPriv类型的结果,但不知道如何将其转换为字符串以在控制台打印。我的完整函数和Cargo.toml如下:

完整函数:

async fn test() {
    let mnemonic = Mnemonic::<English>::new(&mut rand::thread_rng());

    println!("mnemonic: {}", mnemonic.to_phrase());

    let key = mnemonic
        .derive_key("m/44'/60'/0'/0/0", None)
        .expect("Failed to derive pkey");
}

Cargo.toml:

name = "rust-basics"
version = "0.1.0"
edition = "2021"

[dependencies]
ethers="2.0.7"
tokio = { version = "1", features = ["full"] }
bip39 = "2.0"
rand = "0.8"
dialoguer = "0.10.4"
serde = "1.0.164"
serde_json = "1.0.97"
password-hash = "0.5.0"
bcrypt = "0.14.0"

解决方案

XPriv类型可以通过两种方式提取私钥字符串:

  1. 直接提取字节并转为十六进制
    XPriv提供了to_bytes()方法获取原始私钥字节数组,再用hex::encode()将其转为十六进制字符串:
use hex;

// 在test函数中添加以下代码
let private_key_bytes = key.to_bytes();
let private_key_str = hex::encode(private_key_bytes);
println!("Private key: {}", private_key_str);
  1. 转换为LocalWallet后获取私钥
    可以将XPriv转换为ethers的LocalWallet类型,然后通过private_key()方法直接获取私钥字符串:
use ethers::signers::LocalWallet;

// 在test函数中添加以下代码
let wallet: LocalWallet = key.into();
println!("Private key: {}", wallet.private_key());

修改后的完整函数

use ethers::signers::{LocalWallet, Mnemonic, English};
use hex;
use rand;

async fn test() {
    let mnemonic = Mnemonic::<English>::new(&mut rand::thread_rng());

    println!("mnemonic: {}", mnemonic.to_phrase());

    let key = mnemonic
        .derive_key("m/44'/60'/0'/0/0", None)
        .expect("Failed to derive pkey");

    // 方法1:转字节后编码为十六进制
    let private_key_bytes = key.to_bytes();
    let private_key_str = hex::encode(private_key_bytes);
    println!("Private key (hex): {}", private_key_str);

    // 方法2:转换为LocalWallet
    let wallet: LocalWallet = key.into();
    println!("Private key (from wallet): {}", wallet.private_key());
}

注意:如果使用hex库,需要在Cargo.toml中添加依赖:

hex = "0.4"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:52:55