@@ -15,7 +15,7 @@ use crate::chain::{ChannelMonitorUpdateStatus, Confirm, Listen, Watch};
15
15
use crate :: chain:: channelmonitor:: { ANTI_REORG_DELAY , HTLC_FAIL_BACK_BUFFER , LATENCY_GRACE_PERIOD_BLOCKS } ;
16
16
use crate :: sign:: EntropySource ;
17
17
use crate :: chain:: transaction:: OutPoint ;
18
- use crate :: events:: { ClosureReason , Event , HTLCDestination , MessageSendEvent , MessageSendEventsProvider , PathFailure , PaymentFailureReason } ;
18
+ use crate :: events:: { ClosureReason , Event , HTLCDestination , MessageSendEvent , MessageSendEventsProvider , PathFailure , PaymentFailureReason , PaymentPurpose } ;
19
19
use crate :: ln:: channel:: EXPIRE_PREV_CONFIG_TICKS ;
20
20
use crate :: ln:: channelmanager:: { BREAKDOWN_TIMEOUT , ChannelManager , MPP_TIMEOUT_TICKS , MIN_CLTV_EXPIRY_DELTA , PaymentId , PaymentSendFailure , IDEMPOTENCY_TIMEOUT_TICKS , RecentPaymentDetails , RecipientOnionFields , HTLCForwardInfo , PendingHTLCRouting , PendingAddHTLCInfo } ;
21
21
use crate :: ln:: features:: Bolt11InvoiceFeatures ;
@@ -274,22 +274,31 @@ fn do_test_keysend_payments(public_node: bool, with_retry: bool) {
274
274
nodes[ 0 ] . logger , & scorer, & ( ) , & random_seed_bytes
275
275
) . unwrap ( ) ;
276
276
277
- let test_preimage = PaymentPreimage ( [ 42 ; 32 ] ) ;
278
- let payment_hash = if with_retry {
279
- nodes[ 0 ] . node . send_spontaneous_payment_with_retry ( Some ( test_preimage) ,
280
- RecipientOnionFields :: spontaneous_empty ( ) , PaymentId ( test_preimage. 0 ) ,
281
- route_params, Retry :: Attempts ( 1 ) ) . unwrap ( )
282
- } else {
283
- nodes[ 0 ] . node . send_spontaneous_payment ( & route, Some ( test_preimage) ,
284
- RecipientOnionFields :: spontaneous_empty ( ) , PaymentId ( test_preimage. 0 ) ) . unwrap ( )
285
- } ;
277
+ {
278
+ let test_preimage = PaymentPreimage ( [ 42 ; 32 ] ) ;
279
+ if with_retry {
280
+ nodes[ 0 ] . node . send_spontaneous_payment_with_retry ( Some ( test_preimage) ,
281
+ RecipientOnionFields :: spontaneous_empty ( ) , PaymentId ( test_preimage. 0 ) ,
282
+ route_params, Retry :: Attempts ( 1 ) ) . unwrap ( )
283
+ } else {
284
+ nodes[ 0 ] . node . send_spontaneous_payment ( & route, Some ( test_preimage) ,
285
+ RecipientOnionFields :: spontaneous_empty ( ) , PaymentId ( test_preimage. 0 ) ) . unwrap ( )
286
+ } ;
287
+ }
286
288
check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
287
- let mut events = nodes[ 0 ] . node . get_and_clear_pending_msg_events ( ) ;
288
- assert_eq ! ( events. len( ) , 1 ) ;
289
- let event = events. pop ( ) . unwrap ( ) ;
290
- let path = vec ! [ & nodes[ 1 ] ] ;
291
- pass_along_path ( & nodes[ 0 ] , & path, 10000 , payment_hash, None , event, true , Some ( test_preimage) ) ;
292
- claim_payment ( & nodes[ 0 ] , & path, test_preimage) ;
289
+ let send_event = SendEvent :: from_node ( & nodes[ 0 ] ) ;
290
+ nodes[ 1 ] . node . handle_update_add_htlc ( & nodes[ 0 ] . node . get_our_node_id ( ) , & send_event. msgs [ 0 ] ) ;
291
+ do_commitment_signed_dance ( & nodes[ 1 ] , & nodes[ 0 ] , & send_event. commitment_msg , false , false ) ;
292
+ expect_pending_htlcs_forwardable ! ( nodes[ 1 ] ) ;
293
+ // Previously, a refactor caused us to stop including the payment preimage in the onion which
294
+ // is sent as a part of keysend payments. Thus, to be extra careful here, we scope the preimage
295
+ // above to demonstrate that we have no way to get the preimage at this point except by
296
+ // extracting it from the onion nodes[1] received.
297
+ let event = nodes[ 1 ] . node . get_and_clear_pending_events ( ) ;
298
+ assert_eq ! ( event. len( ) , 1 ) ;
299
+ if let Event :: PaymentClaimable { purpose : PaymentPurpose :: SpontaneousPayment ( preimage) , .. } = event[ 0 ] {
300
+ claim_payment ( & nodes[ 0 ] , & [ & nodes[ 1 ] ] , preimage) ;
301
+ } else { panic ! ( ) ; }
293
302
}
294
303
295
304
#[ test]
0 commit comments