@@ -33,10 +33,11 @@ use bitcoin::secp256k1::ecdh::SharedSecret;
3333use bitcoin:: secp256k1:: { PublicKey , Scalar , Secp256k1 , SecretKey } ;
3434
3535use crate :: io:: { Cursor , Read } ;
36- use crate :: ln:: msgs:: OutboundOnionPayload ;
36+ use crate :: ln:: msgs:: { FinalOnionHopData , OutboundOnionPayload } ;
3737#[ allow( unused_imports) ]
3838use crate :: prelude:: * ;
3939use core:: ops:: Deref ;
40+ use types:: payment:: PaymentSecret ;
4041
4142pub ( crate ) struct OnionKeys {
4243 #[ cfg( test) ]
@@ -1400,11 +1401,19 @@ pub fn create_payment_onion<T: secp256k1::Signing>(
14001401 } ) ?;
14011402
14021403 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+ } ) ;
14041413 onion_payloads. push ( OutboundOnionPayload :: TrampolineEntrypoint {
14051414 amt_to_forward : outer_total_msat,
14061415 outgoing_cltv_value : outer_starting_htlc_offset,
1407- multipath_trampoline_data : None ,
1416+ multipath_trampoline_data,
14081417 trampoline_packet,
14091418 } ) ;
14101419 } ,
0 commit comments