X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;ds=inline;f=lightning%2Fsrc%2Fevents%2Fbump_transaction.rs;h=4e7c3a224c29204d57d43220527ea9ba423b9620;hb=56fba35422df9a921e25d0474897fd9640b1631e;hp=a9133f50ed8448cdd855856398581241ca41b6a6;hpb=be08b4f6b8ff3248710852f17760647f5b63ee24;p=rust-lightning
diff --git a/lightning/src/events/bump_transaction.rs b/lightning/src/events/bump_transaction.rs
index a9133f50e..4e7c3a224 100644
--- a/lightning/src/events/bump_transaction.rs
+++ b/lightning/src/events/bump_transaction.rs
@@ -26,7 +26,7 @@ use crate::ln::chan_utils::{
use crate::ln::features::ChannelTypeFeatures;
use crate::ln::PaymentPreimage;
use crate::prelude::*;
-use crate::sign::{ChannelSigner, EcdsaChannelSigner, SignerProvider, WriteableEcdsaChannelSigner};
+use crate::sign::{EcdsaChannelSigner, SignerProvider, WriteableEcdsaChannelSigner};
use crate::sync::Mutex;
use crate::util::logger::Logger;
@@ -341,6 +341,7 @@ pub enum BumpTransactionEvent {
/// An input that must be included in a transaction when performing coin selection through
/// [`CoinSelectionSource::select_confirmed_utxos`]. It is guaranteed to be a SegWit input, so it
/// must have an empty [`TxIn::script_sig`] when spent.
+#[derive(Clone, Debug, Hash, PartialOrd, Ord, PartialEq, Eq)]
pub struct Input {
/// The unique identifier of the input.
pub outpoint: OutPoint,
@@ -354,7 +355,7 @@ pub struct Input {
/// An unspent transaction output that is available to spend resulting from a successful
/// [`CoinSelection`] attempt.
-#[derive(Clone, Debug)]
+#[derive(Clone, Debug, Hash, PartialOrd, Ord, PartialEq, Eq)]
pub struct Utxo {
/// The unique identifier of the output.
pub outpoint: OutPoint,
@@ -421,6 +422,7 @@ impl Utxo {
/// The result of a successful coin selection attempt for a transaction requiring additional UTXOs
/// to cover its fees.
+#[derive(Clone, Debug)]
pub struct CoinSelection {
/// The set of UTXOs (with at least 1 confirmation) to spend and use within a transaction
/// requiring additional fees.
@@ -464,7 +466,7 @@ pub trait CoinSelectionSource {
/// which UTXOs to double spend is left to the implementation, but it must strive to keep the
/// set of other claims being double spent to a minimum.
fn select_confirmed_utxos(
- &self, claim_id: ClaimId, must_spend: &[Input], must_pay_to: &[TxOut],
+ &self, claim_id: ClaimId, must_spend: Vec, must_pay_to: &[TxOut],
target_feerate_sat_per_1000_weight: u32,
) -> Result;
/// Signs and provides the full witness for all inputs within the transaction known to the
@@ -600,7 +602,7 @@ where
L::Target: Logger
{
fn select_confirmed_utxos(
- &self, claim_id: ClaimId, must_spend: &[Input], must_pay_to: &[TxOut],
+ &self, claim_id: ClaimId, must_spend: Vec, must_pay_to: &[TxOut],
target_feerate_sat_per_1000_weight: u32,
) -> Result {
let utxos = self.source.list_confirmed_utxos()?;
@@ -726,7 +728,7 @@ where
satisfaction_weight: commitment_tx.weight() as u64 + ANCHOR_INPUT_WITNESS_WEIGHT + EMPTY_SCRIPT_SIG_WEIGHT,
}];
let coin_selection = self.utxo_source.select_confirmed_utxos(
- claim_id, &must_spend, &[], anchor_target_feerate_sat_per_1000_weight,
+ claim_id, must_spend, &[], anchor_target_feerate_sat_per_1000_weight,
)?;
let mut anchor_tx = Transaction {
@@ -800,13 +802,16 @@ where
log_debug!(self.logger, "Peforming coin selection for HTLC transaction targeting {} sat/kW",
target_feerate_sat_per_1000_weight);
+ #[cfg(debug_assertions)]
+ let must_spend_satisfaction_weight =
+ must_spend.iter().map(|input| input.satisfaction_weight).sum::();
let coin_selection = self.utxo_source.select_confirmed_utxos(
- claim_id, &must_spend, &htlc_tx.output, target_feerate_sat_per_1000_weight,
+ claim_id, must_spend, &htlc_tx.output, target_feerate_sat_per_1000_weight,
)?;
#[cfg(debug_assertions)]
let total_satisfaction_weight =
coin_selection.confirmed_utxos.iter().map(|utxo| utxo.satisfaction_weight).sum::() +
- must_spend.iter().map(|input| input.satisfaction_weight).sum::();
+ must_spend_satisfaction_weight;
self.process_coin_selection(&mut htlc_tx, coin_selection);
#[cfg(debug_assertions)]