@@ -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,6 +30,7 @@ use lightning::routing::gossip::{NodeAlias, NodeId};
29
30
use lightning:: util:: persist:: KVStore ;
30
31
31
32
use lightning_invoice:: { Bolt11InvoiceDescription , Description } ;
33
+ use lightning_types:: payment:: { PaymentHash , PaymentPreimage } ;
32
34
33
35
use bitcoin:: address:: NetworkUnchecked ;
34
36
use bitcoin:: hashes:: Hash ;
@@ -1332,6 +1334,7 @@ fn lsps2_client_service_integration() {
1332
1334
let payment_id = payer_node. bolt11_payment ( ) . send ( & jit_invoice, None ) . unwrap ( ) ;
1333
1335
expect_channel_pending_event ! ( service_node, client_node. node_id( ) ) ;
1334
1336
expect_channel_ready_event ! ( service_node, client_node. node_id( ) ) ;
1337
+ expect_event ! ( service_node, PaymentForwarded ) ;
1335
1338
expect_channel_pending_event ! ( client_node, service_node. node_id( ) ) ;
1336
1339
expect_channel_ready_event ! ( client_node, service_node. node_id( ) ) ;
1337
1340
@@ -1357,19 +1360,112 @@ fn lsps2_client_service_integration() {
1357
1360
1358
1361
println ! ( "Generating regular invoice!" ) ;
1359
1362
let invoice_description =
1360
- Bolt11InvoiceDescription :: Direct ( Description :: new ( String :: from ( "asdf" ) ) . unwrap ( ) ) ;
1363
+ Bolt11InvoiceDescription :: Direct ( Description :: new ( String :: from ( "asdf" ) ) . unwrap ( ) ) . into ( ) ;
1361
1364
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 ( ) ;
1366
1367
1367
1368
// Have the payer_node pay the invoice, to check regular forwards service_node -> client_node
1368
1369
// are working as expected.
1369
1370
println ! ( "Paying regular invoice!" ) ;
1370
1371
let payment_id = payer_node. bolt11_payment ( ) . send ( & invoice, None ) . unwrap ( ) ;
1371
1372
expect_payment_successful_event ! ( payer_node, Some ( payment_id) , None ) ;
1373
+ expect_event ! ( service_node, PaymentForwarded ) ;
1372
1374
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 ) ;
1373
1469
}
1374
1470
1375
1471
#[ test]
0 commit comments