@@ -9,7 +9,8 @@ mod common;
99
1010use common:: {
1111 do_channel_full_cycle, expect_channel_pending_event, expect_channel_ready_event, expect_event,
12- expect_payment_received_event, expect_payment_successful_event, generate_blocks_and_wait,
12+ expect_payment_claimable_event, expect_payment_received_event, expect_payment_successful_event,
13+ generate_blocks_and_wait,
1314 logging:: { init_log_logger, validate_log_entry, TestLogWriter } ,
1415 open_channel, premine_and_distribute_funds, random_config, random_listening_addresses,
1516 setup_bitcoind_and_electrsd, setup_builder, setup_node, setup_two_nodes, wait_for_tx,
@@ -29,7 +30,7 @@ use lightning::routing::gossip::{NodeAlias, NodeId};
2930use lightning:: util:: persist:: KVStore ;
3031
3132use lightning_invoice:: { Bolt11InvoiceDescription , Description } ;
32- use lightning_types:: payment:: PaymentPreimage ;
33+ use lightning_types:: payment:: { PaymentHash , PaymentPreimage } ;
3334
3435use bitcoin:: address:: NetworkUnchecked ;
3536use bitcoin:: hashes:: sha256:: Hash as Sha256Hash ;
@@ -1334,6 +1335,7 @@ fn lsps2_client_service_integration() {
13341335 let payment_id = payer_node. bolt11_payment ( ) . send ( & jit_invoice, None ) . unwrap ( ) ;
13351336 expect_channel_pending_event ! ( service_node, client_node. node_id( ) ) ;
13361337 expect_channel_ready_event ! ( service_node, client_node. node_id( ) ) ;
1338+ expect_event ! ( service_node, PaymentForwarded ) ;
13371339 expect_channel_pending_event ! ( client_node, service_node. node_id( ) ) ;
13381340 expect_channel_ready_event ! ( client_node, service_node. node_id( ) ) ;
13391341
@@ -1359,19 +1361,112 @@ fn lsps2_client_service_integration() {
13591361
13601362 println ! ( "Generating regular invoice!" ) ;
13611363 let invoice_description =
1362- Bolt11InvoiceDescription :: Direct ( Description :: new ( String :: from ( "asdf" ) ) . unwrap ( ) ) ;
1364+ Bolt11InvoiceDescription :: Direct ( Description :: new ( String :: from ( "asdf" ) ) . unwrap ( ) ) . into ( ) ;
13631365 let amount_msat = 5_000_000 ;
1364- let invoice = client_node
1365- . bolt11_payment ( )
1366- . receive ( amount_msat, & invoice_description. into ( ) , 1024 )
1367- . unwrap ( ) ;
1366+ let invoice =
1367+ client_node. bolt11_payment ( ) . receive ( amount_msat, & invoice_description, 1024 ) . unwrap ( ) ;
13681368
13691369 // Have the payer_node pay the invoice, to check regular forwards service_node -> client_node
13701370 // are working as expected.
13711371 println ! ( "Paying regular invoice!" ) ;
13721372 let payment_id = payer_node. bolt11_payment ( ) . send ( & invoice, None ) . unwrap ( ) ;
13731373 expect_payment_successful_event ! ( payer_node, Some ( payment_id) , None ) ;
1374+ expect_event ! ( service_node, PaymentForwarded ) ;
13741375 expect_payment_received_event ! ( client_node, amount_msat) ;
1376+
1377+ ////////////////////////////////////////////////////////////////////////////
1378+ // receive_via_jit_channel_for_hash and claim_for_hash
1379+ ////////////////////////////////////////////////////////////////////////////
1380+ println ! ( "Generating JIT invoice!" ) ;
1381+ // Increase the amount to make sure it does not fit into the existing channels.
1382+ let jit_amount_msat = 200_000_000 ;
1383+ let manual_preimage = PaymentPreimage ( [ 42u8 ; 32 ] ) ;
1384+ let manual_payment_hash: PaymentHash = manual_preimage. into ( ) ;
1385+ let jit_invoice = client_node
1386+ . bolt11_payment ( )
1387+ . receive_via_jit_channel_for_hash (
1388+ jit_amount_msat,
1389+ & invoice_description,
1390+ 1024 ,
1391+ None ,
1392+ manual_payment_hash,
1393+ )
1394+ . unwrap ( ) ;
1395+
1396+ // Have the payer_node pay the invoice, therby triggering channel open service_node -> client_node.
1397+ println ! ( "Paying JIT invoice!" ) ;
1398+ let payment_id = payer_node. bolt11_payment ( ) . send ( & jit_invoice, None ) . unwrap ( ) ;
1399+ expect_channel_pending_event ! ( service_node, client_node. node_id( ) ) ;
1400+ expect_channel_ready_event ! ( service_node, client_node. node_id( ) ) ;
1401+ expect_channel_pending_event ! ( client_node, service_node. node_id( ) ) ;
1402+ expect_channel_ready_event ! ( client_node, service_node. node_id( ) ) ;
1403+
1404+ let service_fee_msat = ( jit_amount_msat * channel_opening_fee_ppm as u64 ) / 1_000_000 ;
1405+ let expected_received_amount_msat = jit_amount_msat - service_fee_msat;
1406+ let claimable_amount_msat = expect_payment_claimable_event ! (
1407+ client_node,
1408+ payment_id,
1409+ manual_payment_hash,
1410+ expected_received_amount_msat
1411+ ) ;
1412+ println ! ( "Claiming payment!" ) ;
1413+ client_node
1414+ . bolt11_payment ( )
1415+ . claim_for_hash ( manual_payment_hash, claimable_amount_msat, manual_preimage)
1416+ . unwrap ( ) ;
1417+
1418+ expect_event ! ( service_node, PaymentForwarded ) ;
1419+ expect_payment_successful_event ! ( payer_node, Some ( payment_id) , None ) ;
1420+ let client_payment_id =
1421+ expect_payment_received_event ! ( client_node, expected_received_amount_msat) . unwrap ( ) ;
1422+ let client_payment = client_node. payment ( & client_payment_id) . unwrap ( ) ;
1423+ match client_payment. kind {
1424+ PaymentKind :: Bolt11Jit { counterparty_skimmed_fee_msat, .. } => {
1425+ assert_eq ! ( counterparty_skimmed_fee_msat, Some ( service_fee_msat) ) ;
1426+ } ,
1427+ _ => panic ! ( "Unexpected payment kind" ) ,
1428+ }
1429+
1430+ ////////////////////////////////////////////////////////////////////////////
1431+ // receive_via_jit_channel_for_hash and fail_for_hash
1432+ ////////////////////////////////////////////////////////////////////////////
1433+ println ! ( "Generating JIT invoice!" ) ;
1434+ // Increase the amount to make sure it does not fit into the existing channels.
1435+ let jit_amount_msat = 400_000_000 ;
1436+ let manual_preimage = PaymentPreimage ( [ 43u8 ; 32 ] ) ;
1437+ let manual_payment_hash: PaymentHash = manual_preimage. into ( ) ;
1438+ let jit_invoice = client_node
1439+ . bolt11_payment ( )
1440+ . receive_via_jit_channel_for_hash (
1441+ jit_amount_msat,
1442+ & invoice_description,
1443+ 1024 ,
1444+ None ,
1445+ manual_payment_hash,
1446+ )
1447+ . unwrap ( ) ;
1448+
1449+ // Have the payer_node pay the invoice, therby triggering channel open service_node -> client_node.
1450+ println ! ( "Paying JIT invoice!" ) ;
1451+ let payment_id = payer_node. bolt11_payment ( ) . send ( & jit_invoice, None ) . unwrap ( ) ;
1452+ expect_channel_pending_event ! ( service_node, client_node. node_id( ) ) ;
1453+ expect_channel_ready_event ! ( service_node, client_node. node_id( ) ) ;
1454+ expect_channel_pending_event ! ( client_node, service_node. node_id( ) ) ;
1455+ expect_channel_ready_event ! ( client_node, service_node. node_id( ) ) ;
1456+
1457+ let service_fee_msat = ( jit_amount_msat * channel_opening_fee_ppm as u64 ) / 1_000_000 ;
1458+ let expected_received_amount_msat = jit_amount_msat - service_fee_msat;
1459+ expect_payment_claimable_event ! (
1460+ client_node,
1461+ payment_id,
1462+ manual_payment_hash,
1463+ expected_received_amount_msat
1464+ ) ;
1465+ println ! ( "Failing payment!" ) ;
1466+ client_node. bolt11_payment ( ) . fail_for_hash ( manual_payment_hash) . unwrap ( ) ;
1467+
1468+ expect_event ! ( payer_node, PaymentFailed ) ;
1469+ assert_eq ! ( client_node. payment( & payment_id) . unwrap( ) . status, PaymentStatus :: Failed ) ;
13751470}
13761471
13771472#[ test]
0 commit comments