Bitcoin
WalletD features the ability to create and work with Bitcoin wallets. This resource provides documentation related to Bitcoin in WalletD.
BitcoinWallet Struct
Represents a Hierarchical Deterministic (HD) Bitcoin wallet which can have multiple BitcoinAddress structs associated with it which are derived from a single master HD key.
BitcoinWallet Struct Methods
-
add(&mut self, associated: &AssociatedAddress)- Adds an
associated Bitcoin addressto thewalletif it is not already associated to it while also keeping track of theassociated Bitcoin address'sderived HD key.
- Adds an
-
associated_info(&self) -> &[AssociatedAddress]- Returns the associated info: info on the
associated Bitcoin addressespaired with theirderived HD key.
- Returns the associated info: info on the
-
addresses(&self) -> Vec<BitcoinAddress>- Returns a vector of the
BitcoinAddressobjects associated with the wallet.
- Returns a vector of the
-
coin_type_id(&self) -> Result<u32, Error>- Returns the coin type id num based on the
Bitcoin network. Returns anerrorif the network is not supported.
- Returns the coin type id num based on the
-
default_hd_purpose(&self) -> Result<HDPurpose, Error>- Returns the
default HDPurposebased on theaddress formatReturns anerrorif the address format is not currently supported
- Returns the
-
address_format(&self) -> AddressType- Discovers previously used addresses by searching in sequential order based on master HDKey and a derivation type, stopping discovery when gap limit (n consecutive addresses without transaction history) has been met. Only considers change index = 0 (the receiving/external chain) when considering the gap limit but if there is transaction history with change index = 1 it is added as an associated address. If the account discovery setting is false, it will only search for addresses in the first account (account_index = 0). Returns the address format
-
master_hd_key(&self) -> Result<HDKey, Error>- Returns the master HDKey, if it exists otherwise returns an
error
- Returns the master HDKey, if it exists otherwise returns an
-
network(&self) -> Result<Network, Error>- Returns the network based on the master HDKey
-
next_address(&self) -> Result<BitcoinAddress, Error>- Returns a
BitcoinAddressobject on the the next available address on the first account (account_index = 0).
Returns an
errorwith details if it encounters a problem while deriving the next address - Returns a
-
next_change_address(&self) -> Result<BitcoinAddress, Error>- Considering only account 0, returns the
next change addresscorresponding to 1 + the max existing change address index.
Change addresses are used for sending change back to the wallet and have a value of 1 (internal chain) instead of 0 (external chain) in the derivation path for the change index.
- Considering only account 0, returns the
-
set_gap_limit(&mut self, gap_limit: usize)- Set the gap limit to use when searching for addresses, if not set, the default gap limit of 20 is used.
-
set_account_discovery(&mut self, account_discovery: bool)- Set the account discovery flag, if set to true, the wallet will search for addresses on all accounts, if set to false, the wallet will only search for addresses on the first account.
If not set, the default value is true to enable account discovery.
-
set_hd_path_builder(&mut self, hd_path_builder: HDPathBuilder)- Set the
HDPathBuilderto use when deriving addresses, if not set, the defaultHDPathBuilderis used.
- Set the
-
gap_limit(&self) -> usize- Returns the gap limit that is being used when searching for addresses with this
wallet.
- Returns the gap limit that is being used when searching for addresses with this
-
account_discovery(&self) -> bool- Returns the account discovery flag that is being used when searching for addresses with this
wallet.
- Returns the account discovery flag that is being used when searching for addresses with this
-
hd_path_builder(&self) -> Result<HDPathBuilder, Error>- Returns the
HDPathBuilderthat is being used when deriving addresses with this wallet If noHDPathBuilderhas been set, the defaultHDPathBuilderthat is being used is returned
- Returns the
-
signature_sighashall_for_transaction_hash() -> Result<String, Error>- This function is used to calculate the signature as a hex encoded string with the option sighashall for a given transaction hash using a provided private key.
-
sign_tx() -> Result<BTransaction, Error>- Signs a transaction with the provided private keys and returns the signed transaction.
-
choose_inputs_and_set_fee() -> Result<(Vec<Input>, BitcoinAmount, Vec<usize>), Error>- Goal is to find a combination of the fewest inputs that is bigger than what we need - close to twice the send amount while not producing a change amount that is smaller than what the fee would be to spend that amount.
-
estimate_fee_with_default_sizes() -> Result<u64, Error>- Estimates the fee for a transaction with the given number of inputs and outputs given the fee per byte, makes use of default sizes to estimate the size of the transaction and the corresponding fee.
-
prepare_transaction() -> Result<(BTransaction, Vec<usize>), Error>- Prepares a transaction to be signed and broadcasted.
BitcoinWallet's Implementation of the CryptoWallet Trait
-
set_blockchain_client(&mut self, client: Self::BlockchainClient)- Associates a particular blockchain client with the CryptoWallet
-
blockchain_client(&self) -> Result<&Self::BlockchainClient, Self::ErrorType>- Returns the blockchain client that is associated with the CryptoWallet if it exists, otherwise returns an error
-
balance(&self) -> Result<Self::CryptoAmount, Self::ErrorType>- Returns the balance of the CryptoWallet as a CryptoAmount
-
transfer(&self, send_amount: &Self::CryptoAmount, public_address: &str) -> Result<String, Self::ErrorType>- Sends a transaction from the CryptoWallet to a given public address with a given amount
-
sync(&mut self) -> Result<(), Self::ErrorType>- Syncs the CryptoWallet with the blockchain
-
receive_address(&self) -> Result<String, Self::ErrorType>- Returns the receive address of the CryptoWallet, this is the address that is used to receive transactions
-
builder() -> Self::WalletBuilder- Returns a builder for the CryptoWallet that can be used to build a CryptoWallet with custom options
BitcoinWalletBuilder Struct
Builder for BitcoinWallet that allows for the creation of a BitcoinWallet with a custom configuration
BitcoinWalletBuilder Struct Methods
-
gap_limit(&mut self, gap_limit: usize) -> &mut Self- Allows specification of the gap limit to use for the wallet
-
account_discovery(&mut self) -> &mut Self- Enable account discovery, will search consecutive accounts until the gap limit is reached and an account is found with no transactions
-
no_account_discovery(&mut self) -> &mut Self- Specifies that account discovery should not be disabled, will not search past the first account
-
default_hd_purpose(&self) -> Result<HDPurpose, Error>- Returns the default
HDPurposebased on the address format
- Returns the default
-
coin_type_id(&self) -> Result<u32, Error>- Returns the coin type id num based on the network
BitcoinWalletBuilder's Implementation of the CryptoWalletBuilder Trait
-
new() -> Self- Constructs a new
CryptoWalletBuilder
- Constructs a new
-
build(&self) -> Result<T, T::ErrorType>- Builds a
CryptoWalletfrom theCryptoWalletBuilder
- Builds a
-
master_hd_key(&mut self, master_hd_key: HDKey) -> &mut Self- Specifies the master HD key (HDKey) for the CryptoWalletBuilder.
-
mnemonic_seed(&mut self, mnemonic_seed: Seed) -> &mut Self- Specifies the mnemonic seed (
Seed) for theCryptoWalletBuilder.
- Specifies the mnemonic seed (
-
address_format(&mut self, address_format: T::AddressFormat) -> &mut Self- Specifies the address format (CryptoWallet::AddressFormat) for the
CryptoWalletBuilder.
- Specifies the address format (CryptoWallet::AddressFormat) for the
-
hd_path_builder(&mut self, hd_path_builder: HDPathBuilder) -> &mut Self- Specifies the HD path builder (
HDPathBuilder) for theCryptoWalletBuilder.
- Specifies the HD path builder (
-
network_type(&mut self, network_type: T::NetworkType) -> &mut Self- Specifies the network type
CryptoWallet::NetworkTypefor theCryptoWalletBuilder.
- Specifies the network type
BitcoinAmount Struct
Contains a field representing the amount of satoshis in the amount. Has functions to convert to and from the main unit (BTC) and the smallest unit (satoshi).
BitcoinAmount Struct Methods
-
from_btc(btc_amount: f64) -> Self- The number of satoshis (the smallest unit of the bitcoin currency) in the
amount.
There are 100 million satoshis per bitcoin (BTC). Returns a
BitcoinAmountstruct from a decimal value representing the amount in BTC. - The number of satoshis (the smallest unit of the bitcoin currency) in the
-
from_satoshi(satoshi_amount: u64) -> Self- Returns a
BitcoinAmountstruct from an integer value representing the amount in satoshis.
- Returns a
-
btc(&self) -> f64- Returns the amount in BTC as a f64.
-
satoshi(&self) -> u64- Returns the amount in satoshis as a u64.