1 个不稳定版本
0.1.0 | 2022年6月5日 |
---|
#5 在 #hd-wallet
31KB
732 行
Hdwallet-rs
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