2 个不稳定版本
0.2.0 | 2023年5月15日 |
---|---|
0.1.0 | 2023年4月20日 |
#6 in #walletd
用于 walletd
295KB
4.5K SLoC
WalletD Bitcoin
此crate是WalletD项目的一部分。
lib.rs
:
WalletD Bitcoin
提供对Bitcoin钱包的实现,包括创建新钱包或导入现有钱包、检查余额和处理交易的功能。它支持分层确定性(HD)钱包结构,并提供搜索与钱包关联的以前使用的地址以及创建新地址的能力。此外,它还便于获取区块链信息。
快速入门指南
[BitcoinWallet] 结构是访问Bitcoin钱包D功能的主要入口点。
从种子导入
以下是您如何根据主[种子]访问比特币钱包的方法。可以使用 Mnemonic::to_seed 方法从[助记词]派生出[种子]。
use walletd_bitcoin::prelude::*;
use walletd_hd_key::prelude::*;
let master_seed = Seed::from_str("a2fd9c0522d84d52ee4c8533dc02d4b69b4df9b6255e1af20c9f1d4d691689f2a38637eb1ec778972bf845c32d5ae83c7536999b5666397ac32021b21e0accee")?;
let network_type = HDNetworkType::TestNet;
let master_hd_key = HDKey::new_master(master_seed, network_type)?;
let mut btc_wallet = BitcoinWallet::builder().master_hd_key(master_hd_key).build()?;
默认派生路径
派生[BitcoinWallet]很简单,并且在内部使用一些默认设置。当使用[BitcoinWalletBuilder]时,默认设置将[地址类型]设置为 'P2wpkh`,并且为派生路径设置相应的默认[HDPurpose]为 HDPurpose::BIP49。
# use walletd_bitcoin::prelude::*;
# use walletd_hd_key::prelude::*;
use walletd_bitcoin::bitcoin;
# fn import_btc_hd_wallet() -> Result<(), walletd_bitcoin::Error> {
# let master_seed = Seed::from_str("a2fd9c0522d84d52ee4c8533dc02d4b69b4df9b6255e1af20c9f1d4d691689f2a38637eb1ec778972bf845c32d5ae83c7536999b5666397ac32021b21e0accee")?;
# let network_type = HDNetworkType::TestNet;
# let master_hd_key = HDKey::new_master(master_seed, network_type)?;
# let mut btc_wallet = BitcoinWallet::builder().master_hd_key(master_hd_key).build()?;
assert_eq!(btc_wallet.address_format(), bitcoin::AddressType::P2wpkh);
assert_eq!(btc_wallet.hd_path_builder()?.purpose, Some(HDPurpose::BIP84.to_shortform_num()));
# Ok(())
# }
使用Blockstream作为区块链连接器
可以使用[BitcoinWallet]结构通过[BlockchainConnector]如[Blockstream]访问区块链数据。[Blockstream]实例可以单独使用来访问区块链数据,例如费用估计。它可以与[BitcoinWallet]相关联,以便[BitcoinWallet]能够访问区块链数据并发送交易。
let btc_client = Blockstream::new("https://blockstream.info/testnet/api")?;
let fee_estimates = btc_client.fee_estimates().await?;
println!("fee estimates: {:?}", fee_estimates);
btc_wallet.set_blockchain_client(btc_client);
同步BitcoinWallet,加载BitcoinAddresses
可以使用[BitcoinWallet]结构来同步钱包与区块链并加载相关的[BitcoinAddress]。
let btc_client = Blockstream::new("https://blockstream.info/testnet/api")?;
let fee_estimates = btc_client.fee_estimates().await?;
println!("fee estimates: {:?}", fee_estimates);
btc_wallet.set_blockchain_client(btc_client);
for addr in btc_wallet.associated_info() {
println!("address: {}, derivation path {}",
addr.address.public_address(), addr.hd_key().derivation_path().to_string());
}
println!("next receive address: {}", btc_wallet.receive_address()?);
println!("next change address: {}", btc_wallet.next_change_address()?.public_address());
let balance = btc_wallet.balance().await?;
println!(
"bitcoin wallet balance: {} BTC, ({} satoshi",
balance.btc(),
balance.satoshi()
);
依赖项
~16–33MB
~462K SLoC