@@ -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,6 +30,7 @@ use lightning::routing::gossip::{NodeAlias, NodeId};
2930use lightning:: util:: persist:: KVStore ;
3031
3132use lightning_invoice:: { Bolt11InvoiceDescription , Description } ;
33+ use lightning_types:: payment:: { PaymentHash , PaymentPreimage } ;
3234
3335use bitcoin:: address:: NetworkUnchecked ;
3436use bitcoin:: hashes:: Hash ;
@@ -1332,6 +1334,7 @@ fn lsps2_client_service_integration() {
13321334 let payment_id = payer_node. bolt11_payment ( ) . send ( & jit_invoice, None ) . unwrap ( ) ;
13331335 expect_channel_pending_event ! ( service_node, client_node. node_id( ) ) ;
13341336 expect_channel_ready_event ! ( service_node, client_node. node_id( ) ) ;
1337+ expect_event ! ( service_node, PaymentForwarded ) ;
13351338 expect_channel_pending_event ! ( client_node, service_node. node_id( ) ) ;
13361339 expect_channel_ready_event ! ( client_node, service_node. node_id( ) ) ;
13371340
@@ -1357,19 +1360,112 @@ fn lsps2_client_service_integration() {
13571360
13581361 println ! ( "Generating regular invoice!" ) ;
13591362 let invoice_description =
1360- Bolt11InvoiceDescription :: Direct ( Description :: new ( String :: from ( "asdf" ) ) . unwrap ( ) ) ;
1363+ Bolt11InvoiceDescription :: Direct ( Description :: new ( String :: from ( "asdf" ) ) . unwrap ( ) ) . into ( ) ;
13611364 let amount_msat = 5_000_000 ;
1362- let invoice = client_node
1363- . bolt11_payment ( )
1364- . receive ( amount_msat, & invoice_description. into ( ) , 1024 )
1365- . unwrap ( ) ;
1365+ let invoice =
1366+ client_node. bolt11_payment ( ) . receive ( amount_msat, & invoice_description, 1024 ) . unwrap ( ) ;
13661367
13671368 // Have the payer_node pay the invoice, to check regular forwards service_node -> client_node
13681369 // are working as expected.
13691370 println ! ( "Paying regular invoice!" ) ;
13701371 let payment_id = payer_node. bolt11_payment ( ) . send ( & invoice, None ) . unwrap ( ) ;
13711372 expect_payment_successful_event ! ( payer_node, Some ( payment_id) , None ) ;
1373+ expect_event ! ( service_node, PaymentForwarded ) ;
13721374 expect_payment_received_event ! ( client_node, amount_msat) ;
1375+
1376+ ////////////////////////////////////////////////////////////////////////////
1377+ // receive_via_jit_channel_for_hash and claim_for_hash
1378+ ////////////////////////////////////////////////////////////////////////////
1379+ println ! ( "Generating JIT invoice!" ) ;
1380+ // Increase the amount to make sure it does not fit into the existing channels.
1381+ let jit_amount_msat = 200_000_000 ;
1382+ let manual_preimage = PaymentPreimage ( [ 42u8 ; 32 ] ) ;
1383+ let manual_payment_hash: PaymentHash = manual_preimage. into ( ) ;
1384+ let jit_invoice = client_node
1385+ . bolt11_payment ( )
1386+ . receive_via_jit_channel_for_hash (
1387+ jit_amount_msat,
1388+ & invoice_description,
1389+ 1024 ,
1390+ None ,
1391+ manual_payment_hash,
1392+ )
1393+ . unwrap ( ) ;
1394+
1395+ // Have the payer_node pay the invoice, therby triggering channel open service_node -> client_node.
1396+ println ! ( "Paying JIT invoice!" ) ;
1397+ let payment_id = payer_node. bolt11_payment ( ) . send ( & jit_invoice, None ) . unwrap ( ) ;
1398+ expect_channel_pending_event ! ( service_node, client_node. node_id( ) ) ;
1399+ expect_channel_ready_event ! ( service_node, client_node. node_id( ) ) ;
1400+ expect_channel_pending_event ! ( client_node, service_node. node_id( ) ) ;
1401+ expect_channel_ready_event ! ( client_node, service_node. node_id( ) ) ;
1402+
1403+ let service_fee_msat = ( jit_amount_msat * channel_opening_fee_ppm as u64 ) / 1_000_000 ;
1404+ let expected_received_amount_msat = jit_amount_msat - service_fee_msat;
1405+ let claimable_amount_msat = expect_payment_claimable_event ! (
1406+ client_node,
1407+ payment_id,
1408+ manual_payment_hash,
1409+ expected_received_amount_msat
1410+ ) ;
1411+ println ! ( "Claiming payment!" ) ;
1412+ client_node
1413+ . bolt11_payment ( )
1414+ . claim_for_hash ( manual_payment_hash, claimable_amount_msat, manual_preimage)
1415+ . unwrap ( ) ;
1416+
1417+ expect_event ! ( service_node, PaymentForwarded ) ;
1418+ expect_payment_successful_event ! ( payer_node, Some ( payment_id) , None ) ;
1419+ let client_payment_id =
1420+ expect_payment_received_event ! ( client_node, expected_received_amount_msat) . unwrap ( ) ;
1421+ let client_payment = client_node. payment ( & client_payment_id) . unwrap ( ) ;
1422+ match client_payment. kind {
1423+ PaymentKind :: Bolt11Jit { counterparty_skimmed_fee_msat, .. } => {
1424+ assert_eq ! ( counterparty_skimmed_fee_msat, Some ( service_fee_msat) ) ;
1425+ } ,
1426+ _ => panic ! ( "Unexpected payment kind" ) ,
1427+ }
1428+
1429+ ////////////////////////////////////////////////////////////////////////////
1430+ // receive_via_jit_channel_for_hash and fail_for_hash
1431+ ////////////////////////////////////////////////////////////////////////////
1432+ println ! ( "Generating JIT invoice!" ) ;
1433+ // Increase the amount to make sure it does not fit into the existing channels.
1434+ let jit_amount_msat = 400_000_000 ;
1435+ let manual_preimage = PaymentPreimage ( [ 43u8 ; 32 ] ) ;
1436+ let manual_payment_hash: PaymentHash = manual_preimage. into ( ) ;
1437+ let jit_invoice = client_node
1438+ . bolt11_payment ( )
1439+ . receive_via_jit_channel_for_hash (
1440+ jit_amount_msat,
1441+ & invoice_description,
1442+ 1024 ,
1443+ None ,
1444+ manual_payment_hash,
1445+ )
1446+ . unwrap ( ) ;
1447+
1448+ // Have the payer_node pay the invoice, therby triggering channel open service_node -> client_node.
1449+ println ! ( "Paying JIT invoice!" ) ;
1450+ let payment_id = payer_node. bolt11_payment ( ) . send ( & jit_invoice, None ) . unwrap ( ) ;
1451+ expect_channel_pending_event ! ( service_node, client_node. node_id( ) ) ;
1452+ expect_channel_ready_event ! ( service_node, client_node. node_id( ) ) ;
1453+ expect_channel_pending_event ! ( client_node, service_node. node_id( ) ) ;
1454+ expect_channel_ready_event ! ( client_node, service_node. node_id( ) ) ;
1455+
1456+ let service_fee_msat = ( jit_amount_msat * channel_opening_fee_ppm as u64 ) / 1_000_000 ;
1457+ let expected_received_amount_msat = jit_amount_msat - service_fee_msat;
1458+ expect_payment_claimable_event ! (
1459+ client_node,
1460+ payment_id,
1461+ manual_payment_hash,
1462+ expected_received_amount_msat
1463+ ) ;
1464+ println ! ( "Failing payment!" ) ;
1465+ client_node. bolt11_payment ( ) . fail_for_hash ( manual_payment_hash) . unwrap ( ) ;
1466+
1467+ expect_event ! ( payer_node, PaymentFailed ) ;
1468+ assert_eq ! ( client_node. payment( & payment_id) . unwrap( ) . status, PaymentStatus :: Failed ) ;
13731469}
13741470
13751471#[ test]
0 commit comments