@@ -224,6 +224,7 @@ struct OutboundHTLCOutput {
224
224
payment_hash : PaymentHash ,
225
225
state : OutboundHTLCState ,
226
226
source : HTLCSource ,
227
+ skimmed_fee_msat : Option < u64 > ,
227
228
}
228
229
229
230
/// See AwaitingRemoteRevoke ChannelState for more info
@@ -235,6 +236,8 @@ enum HTLCUpdateAwaitingACK {
235
236
payment_hash : PaymentHash ,
236
237
source : HTLCSource ,
237
238
onion_routing_packet : msgs:: OnionPacket ,
239
+ // The extra fee we're skimming off the top of this HTLC.
240
+ skimmed_fee_msat : Option < u64 > ,
238
241
} ,
239
242
ClaimHTLC {
240
243
payment_preimage : PaymentPreimage ,
@@ -6063,6 +6066,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
6063
6066
cltv_expiry,
6064
6067
source,
6065
6068
onion_routing_packet,
6069
+ skimmed_fee_msat : None ,
6066
6070
} ) ;
6067
6071
return Ok ( None ) ;
6068
6072
}
@@ -6074,6 +6078,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
6074
6078
cltv_expiry,
6075
6079
state : OutboundHTLCState :: LocalAnnounced ( Box :: new ( onion_routing_packet. clone ( ) ) ) ,
6076
6080
source,
6081
+ skimmed_fee_msat : None ,
6077
6082
} ) ;
6078
6083
6079
6084
let res = msgs:: UpdateAddHTLC {
@@ -6593,18 +6598,23 @@ impl<Signer: WriteableEcdsaChannelSigner> Writeable for Channel<Signer> {
6593
6598
reason. write ( writer) ?;
6594
6599
}
6595
6600
}
6601
+ htlc. skimmed_fee_msat . write ( writer) ?;
6596
6602
}
6597
6603
6598
6604
( self . holding_cell_htlc_updates . len ( ) as u64 ) . write ( writer) ?;
6599
6605
for update in self . holding_cell_htlc_updates . iter ( ) {
6600
6606
match update {
6601
- & HTLCUpdateAwaitingACK :: AddHTLC { ref amount_msat, ref cltv_expiry, ref payment_hash, ref source, ref onion_routing_packet } => {
6607
+ & HTLCUpdateAwaitingACK :: AddHTLC {
6608
+ ref amount_msat, ref cltv_expiry, ref payment_hash, ref source, ref onion_routing_packet,
6609
+ ref skimmed_fee_msat,
6610
+ } => {
6602
6611
0u8 . write ( writer) ?;
6603
6612
amount_msat. write ( writer) ?;
6604
6613
cltv_expiry. write ( writer) ?;
6605
6614
payment_hash. write ( writer) ?;
6606
6615
source. write ( writer) ?;
6607
6616
onion_routing_packet. write ( writer) ?;
6617
+ skimmed_fee_msat. write ( writer) ?;
6608
6618
} ,
6609
6619
& HTLCUpdateAwaitingACK :: ClaimHTLC { ref payment_preimage, ref htlc_id } => {
6610
6620
1u8 . write ( writer) ?;
@@ -6881,6 +6891,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
6881
6891
} ,
6882
6892
_ => return Err ( DecodeError :: InvalidValue ) ,
6883
6893
} ,
6894
+ skimmed_fee_msat : Readable :: read ( reader) ?,
6884
6895
} ) ;
6885
6896
}
6886
6897
@@ -6894,6 +6905,7 @@ impl<'a, 'b, 'c, ES: Deref, SP: Deref> ReadableArgs<(&'a ES, &'b SP, u32, &'c Ch
6894
6905
payment_hash : Readable :: read ( reader) ?,
6895
6906
source : Readable :: read ( reader) ?,
6896
6907
onion_routing_packet : Readable :: read ( reader) ?,
6908
+ skimmed_fee_msat : Readable :: read ( reader) ?,
6897
6909
} ,
6898
6910
1 => HTLCUpdateAwaitingACK :: ClaimHTLC {
6899
6911
payment_preimage : Readable :: read ( reader) ?,
@@ -7453,7 +7465,8 @@ mod tests {
7453
7465
session_priv : SecretKey :: from_slice ( & hex:: decode ( "0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ) . unwrap ( ) [ ..] ) . unwrap ( ) ,
7454
7466
first_hop_htlc_msat : 548 ,
7455
7467
payment_id : PaymentId ( [ 42 ; 32 ] ) ,
7456
- }
7468
+ } ,
7469
+ skimmed_fee_msat : None ,
7457
7470
} ) ;
7458
7471
7459
7472
// Make sure when Node A calculates their local commitment transaction, none of the HTLCs pass
@@ -7987,6 +8000,7 @@ mod tests {
7987
8000
payment_hash : PaymentHash ( [ 0 ; 32 ] ) ,
7988
8001
state : OutboundHTLCState :: Committed ,
7989
8002
source : HTLCSource :: dummy ( ) ,
8003
+ skimmed_fee_msat : None ,
7990
8004
} ;
7991
8005
out. payment_hash . 0 = Sha256 :: hash ( & hex:: decode ( "0202020202020202020202020202020202020202020202020202020202020202" ) . unwrap ( ) ) . into_inner ( ) ;
7992
8006
out
@@ -7999,6 +8013,7 @@ mod tests {
7999
8013
payment_hash : PaymentHash ( [ 0 ; 32 ] ) ,
8000
8014
state : OutboundHTLCState :: Committed ,
8001
8015
source : HTLCSource :: dummy ( ) ,
8016
+ skimmed_fee_msat : None ,
8002
8017
} ;
8003
8018
out. payment_hash . 0 = Sha256 :: hash ( & hex:: decode ( "0303030303030303030303030303030303030303030303030303030303030303" ) . unwrap ( ) ) . into_inner ( ) ;
8004
8019
out
@@ -8400,6 +8415,7 @@ mod tests {
8400
8415
payment_hash : PaymentHash ( [ 0 ; 32 ] ) ,
8401
8416
state : OutboundHTLCState :: Committed ,
8402
8417
source : HTLCSource :: dummy ( ) ,
8418
+ skimmed_fee_msat : None ,
8403
8419
} ;
8404
8420
out. payment_hash . 0 = Sha256 :: hash ( & hex:: decode ( "0505050505050505050505050505050505050505050505050505050505050505" ) . unwrap ( ) ) . into_inner ( ) ;
8405
8421
out
@@ -8412,6 +8428,7 @@ mod tests {
8412
8428
payment_hash : PaymentHash ( [ 0 ; 32 ] ) ,
8413
8429
state : OutboundHTLCState :: Committed ,
8414
8430
source : HTLCSource :: dummy ( ) ,
8431
+ skimmed_fee_msat : None ,
8415
8432
} ;
8416
8433
out. payment_hash . 0 = Sha256 :: hash ( & hex:: decode ( "0505050505050505050505050505050505050505050505050505050505050505" ) . unwrap ( ) ) . into_inner ( ) ;
8417
8434
out
0 commit comments