@@ -33,10 +33,11 @@ use bitcoin::secp256k1::ecdh::SharedSecret;
33
33
use bitcoin:: secp256k1:: { PublicKey , Scalar , Secp256k1 , SecretKey } ;
34
34
35
35
use crate :: io:: { Cursor , Read } ;
36
- use crate :: ln:: msgs:: OutboundOnionPayload ;
36
+ use crate :: ln:: msgs:: { FinalOnionHopData , OutboundOnionPayload } ;
37
37
#[ allow( unused_imports) ]
38
38
use crate :: prelude:: * ;
39
39
use core:: ops:: Deref ;
40
+ use types:: payment:: PaymentSecret ;
40
41
41
42
pub ( crate ) struct OnionKeys {
42
43
#[ cfg( test) ]
@@ -1400,11 +1401,19 @@ pub fn create_payment_onion<T: secp256k1::Signing>(
1400
1401
} ) ?;
1401
1402
1402
1403
match last_payload {
1403
- OutboundOnionPayload :: Receive { .. } => {
1404
+ OutboundOnionPayload :: Receive { payment_data, .. } => {
1405
+ let multipath_trampoline_data = payment_data. map ( |d| {
1406
+ let trampoline_payment_secret = Sha256 :: hash ( & d. payment_secret . 0 ) . to_byte_array ( ) ;
1407
+ let total_msat = d. total_msat + path. hops . last ( ) . map_or ( 0 , |h| h. fee_msat ) ;
1408
+ FinalOnionHopData {
1409
+ payment_secret : PaymentSecret ( trampoline_payment_secret) ,
1410
+ total_msat,
1411
+ }
1412
+ } ) ;
1404
1413
onion_payloads. push ( OutboundOnionPayload :: TrampolineEntrypoint {
1405
1414
amt_to_forward : outer_total_msat,
1406
1415
outgoing_cltv_value : outer_starting_htlc_offset,
1407
- multipath_trampoline_data : None ,
1416
+ multipath_trampoline_data,
1408
1417
trampoline_packet,
1409
1418
} ) ;
1410
1419
} ,
0 commit comments