mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-02-25 15:20:24 +01:00
Drop channels on disconnection if we haven't funded them yet
This commit is contained in:
parent
f55f055b4e
commit
5fe598c073
2 changed files with 19 additions and 6 deletions
|
@ -1771,6 +1771,13 @@ impl Channel {
|
||||||
/// Returns the set of PendingHTLCStatuses from remote uncommitted HTLCs (which we're
|
/// Returns the set of PendingHTLCStatuses from remote uncommitted HTLCs (which we're
|
||||||
/// implicitly dropping) and the payment_hashes of HTLCs we tried to add but are dropping.
|
/// implicitly dropping) and the payment_hashes of HTLCs we tried to add but are dropping.
|
||||||
pub fn remove_uncommitted_htlcs(&mut self) -> Vec<(HTLCSource, [u8; 32])> {
|
pub fn remove_uncommitted_htlcs(&mut self) -> Vec<(HTLCSource, [u8; 32])> {
|
||||||
|
let mut outbound_drops = Vec::new();
|
||||||
|
|
||||||
|
if self.channel_state < ChannelState::FundingSent as u32 {
|
||||||
|
self.channel_state = ChannelState::ShutdownComplete as u32;
|
||||||
|
return outbound_drops;
|
||||||
|
}
|
||||||
|
|
||||||
self.pending_inbound_htlcs.retain(|htlc| {
|
self.pending_inbound_htlcs.retain(|htlc| {
|
||||||
match htlc.state {
|
match htlc.state {
|
||||||
InboundHTLCState::RemoteAnnounced => {
|
InboundHTLCState::RemoteAnnounced => {
|
||||||
|
@ -1806,7 +1813,6 @@ impl Channel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut outbound_drops = Vec::new();
|
|
||||||
self.holding_cell_htlc_updates.retain(|htlc_update| {
|
self.holding_cell_htlc_updates.retain(|htlc_update| {
|
||||||
match htlc_update {
|
match htlc_update {
|
||||||
&HTLCUpdateAwaitingACK::AddHTLC { ref payment_hash, ref source, .. } => {
|
&HTLCUpdateAwaitingACK::AddHTLC { ref payment_hash, ref source, .. } => {
|
||||||
|
|
|
@ -2149,16 +2149,23 @@ impl ChannelMessageHandler for ChannelManager {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
for chan in channel_state.by_id {
|
channel_state.by_id.retain(|_, chan| {
|
||||||
if chan.1.get_their_node_id() == *their_node_id {
|
if chan.get_their_node_id() == *their_node_id {
|
||||||
//TODO: mark channel disabled (and maybe announce such after a timeout).
|
//TODO: mark channel disabled (and maybe announce such after a timeout).
|
||||||
let failed_adds = chan.1.remove_uncommitted_htlcs();
|
let failed_adds = chan.remove_uncommitted_htlcs();
|
||||||
if !failed_adds.is_empty() {
|
if !failed_adds.is_empty() {
|
||||||
let chan_update = self.get_channel_update(&chan.1).map(|u| u.encode_with_len()).unwrap(); // Cannot add/recv HTLCs before we have a short_id so unwrap is safe
|
let chan_update = self.get_channel_update(&chan).map(|u| u.encode_with_len()).unwrap(); // Cannot add/recv HTLCs before we have a short_id so unwrap is safe
|
||||||
failed_payments.push((chan_update, failed_adds));
|
failed_payments.push((chan_update, failed_adds));
|
||||||
}
|
}
|
||||||
|
if chan.is_shutdown() {
|
||||||
|
if let Some(short_id) = chan.get_short_channel_id() {
|
||||||
|
short_to_id.remove(&short_id);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
true
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for failure in failed_channels.drain(..) {
|
for failure in failed_channels.drain(..) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue