Pass must-spend inputs to users by ownership
authorMatt Corallo <git@bluematt.me>
Tue, 18 Jul 2023 19:34:00 +0000 (19:34 +0000)
committerMatt Corallo <git@bluematt.me>
Thu, 20 Jul 2023 19:49:43 +0000 (19:49 +0000)
We already hold them in a vec, so there's no cost to passing them
by ownership vs making it a slice. Further, this helps bindings as
we can't represent slices to non-pointers in a sensible way.

lightning/src/events/bump_transaction.rs

index a9133f50ed8448cdd855856398581241ca41b6a6..751a43e0233a09ed815cc324be4446392fa97859 100644 (file)
@@ -464,7 +464,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<Input>, must_pay_to: &[TxOut],
                target_feerate_sat_per_1000_weight: u32,
        ) -> Result<CoinSelection, ()>;
        /// Signs and provides the full witness for all inputs within the transaction known to the
@@ -600,7 +600,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<Input>, must_pay_to: &[TxOut],
                target_feerate_sat_per_1000_weight: u32,
        ) -> Result<CoinSelection, ()> {
                let utxos = self.source.list_confirmed_utxos()?;
@@ -726,7 +726,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 +800,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::<u64>();
                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::<u64>() +
-                               must_spend.iter().map(|input| input.satisfaction_weight).sum::<u64>();
+                               must_spend_satisfaction_weight;
                self.process_coin_selection(&mut htlc_tx, coin_selection);
 
                #[cfg(debug_assertions)]