@@ -9,7 +9,8 @@ mod common;
9
9
10
10
use common:: {
11
11
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,
13
14
logging:: { init_log_logger, validate_log_entry, TestLogWriter } ,
14
15
open_channel, premine_and_distribute_funds, random_config, random_listening_addresses,
15
16
setup_bitcoind_and_electrsd, setup_builder, setup_node, setup_two_nodes, wait_for_tx,
@@ -29,7 +30,7 @@ use lightning::routing::gossip::{NodeAlias, NodeId};
29
30
use lightning:: util:: persist:: KVStore ;
30
31
31
32
use lightning_invoice:: { Bolt11InvoiceDescription , Description } ;
32
- use lightning_types:: payment:: PaymentPreimage ;
33
+ use lightning_types:: payment:: { PaymentHash , PaymentPreimage } ;
33
34
34
35
use bitcoin:: address:: NetworkUnchecked ;
35
36
use bitcoin:: hashes:: sha256:: Hash as Sha256Hash ;
@@ -1334,6 +1335,7 @@ fn lsps2_client_service_integration() {
1334
1335
let payment_id = payer_node. bolt11_payment ( ) . send ( & jit_invoice, None ) . unwrap ( ) ;
1335
1336
expect_channel_pending_event ! ( service_node, client_node. node_id( ) ) ;
1336
1337
expect_channel_ready_event ! ( service_node, client_node. node_id( ) ) ;
1338
+ expect_event ! ( service_node, PaymentForwarded ) ;
1337
1339
expect_channel_pending_event ! ( client_node, service_node. node_id( ) ) ;
1338
1340
expect_channel_ready_event ! ( client_node, service_node. node_id( ) ) ;
1339
1341
@@ -1359,19 +1361,112 @@ fn lsps2_client_service_integration() {
1359
1361
1360
1362
println ! ( "Generating regular invoice!" ) ;
1361
1363
let invoice_description =
1362
- Bolt11InvoiceDescription :: Direct ( Description :: new ( String :: from ( "asdf" ) ) . unwrap ( ) ) ;
1364
+ Bolt11InvoiceDescription :: Direct ( Description :: new ( String :: from ( "asdf" ) ) . unwrap ( ) ) . into ( ) ;
1363
1365
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 ( ) ;
1368
1368
1369
1369
// Have the payer_node pay the invoice, to check regular forwards service_node -> client_node
1370
1370
// are working as expected.
1371
1371
println ! ( "Paying regular invoice!" ) ;
1372
1372
let payment_id = payer_node. bolt11_payment ( ) . send ( & invoice, None ) . unwrap ( ) ;
1373
1373
expect_payment_successful_event ! ( payer_node, Some ( payment_id) , None ) ;
1374
+ expect_event ! ( service_node, PaymentForwarded ) ;
1374
1375
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 ) ;
1375
1470
}
1376
1471
1377
1472
#[ test]
0 commit comments