mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-02-24 15:02:20 +01:00
Correct Channel outbound HTLC serialization
Channel serialization should happen "as if remove_uncommitted_htlcs_and_mark_paused had just been called". This is true for the most part, but outbound RemoteRemoved HTLCs were being serialized as normal, even though `remote_uncommitted_htlcs_and_mark_paused` resets them to `Committed`. This led to a bug identified by the `chanmon_consistency_target` fuzzer wherein, if we receive a update_*_htlc message bug not the corresponding commitment_signed prior to a serialization roundtrip, we'd force-close the channel due to the peer "attempting to fail/claim an HTLC which was already failed/claimed".
This commit is contained in:
parent
e003c43183
commit
25dbd0d7e0
1 changed files with 4 additions and 3 deletions
|
@ -4451,9 +4451,10 @@ impl<Signer: Sign> Writeable for Channel<Signer> {
|
|||
&OutboundHTLCState::Committed => {
|
||||
1u8.write(writer)?;
|
||||
},
|
||||
&OutboundHTLCState::RemoteRemoved(ref fail_reason) => {
|
||||
2u8.write(writer)?;
|
||||
fail_reason.write(writer)?;
|
||||
&OutboundHTLCState::RemoteRemoved(_) => {
|
||||
// Treat this as a Committed because we haven't received the CS - they'll
|
||||
// resend the claim/fail on reconnect as we all (hopefully) the missing CS.
|
||||
1u8.write(writer)?;
|
||||
},
|
||||
&OutboundHTLCState::AwaitingRemoteRevokeToRemove(ref fail_reason) => {
|
||||
3u8.write(writer)?;
|
||||
|
|
Loading…
Add table
Reference in a new issue