@@ -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 we're skimming off the top of this HTLC.
238
+ skimmed_fee_msat : Option < u64 > ,
236
239
} ,
237
240
ClaimHTLC {
238
241
payment_preimage : PaymentPreimage ,
@@ -6003,6 +6006,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
6003
6006
cltv_expiry,
6004
6007
source,
6005
6008
onion_routing_packet,
6009
+ skimmed_fee_msat : None ,
6006
6010
} ) ;
6007
6011
return Ok ( None ) ;
6008
6012
}
@@ -6014,6 +6018,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
6014
6018
cltv_expiry,
6015
6019
state : OutboundHTLCState :: LocalAnnounced ( Box :: new ( onion_routing_packet. clone ( ) ) ) ,
6016
6020
source,
6021
+ skimmed_fee_msat : None ,
6017
6022
} ) ;
6018
6023
6019
6024
let res = msgs:: UpdateAddHTLC {
@@ -6533,18 +6538,23 @@ impl<Signer: WriteableEcdsaChannelSigner> Writeable for Channel<Signer> {
6533
6538
reason. write ( writer) ?;
6534
6539
}
6535
6540
}
6541
+ htlc. skimmed_fee_msat . write ( writer) ?;
6536
6542
}
6537
6543
6538
6544
( self . holding_cell_htlc_updates . len ( ) as u64 ) . write ( writer) ?;
6539
6545
for update in self . holding_cell_htlc_updates . iter ( ) {
6540
6546
match update {
6541
- & HTLCUpdateAwaitingACK :: AddHTLC { ref amount_msat, ref cltv_expiry, ref payment_hash, ref source, ref onion_routing_packet } => {
6547
+ & HTLCUpdateAwaitingACK :: AddHTLC {
6548
+ ref amount_msat, ref cltv_expiry, ref payment_hash, ref source, ref onion_routing_packet,
6549
+ ref skimmed_fee_msat,
6550
+ } => {
6542
6551
0u8 . write ( writer) ?;
6543
6552
amount_msat. write ( writer) ?;
6544
6553
cltv_expiry. write ( writer) ?;
6545
6554
payment_hash. write ( writer) ?;
6546
6555
source. write ( writer) ?;
6547
6556
onion_routing_packet. write ( writer) ?;
6557
+ skimmed_fee_msat. write ( writer) ?;
6548
6558
} ,
6549
6559
& HTLCUpdateAwaitingACK :: ClaimHTLC { ref payment_preimage, ref htlc_id } => {
6550
6560
1u8 . write ( writer) ?;
@@ -6821,6 +6831,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
6821
6831
} ,
6822
6832
_ => return Err ( DecodeError :: InvalidValue ) ,
6823
6833
} ,
6834
+ skimmed_fee_msat : Readable :: read ( reader) ?,
6824
6835
} ) ;
6825
6836
}
6826
6837
@@ -6834,6 +6845,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
6834
6845
payment_hash : Readable :: read ( reader) ?,
6835
6846
source : Readable :: read ( reader) ?,
6836
6847
onion_routing_packet : Readable :: read ( reader) ?,
6848
+ skimmed_fee_msat : Readable :: read ( reader) ?,
6837
6849
} ,
6838
6850
1 => HTLCUpdateAwaitingACK :: ClaimHTLC {
6839
6851
payment_preimage : Readable :: read ( reader) ?,
@@ -7393,7 +7405,8 @@ mod tests {
7393
7405
session_priv : SecretKey :: from_slice ( & hex:: decode ( "0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ) . unwrap ( ) [ ..] ) . unwrap ( ) ,
7394
7406
first_hop_htlc_msat : 548 ,
7395
7407
payment_id : PaymentId ( [ 42 ; 32 ] ) ,
7396
- }
7408
+ } ,
7409
+ skimmed_fee_msat : None ,
7397
7410
} ) ;
7398
7411
7399
7412
// Make sure when Node A calculates their local commitment transaction, none of the HTLCs pass
@@ -7927,6 +7940,7 @@ mod tests {
7927
7940
payment_hash : PaymentHash ( [ 0 ; 32 ] ) ,
7928
7941
state : OutboundHTLCState :: Committed ,
7929
7942
source : HTLCSource :: dummy ( ) ,
7943
+ skimmed_fee_msat : None ,
7930
7944
} ;
7931
7945
out. payment_hash . 0 = Sha256 :: hash ( & hex:: decode ( "0202020202020202020202020202020202020202020202020202020202020202" ) . unwrap ( ) ) . into_inner ( ) ;
7932
7946
out
@@ -7939,6 +7953,7 @@ mod tests {
7939
7953
payment_hash : PaymentHash ( [ 0 ; 32 ] ) ,
7940
7954
state : OutboundHTLCState :: Committed ,
7941
7955
source : HTLCSource :: dummy ( ) ,
7956
+ skimmed_fee_msat : None ,
7942
7957
} ;
7943
7958
out. payment_hash . 0 = Sha256 :: hash ( & hex:: decode ( "0303030303030303030303030303030303030303030303030303030303030303" ) . unwrap ( ) ) . into_inner ( ) ;
7944
7959
out
@@ -8340,6 +8355,7 @@ mod tests {
8340
8355
payment_hash : PaymentHash ( [ 0 ; 32 ] ) ,
8341
8356
state : OutboundHTLCState :: Committed ,
8342
8357
source : HTLCSource :: dummy ( ) ,
8358
+ skimmed_fee_msat : None ,
8343
8359
} ;
8344
8360
out. payment_hash . 0 = Sha256 :: hash ( & hex:: decode ( "0505050505050505050505050505050505050505050505050505050505050505" ) . unwrap ( ) ) . into_inner ( ) ;
8345
8361
out
@@ -8352,6 +8368,7 @@ mod tests {
8352
8368
payment_hash : PaymentHash ( [ 0 ; 32 ] ) ,
8353
8369
state : OutboundHTLCState :: Committed ,
8354
8370
source : HTLCSource :: dummy ( ) ,
8371
+ skimmed_fee_msat : None ,
8355
8372
} ;
8356
8373
out. payment_hash . 0 = Sha256 :: hash ( & hex:: decode ( "0505050505050505050505050505050505050505050505050505050505050505" ) . unwrap ( ) ) . into_inner ( ) ;
8357
8374
out
0 commit comments