Skip to content

Commit 50c62dc

Browse files
Persist update_add sender skimmed fee in Channel
1 parent c72d7af commit 50c62dc

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

lightning/src/ln/channel.rs

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ struct OutboundHTLCOutput {
222222
payment_hash: PaymentHash,
223223
state: OutboundHTLCState,
224224
source: HTLCSource,
225+
skimmed_fee_msat: Option<u64>,
225226
}
226227

227228
/// See AwaitingRemoteRevoke ChannelState for more info
@@ -233,6 +234,8 @@ enum HTLCUpdateAwaitingACK {
233234
payment_hash: PaymentHash,
234235
source: HTLCSource,
235236
onion_routing_packet: msgs::OnionPacket,
237+
// The extra fee skimmed by the sender of this update_add.
238+
skimmed_fee_msat: Option<u64>,
236239
},
237240
ClaimHTLC {
238241
payment_preimage: PaymentPreimage,
@@ -5928,6 +5931,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
59285931
cltv_expiry,
59295932
source,
59305933
onion_routing_packet,
5934+
skimmed_fee_msat: None,
59315935
});
59325936
return Ok(None);
59335937
}
@@ -5939,6 +5943,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
59395943
cltv_expiry,
59405944
state: OutboundHTLCState::LocalAnnounced(Box::new(onion_routing_packet.clone())),
59415945
source,
5946+
skimmed_fee_msat: None,
59425947
});
59435948

59445949
let res = msgs::UpdateAddHTLC {
@@ -6458,18 +6463,23 @@ impl<Signer: WriteableEcdsaChannelSigner> Writeable for Channel<Signer> {
64586463
reason.write(writer)?;
64596464
}
64606465
}
6466+
htlc.skimmed_fee_msat.write(writer)?;
64616467
}
64626468

64636469
(self.holding_cell_htlc_updates.len() as u64).write(writer)?;
64646470
for update in self.holding_cell_htlc_updates.iter() {
64656471
match update {
6466-
&HTLCUpdateAwaitingACK::AddHTLC { ref amount_msat, ref cltv_expiry, ref payment_hash, ref source, ref onion_routing_packet } => {
6472+
&HTLCUpdateAwaitingACK::AddHTLC {
6473+
ref amount_msat, ref cltv_expiry, ref payment_hash, ref source, ref onion_routing_packet,
6474+
ref skimmed_fee_msat,
6475+
} => {
64676476
0u8.write(writer)?;
64686477
amount_msat.write(writer)?;
64696478
cltv_expiry.write(writer)?;
64706479
payment_hash.write(writer)?;
64716480
source.write(writer)?;
64726481
onion_routing_packet.write(writer)?;
6482+
skimmed_fee_msat.write(writer)?;
64736483
},
64746484
&HTLCUpdateAwaitingACK::ClaimHTLC { ref payment_preimage, ref htlc_id } => {
64756485
1u8.write(writer)?;
@@ -6746,6 +6756,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
67466756
},
67476757
_ => return Err(DecodeError::InvalidValue),
67486758
},
6759+
skimmed_fee_msat: Readable::read(reader)?,
67496760
});
67506761
}
67516762

@@ -6759,6 +6770,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
67596770
payment_hash: Readable::read(reader)?,
67606771
source: Readable::read(reader)?,
67616772
onion_routing_packet: Readable::read(reader)?,
6773+
skimmed_fee_msat: Readable::read(reader)?,
67626774
},
67636775
1 => HTLCUpdateAwaitingACK::ClaimHTLC {
67646776
payment_preimage: Readable::read(reader)?,
@@ -7317,7 +7329,8 @@ mod tests {
73177329
session_priv: SecretKey::from_slice(&hex::decode("0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff").unwrap()[..]).unwrap(),
73187330
first_hop_htlc_msat: 548,
73197331
payment_id: PaymentId([42; 32]),
7320-
}
7332+
},
7333+
skimmed_fee_msat: None,
73217334
});
73227335

73237336
// Make sure when Node A calculates their local commitment transaction, none of the HTLCs pass
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
## Backwards Compat
2+
3+
* Setting `ChannelConfig::accept_underpaying_htlcs` may break compatibility with versions of LDK
4+
prior to 0.0.116, and unsetting the feature between restarts may lead to payment failures

0 commit comments

Comments
 (0)