@@ -68,8 +68,8 @@ use crate::util::byte_utils;
6868use crate :: util:: logger:: { Logger , WithContext } ;
6969use crate :: util:: persist:: MonitorName ;
7070use crate :: util:: ser:: {
71- MaybeReadable , Readable , ReadableArgs , RequiredWrapper , UpgradableRequired , Writeable , Writer ,
72- U48 ,
71+ Iterable , MaybeReadable , Readable , ReadableArgs , RequiredWrapper , UpgradableRequired ,
72+ Writeable , Writer , U48 ,
7373} ;
7474
7575#[ allow( unused_imports) ]
@@ -1719,24 +1719,23 @@ pub(crate) fn write_chanmon_internal<Signer: EcdsaChannelSigner, W: Writer>(
17191719 channel_monitor. lockdown_from_offchain . write ( writer) ?;
17201720 channel_monitor. holder_tx_signed . write ( writer) ?;
17211721
1722- // If we have a `HolderForceClosedWithInfo` event, we need to write the `HolderForceClosed` for backwards compatibility.
1723- let pending_monitor_events =
1724- match channel_monitor. pending_monitor_events . iter ( ) . find ( |ev| match ev {
1725- MonitorEvent :: HolderForceClosedWithInfo { .. } => true ,
1726- _ => false ,
1727- } ) {
1728- Some ( MonitorEvent :: HolderForceClosedWithInfo { outpoint, .. } ) => {
1729- let mut pending_monitor_events = channel_monitor. pending_monitor_events . clone ( ) ;
1730- pending_monitor_events. push ( MonitorEvent :: HolderForceClosed ( * outpoint) ) ;
1731- pending_monitor_events
1732- } ,
1733- _ => channel_monitor. pending_monitor_events . clone ( ) ,
1734- } ;
1722+ // If we have a `HolderForceClosedWithInfo` event, we need to write the `HolderForceClosed`
1723+ // for backwards compatibility.
1724+ let holder_force_closed_compat = channel_monitor. pending_monitor_events . iter ( ) . find_map ( |ev| {
1725+ if let MonitorEvent :: HolderForceClosedWithInfo { outpoint, .. } = ev {
1726+ Some ( MonitorEvent :: HolderForceClosed ( * outpoint) )
1727+ } else {
1728+ None
1729+ }
1730+ } ) ;
1731+ let pending_monitor_events = Iterable (
1732+ channel_monitor. pending_monitor_events . iter ( ) . chain ( holder_force_closed_compat. as_ref ( ) ) ,
1733+ ) ;
17351734
17361735 write_tlv_fields ! ( writer, {
17371736 ( 1 , channel_monitor. funding_spend_confirmed, option) ,
17381737 ( 3 , channel_monitor. htlcs_resolved_on_chain, required_vec) ,
1739- ( 5 , pending_monitor_events, required_vec ) ,
1738+ ( 5 , pending_monitor_events, required ) , // Equivalent to required_vec because Iterable also writes as WithoutLength
17401739 ( 7 , channel_monitor. funding_spend_seen, required) ,
17411740 ( 9 , channel_monitor. counterparty_node_id, required) ,
17421741 ( 11 , channel_monitor. confirmed_commitment_tx_counterparty_output, option) ,
0 commit comments