@@ -222,6 +222,7 @@ struct OutboundHTLCOutput {
222
222
payment_hash : PaymentHash ,
223
223
state : OutboundHTLCState ,
224
224
source : HTLCSource ,
225
+ skimmed_fee_msat : Option < u64 > ,
225
226
}
226
227
227
228
/// See AwaitingRemoteRevoke ChannelState for more info
@@ -233,6 +234,8 @@ enum HTLCUpdateAwaitingACK {
233
234
payment_hash : PaymentHash ,
234
235
source : HTLCSource ,
235
236
onion_routing_packet : msgs:: OnionPacket ,
237
+ // The extra fee skimmed by the sender of this update_add.
238
+ skimmed_fee_msat : Option < u64 > ,
236
239
} ,
237
240
ClaimHTLC {
238
241
payment_preimage : PaymentPreimage ,
@@ -5928,6 +5931,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
5928
5931
cltv_expiry,
5929
5932
source,
5930
5933
onion_routing_packet,
5934
+ skimmed_fee_msat : None ,
5931
5935
} ) ;
5932
5936
return Ok ( None ) ;
5933
5937
}
@@ -5939,6 +5943,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
5939
5943
cltv_expiry,
5940
5944
state : OutboundHTLCState :: LocalAnnounced ( Box :: new ( onion_routing_packet. clone ( ) ) ) ,
5941
5945
source,
5946
+ skimmed_fee_msat : None ,
5942
5947
} ) ;
5943
5948
5944
5949
let res = msgs:: UpdateAddHTLC {
@@ -6458,18 +6463,23 @@ impl<Signer: WriteableEcdsaChannelSigner> Writeable for Channel<Signer> {
6458
6463
reason. write ( writer) ?;
6459
6464
}
6460
6465
}
6466
+ htlc. skimmed_fee_msat . write ( writer) ?;
6461
6467
}
6462
6468
6463
6469
( self . holding_cell_htlc_updates . len ( ) as u64 ) . write ( writer) ?;
6464
6470
for update in self . holding_cell_htlc_updates . iter ( ) {
6465
6471
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
+ } => {
6467
6476
0u8 . write ( writer) ?;
6468
6477
amount_msat. write ( writer) ?;
6469
6478
cltv_expiry. write ( writer) ?;
6470
6479
payment_hash. write ( writer) ?;
6471
6480
source. write ( writer) ?;
6472
6481
onion_routing_packet. write ( writer) ?;
6482
+ skimmed_fee_msat. write ( writer) ?;
6473
6483
} ,
6474
6484
& HTLCUpdateAwaitingACK :: ClaimHTLC { ref payment_preimage, ref htlc_id } => {
6475
6485
1u8 . write ( writer) ?;
@@ -6746,6 +6756,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
6746
6756
} ,
6747
6757
_ => return Err ( DecodeError :: InvalidValue ) ,
6748
6758
} ,
6759
+ skimmed_fee_msat : Readable :: read ( reader) ?,
6749
6760
} ) ;
6750
6761
}
6751
6762
@@ -6759,6 +6770,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
6759
6770
payment_hash : Readable :: read ( reader) ?,
6760
6771
source : Readable :: read ( reader) ?,
6761
6772
onion_routing_packet : Readable :: read ( reader) ?,
6773
+ skimmed_fee_msat : Readable :: read ( reader) ?,
6762
6774
} ,
6763
6775
1 => HTLCUpdateAwaitingACK :: ClaimHTLC {
6764
6776
payment_preimage : Readable :: read ( reader) ?,
@@ -7317,7 +7329,8 @@ mod tests {
7317
7329
session_priv : SecretKey :: from_slice ( & hex:: decode ( "0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ) . unwrap ( ) [ ..] ) . unwrap ( ) ,
7318
7330
first_hop_htlc_msat : 548 ,
7319
7331
payment_id : PaymentId ( [ 42 ; 32 ] ) ,
7320
- }
7332
+ } ,
7333
+ skimmed_fee_msat : None ,
7321
7334
} ) ;
7322
7335
7323
7336
// Make sure when Node A calculates their local commitment transaction, none of the HTLCs pass
0 commit comments