[−][src]Module bdk::wallet::coin_selection
Coin selection
This module provides the trait CoinSelectionAlgorithm
that can be implemented to
define custom coin selection algorithms.
The coin selection algorithm is not globally part of a Wallet
, instead it
is selected whenever a Wallet::create_tx
call is made, through
the use of the TxBuilder
structure, specifically with
TxBuilder::coin_selection
method.
The DefaultCoinSelectionAlgorithm
selects the default coin selection algorithm that
TxBuilder
uses, if it's not explicitly overridden.
Example
#[derive(Debug)] struct AlwaysSpendEverything; impl<D: Database> CoinSelectionAlgorithm<D> for AlwaysSpendEverything { fn coin_select( &self, database: &D, required_utxos: Vec<(UTXO, usize)>, optional_utxos: Vec<(UTXO, usize)>, fee_rate: FeeRate, amount_needed: u64, fee_amount: f32, ) -> Result<CoinSelectionResult, bdk::Error> { let mut selected_amount = 0; let mut additional_weight = 0; let all_utxos_selected = required_utxos .into_iter().chain(optional_utxos) .scan((&mut selected_amount, &mut additional_weight), |(selected_amount, additional_weight), (utxo, weight)| { **selected_amount += utxo.txout.value; **additional_weight += TXIN_BASE_WEIGHT + weight; Some(utxo) }) .collect::<Vec<_>>(); let additional_fees = additional_weight as f32 * fee_rate.as_sat_vb() / 4.0; if (fee_amount + additional_fees).ceil() as u64 + amount_needed > selected_amount { return Err(bdk::Error::InsufficientFunds); } Ok(CoinSelectionResult { selected: all_utxos_selected, selected_amount, fee_amount: fee_amount + additional_fees, }) } } // create wallet, sync, ... let to_address = Address::from_str("2N4eQYCbKUHCCTUjBJeHcJp9ok6J2GZsTDt").unwrap(); let (psbt, details) = wallet.create_tx( TxBuilder::with_recipients(vec![(to_address.script_pubkey(), 50_000)]) .coin_selection(AlwaysSpendEverything), )?; // inspect, sign, broadcast, ...
Structs
BranchAndBoundCoinSelection | Branch and bound coin selection |
CoinSelectionResult | Result of a successful coin selection |
LargestFirstCoinSelection | Simple and dumb coin selection |
Traits
CoinSelectionAlgorithm | Trait for generalized coin selection algorithms |
Type Definitions
DefaultCoinSelectionAlgorithm | Default coin selection algorithm used by |