Skip to content

Commit 1111f05

Browse files
committed
fixup: Determine if we have lost data
1 parent ef1806c commit 1111f05

File tree

1 file changed

+42
-44
lines changed

1 file changed

+42
-44
lines changed

lightning/src/ln/channelmanager.rs

Lines changed: 42 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -9105,53 +9105,51 @@ This indicates a bug inside LDK. Please report this error at https://github.com/
91059105
let per_peer_state = self.per_peer_state.read().unwrap();
91069106

91079107
let mut cursor = io::Cursor::new(decrypted);
9108-
match <PeerStorageMonitorHolderList as Readable>::read(&mut cursor) {
9109-
Ok(mon_list) => {
9110-
for mon_holder in mon_list.monitors.iter() {
9111-
let peer_state_mutex =
9112-
match per_peer_state.get(&mon_holder.counterparty_node_id) {
9113-
Some(mutex) => mutex,
9114-
None => {
9115-
log_debug!(
9116-
logger,
9117-
"Not able to find peer_state for the counterparty {}, channelId {}",
9118-
log_pubkey!(mon_holder.counterparty_node_id),
9119-
mon_holder.channel_id
9120-
);
9121-
continue;
9122-
},
9123-
};
9108+
let mon_list = <PeerStorageMonitorHolderList as Readable>::read(&mut cursor).unwrap_or_else(|e| {
9109+
// This should NEVER happen.
9110+
log_debug!(self.logger, "Unable to unpack the retrieved peer storage {:?}", e);
9111+
PeerStorageMonitorHolderList { monitors: Vec::new() }
9112+
});
91249113

9125-
let peer_state_lock = peer_state_mutex.lock().unwrap();
9126-
let peer_state = &*peer_state_lock;
9114+
for mon_holder in mon_list.monitors.iter() {
9115+
let peer_state_mutex =
9116+
match per_peer_state.get(&mon_holder.counterparty_node_id) {
9117+
Some(mutex) => mutex,
9118+
None => {
9119+
log_debug!(
9120+
logger,
9121+
"Not able to find peer_state for the counterparty {}, channelId {}",
9122+
log_pubkey!(mon_holder.counterparty_node_id),
9123+
mon_holder.channel_id
9124+
);
9125+
continue;
9126+
},
9127+
};
91279128

9128-
match peer_state.channel_by_id.get(&mon_holder.channel_id) {
9129-
Some(chan) => {
9130-
if let Some(funded_chan) = chan.as_funded() {
9131-
if funded_chan
9132-
.get_revoked_counterparty_commitment_transaction_number()
9133-
> mon_holder.min_seen_secret
9134-
{
9135-
panic!(
9136-
"Lost channel state for channel {}.
9137-
Received peer storage with a more recent state than what our node had.
9138-
Use the FundRecoverer to initiate a force close and sweep the funds.",
9139-
&mon_holder.channel_id
9140-
);
9141-
}
9142-
}
9143-
},
9144-
None => {
9145-
// TODO: Figure out if this channel is so old that we have forgotten about it.
9146-
panic!("Lost a channel {}", &mon_holder.channel_id);
9147-
},
9148-
}
9149-
}
9150-
},
9129+
let peer_state_lock = peer_state_mutex.lock().unwrap();
9130+
let peer_state = &*peer_state_lock;
91519131

9152-
Err(e) => {
9153-
panic!("Wrong serialisation of PeerStorageMonitorHolderList: {}", e);
9154-
},
9132+
match peer_state.channel_by_id.get(&mon_holder.channel_id) {
9133+
Some(chan) => {
9134+
if let Some(funded_chan) = chan.as_funded() {
9135+
if funded_chan
9136+
.get_revoked_counterparty_commitment_transaction_number()
9137+
> mon_holder.min_seen_secret
9138+
{
9139+
panic!(
9140+
"Lost channel state for channel {}.
9141+
Received peer storage with a more recent state than what our node had.
9142+
Use the FundRecoverer to initiate a force close and sweep the funds.",
9143+
&mon_holder.channel_id
9144+
);
9145+
}
9146+
}
9147+
},
9148+
None => {
9149+
// TODO: Figure out if this channel is so old that we have forgotten about it.
9150+
panic!("Lost a channel {}", &mon_holder.channel_id);
9151+
},
9152+
}
91559153
}
91569154
Ok(())
91579155
}

0 commit comments

Comments
 (0)