Crate walletd_bitcoin

source ·
Expand description

WalletD Bitcoin

Provides a wallet implementation for Bitcoin including the ability to create a new wallet or import an existing wallet, check balances, and handle transactions. It supports a hierarchical deterministic (HD) wallet structure and provides the ability to search for previously used addresses associated with the wallet as well as the creation of new addresses. It also facilitates obtaining blockchain information.

Quickstart Guide

The BitcoinWallet struct is the main entry point to access walletD functionality for Bitcoin.

Import from Seed

Here’s how you can access a bitcoin wallet based on a master Seed. The Seed can be derived from a Mnemonic using the Mnemonic::to_seed method.

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()?;

Default Derivation Path

Deriving a BitcoinWallet is simple and uses some default settings under the hood. When using BitcoinWalletBuilder, the default settings set the AddressType as ’P2wpkh` and the corresponding default HDPurpose for the derivation path is set as HDPurpose::BIP49.

 use walletd_bitcoin::bitcoin;
   assert_eq!(btc_wallet.address_format(), bitcoin::AddressType::P2wpkh);
   assert_eq!(btc_wallet.hd_path_builder()?.purpose, Some(HDPurpose::BIP84.to_shortform_num()));

Using Blockstream as Blockchain Connector

The BitcoinWallet struct can be used to access blockchain data through a BlockchainConnector such as Blockstream. The Blockstream instance can be used on its own to access blockchain data such as fee estimates. It can be affiliated with a BitcoinWallet to enable the BitcoinWallet to access blockchain data and send transactions.

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);

Sync BitcoinWallet, Load BitcoinAddresses

The BitcoinWallet struct can be used to sync the wallet with the blockchain and load the associated BitcoinAddresses.

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()
);

Re-exports

Modules

  • This prelude module simplifies importing many useful items from the walletd_bitcoin crate using a glob import.

Structs

Enums

Traits

  • Used to connect to a blockchain and send and receive information to and from the blockchain.
  • The public address of a cryptocurrency.
  • Provides a common interface for handling amounts of a cryptocurrency. Has functions to convert to and from the main unit and the smallest unit of the coin.
  • Provides common functionality for a crypto wallet. Contains functions to get the balance, send and receive transactions, and sync the wallet with the blockchain.
  • Provides a common interface for building a CryptoWallet.
  • Provide a common interface for different mnemonic protocols.
  • Provides a builder pattern for creating a Mnemonic.