Skip to content

Commit 46c384b

Browse files
committed
Clean up error messages and conditionals in reestablish handling
When we reestablish there are generally always 4 conditions for both local and remote commitment transactions: * we're stale and have possibly lost data * we're ahead and the peer has lost data * we're caught up * we're nearly caught up and need to retransmit one update. In especially the local commitment case we had a mess of different comparisons, which is improved here. Further, the error messages are clarified and include more information.
1 parent 589a88e commit 46c384b

File tree

1 file changed

+24
-9
lines changed

1 file changed

+24
-9
lines changed

lightning/src/ln/channel.rs

+24-9
Original file line numberDiff line numberDiff line change
@@ -4179,11 +4179,12 @@ impl<SP: Deref> Channel<SP> where
41794179

41804180
// Before we change the state of the channel, we check if the peer is sending a very old
41814181
// commitment transaction number, if yes we send a warning message.
4182-
let our_commitment_transaction = INITIAL_COMMITMENT_NUMBER - self.context.cur_holder_commitment_transaction_number - 1;
4183-
if msg.next_remote_commitment_number + 1 < our_commitment_transaction {
4184-
return Err(
4185-
ChannelError::Warn(format!("Peer attempted to reestablish channel with a very old local commitment transaction: {} (received) vs {} (expected)", msg.next_remote_commitment_number, our_commitment_transaction))
4186-
);
4182+
if msg.next_remote_commitment_number + 1 < our_commitment_transaction {
4183+
return Err(ChannelError::Warn(format!(
4184+
"Peer attempted to reestablish channel with a very old local commitment transaction: {} (received) vs {} (expected)",
4185+
msg.next_remote_commitment_number,
4186+
our_commitment_transaction
4187+
)));
41874188
}
41884189

41894190
// Go ahead and unmark PeerDisconnected as various calls we may make check for it (and all
@@ -4225,19 +4226,23 @@ impl<SP: Deref> Channel<SP> where
42254226
});
42264227
}
42274228

4228-
let required_revoke = if msg.next_remote_commitment_number + 1 == INITIAL_COMMITMENT_NUMBER - self.context.cur_holder_commitment_transaction_number {
4229+
let required_revoke = if msg.next_remote_commitment_number == our_commitment_transaction {
42294230
// Remote isn't waiting on any RevokeAndACK from us!
42304231
// Note that if we need to repeat our ChannelReady we'll do that in the next if block.
42314232
None
4232-
} else if msg.next_remote_commitment_number + 1 == (INITIAL_COMMITMENT_NUMBER - 1) - self.context.cur_holder_commitment_transaction_number {
4233+
} else if msg.next_remote_commitment_number + 1 == our_commitment_transaction {
42334234
if self.context.channel_state & (ChannelState::MonitorUpdateInProgress as u32) != 0 {
42344235
self.context.monitor_pending_revoke_and_ack = true;
42354236
None
42364237
} else {
42374238
Some(self.get_last_revoke_and_ack())
42384239
}
42394240
} else {
4240-
return Err(ChannelError::Close("Peer attempted to reestablish channel with a very old local commitment transaction".to_owned()));
4241+
return Err(ChannelError::Close(format!(
4242+
"Peer attempted to reestablish channel expecting a future local commitment transaction: {} (received) vs {} (expected)",
4243+
msg.next_remote_commitment_number,
4244+
our_commitment_transaction
4245+
)));
42414246
};
42424247

42434248
// We increment cur_counterparty_commitment_transaction_number only upon receipt of
@@ -4295,8 +4300,18 @@ impl<SP: Deref> Channel<SP> where
42954300
order: self.context.resend_order.clone(),
42964301
})
42974302
}
4303+
} else if msg.next_local_commitment_number < next_counterparty_commitment_number {
4304+
Err(ChannelError::Close(format!(
4305+
"Peer attempted to reestablish channel with a very old local commitment transaction: {} (received) vs {} (expected)",
4306+
msg.next_local_commitment_number,
4307+
next_counterparty_commitment_number,
4308+
)))
42984309
} else {
4299-
Err(ChannelError::Close("Peer attempted to reestablish channel with a very old remote commitment transaction".to_owned()))
4310+
Err(ChannelError::Close(format!(
4311+
"Peer attempted to reestablish channel with a future local commitment transaction: {} (received) vs {} (expected)",
4312+
msg.next_local_commitment_number,
4313+
next_counterparty_commitment_number,
4314+
)))
43004315
}
43014316
}
43024317

0 commit comments

Comments
 (0)