#crypto #payment #hd-wallet #web3

hdwallet_rs

Solana 的 HD 钱包用 Rust 实现

1 个不稳定版本

0.1.0 2022年6月5日

#5#hd-wallet

MIT 许可证

31KB
732

Hdwallet-rs

Test Crates.io License Contributors

Solana 的 HD 钱包用 Rust 实现。

该包使用 ed25519_dalek 包中的 EdDSA 算法 Rust 实现。

使用方法

导入包

use hdwallet_rs;

注意:此包使用 bip0039 包生成助记词和种子短语;您可以选择从英语、日语、韩语、意大利语、法语、捷克语、中文和葡萄牙语生成助记词。

生成扩展密钥

use hdwallet_rs::{
  extended_key::SolanaExPrivateKey,
  mnemonic
}

let seed_phrase = mnemonic::new_mnemonic(24, "English");
let seed = mnemonic::new_seed(seed_phrase.unwrap(), "".to_string());
let master_key = SolanaExPrivateKey::new_master_key(&seed).expect("master key");

使用它派生私钥及其公钥

use hdwallet_rs::{
    extended_key::SolanaExPrivateKey,
    mnemonic,
    solana::{
        key_chain::DefaultKeyChain,
        PrivKey, PubKey,
    },
    traits::{Deserialize, Serialize},
    SolanaExPrivateKey,
};

let new_mnemonic = mnemonic::new_mnemonic(24, "English");
let seed = mnemonic::new_seed(new_mnemonic.unwrap(), "".to_string());
let master_key = SolanaExPrivateKey::new_master_key(&seed).expect("master key");

// A default key chain on which others are based on.
let key_chain = DefaultKeyChain::new(master_key);

// Chain path.
let chain_path = "m/0H/1H";

// Get extended key and derivation from the chain path.
let (extended_key, derivation) = key_chain.derive_private_key(chain_path.into()).expect("fetch key");

// Private Key.
let private_key = PrivKey {
  derivation,
  extended_key,
};

// Public Key.
let public_key = PubKey::from_private_key(&private_key);

// Convert to Base58 address.
let serialized_key: String = public_key.serialize();

let deserialized_key = PubKey::deserialize((serialized_key, &key_chain, "m/0H/1H".into())).expect("deserialize");

assert_eq!(public_key, deserialized_key);

注意:在 Solana 中,所有密钥派生都是硬编码的形式,意味着每个派生路径都以 (H 或 ') 结尾。

灵感来源

  • 比特币的 HD 钱包 Rust 实现.

依赖关系

~13MB
~389K SLoC