@@ -2783,7 +2783,7 @@ impl<Signer: EcdsaChannelSigner> ChannelMonitorImpl<Signer> {
27832783 if let Some ( txid) = self . prev_counterparty_commitment_txid {
27842784 if txid == confirmed_spend_txid {
27852785 if let Some ( commitment_number) = self . counterparty_commitment_txn_on_chain . get ( & txid) {
2786- let htlc_outputs: Vec < HTLCOutputInCommitment > = self . counterparty_claimable_outpoints . get ( & txid) . unwrap ( ) . iter ( ) . map ( |( htlc, _) | htlc. clone ( ) ) . collect ( ) ;
2786+ let htlc_outputs: Vec < HTLCOutputInCommitment > = self . counterparty_claimable_outpoints . get ( & txid) . unwrap_or ( & vec ! [ ] ) . iter ( ) . map ( |( htlc, _) | htlc. clone ( ) ) . collect ( ) ;
27872787 claim_htlcs ! ( * commitment_number, txid, htlc_outputs. as_ref( ) ) ;
27882788 } else {
27892789 debug_assert ! ( false ) ;
@@ -3356,19 +3356,14 @@ impl<Signer: EcdsaChannelSigner> ChannelMonitorImpl<Signer> {
33563356
33573357 /// Returns the HTLC claim package templates and the counterparty output info
33583358 fn get_counterparty_output_claim_info ( & self , commitment_number : u64 , commitment_txid : Txid , tx : Option < & Transaction > , per_commitment_claimable_outpoints : & Vec < HTLCOutputInCommitment > )
3359- -> ( Vec < PackageTemplate > , CommitmentTxCounterpartyOutputInfo ) {
3359+ -> ( Vec < PackageTemplate > , CommitmentTxCounterpartyOutputInfo ) {
33603360 let mut claimable_outpoints = Vec :: new ( ) ;
33613361 let mut to_counterparty_output_info: CommitmentTxCounterpartyOutputInfo = None ;
33623362
3363- // let per_commitment_claimable_outpoints = self.counterparty_claimable_outpoints.get(&commitment_txid).unwrap();
3364- // let per_commitment_claimable_outpoints = match Some(per_commitment_claimable_outpoints) {
3365- // Some(outputs) => outputs,
3366- // None => return (claimable_outpoints, to_counterparty_output_info),
3367- // };
3368- let per_commitment_points = match self . their_cur_per_commitment_points {
3369- Some ( points) => points,
3370- None => return ( claimable_outpoints, to_counterparty_output_info) ,
3371- } ;
3363+ if per_commitment_claimable_outpoints. is_empty ( ) || self . their_cur_per_commitment_points . is_none ( ) {
3364+ return ( claimable_outpoints, to_counterparty_output_info) ;
3365+ }
3366+ let per_commitment_points = self . their_cur_per_commitment_points . as_ref ( ) . unwrap ( ) ;
33723367
33733368 let per_commitment_point =
33743369 // If the counterparty commitment tx is the latest valid state, use their latest
@@ -3775,7 +3770,7 @@ impl<Signer: EcdsaChannelSigner> ChannelMonitorImpl<Signer> {
37753770 // (except for HTLC transactions for channels with anchor outputs), which is an easy
37763771 // way to filter out any potential non-matching txn for lazy filters.
37773772 let prevout = & tx. input [ 0 ] . previous_output ;
3778- let per_commitment_claimable_outpoints: Vec < HTLCOutputInCommitment > = self . counterparty_claimable_outpoints . get ( & tx. txid ( ) ) . unwrap ( ) . iter ( ) . map ( |( htlc, _) | htlc. clone ( ) ) . collect ( ) ;
3773+ let per_commitment_claimable_outpoints: Vec < HTLCOutputInCommitment > = self . counterparty_claimable_outpoints . get ( & tx. txid ( ) ) . unwrap_or ( & vec ! [ ] ) . iter ( ) . map ( |( htlc, _) | htlc. clone ( ) ) . collect ( ) ;
37793774 if prevout. txid == self . funding_info . 0 . txid && prevout. vout == self . funding_info . 0 . index as u32 {
37803775 let mut balance_spendable_csv = None ;
37813776 log_info ! ( logger, "Channel {} closed by funding output spend in txid {}." ,
@@ -4226,9 +4221,7 @@ impl<Signer: EcdsaChannelSigner> ChannelMonitorImpl<Signer> {
42264221 }
42274222
42284223 macro_rules! check_htlc_valid_counterparty {
4229- ( $counterparty_txid: expr, $htlc_output: expr, $per_commitment_data: expr) => {
4230- // if let Some(txid) = $counterparty_txid
4231- {
4224+ ( $htlc_output: expr, $per_commitment_data: expr) => {
42324225 for & ( ref pending_htlc, ref pending_source) in $per_commitment_data {
42334226 if pending_htlc. payment_hash == $htlc_output. payment_hash && pending_htlc. amount_msat == $htlc_output. amount_msat {
42344227 if let & Some ( ref source) = pending_source {
@@ -4238,7 +4231,6 @@ impl<Signer: EcdsaChannelSigner> ChannelMonitorImpl<Signer> {
42384231 }
42394232 }
42404233 }
4241- }
42424234 }
42434235 }
42444236
@@ -4255,9 +4247,13 @@ impl<Signer: EcdsaChannelSigner> ChannelMonitorImpl<Signer> {
42554247 // resolve the source HTLC with the original sender.
42564248 payment_data = Some ( ( ( * source) . clone( ) , htlc_output. payment_hash, htlc_output. amount_msat) ) ;
42574249 } else if !$holder_tx {
4258- check_htlc_valid_counterparty!( self . current_counterparty_commitment_txid, htlc_output, self . counterparty_claimable_outpoints. get( & self . current_counterparty_commitment_txid. unwrap( ) ) . unwrap( ) ) ;
4250+ if let Some ( current_counterparty_commitment_txid) = & self . current_counterparty_commitment_txid {
4251+ check_htlc_valid_counterparty!( htlc_output, self . counterparty_claimable_outpoints. get( current_counterparty_commitment_txid) . unwrap( ) ) ;
4252+ }
42594253 if payment_data. is_none( ) {
4260- check_htlc_valid_counterparty!( self . prev_counterparty_commitment_txid, htlc_output, self . counterparty_claimable_outpoints. get( & self . prev_counterparty_commitment_txid. unwrap( ) ) . unwrap( ) ) ;
4254+ if let Some ( prev_counterparty_commitment_txid) = & self . prev_counterparty_commitment_txid {
4255+ check_htlc_valid_counterparty!( htlc_output, self . counterparty_claimable_outpoints. get( prev_counterparty_commitment_txid) . unwrap( ) ) ;
4256+ }
42614257 }
42624258 }
42634259 if payment_data. is_none( ) {
0 commit comments