Skip to main content

NonDustDrainCoinSelection

Struct NonDustDrainCoinSelection 

Source
pub struct NonDustDrainCoinSelection;
Expand description

Coin selection for transactions whose only output is the drain (change) output, like a CPFP child. Guarantees that this output ends up above the dust limit.

BDK’s default algorithm stops selecting coins as soon as the target amount is covered. If the selected coins overshoot the target by less than the dust limit, the leftover is too small to be a valid output. Normally BDK would drop it and let it go to fees, but when the drain is the transaction’s only output, dropping it leaves no outputs at all, so TxBuilder::finish fails with InsufficientFunds — even if the wallet has plenty of other coins available.

This wrapper asks the default algorithm for slightly more: the dust limit, plus the fee the drain output itself adds. That makes it keep pulling in coins until the leftover is a valid output. The result is then adjusted so that the extra ends up in the drain output rather than being burned as fee.

Trait Implementations§

Source§

impl Clone for NonDustDrainCoinSelection

Source§

fn clone(&self) -> NonDustDrainCoinSelection

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl CoinSelectionAlgorithm for NonDustDrainCoinSelection

Source§

fn coin_select<R: RngCore>( &self, required_utxos: Vec<WeightedUtxo>, optional_utxos: Vec<WeightedUtxo>, fee_rate: FeeRate, target_amount: Amount, drain_script: &Script, rand: &mut R, ) -> Result<CoinSelectionResult, InsufficientFunds>

Perform the coin selection Read more
Source§

impl Copy for NonDustDrainCoinSelection

Source§

impl Debug for NonDustDrainCoinSelection

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for NonDustDrainCoinSelection

Source§

fn default() -> NonDustDrainCoinSelection

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V