@@ -123,6 +123,11 @@ public Result_SignDecodeErrorZ read_chan_signer(byte[] reader) {
123123 public Result_RecoverableSignatureNoneZ sign_invoice (byte [] invoice_preimage ) {
124124 return underlying_if .sign_invoice (invoice_preimage );
125125 }
126+
127+ @ Override
128+ public byte [] get_inbound_payment_key_material () {
129+ return underlying_if .get_inbound_payment_key_material ();
130+ }
126131 });
127132 }
128133
@@ -139,8 +144,8 @@ public Result_NoneChannelMonitorUpdateErrZ update_channel(OutPoint funding_txo,
139144 synchronized (monitors ) {
140145 String txid = Arrays .toString (funding_txo .get_txid ());
141146 assert monitors .containsKey (txid );
142- Result_NoneMonitorUpdateErrorZ update_res = monitors .get (txid ).update_monitor (update , tx_broadcaster , fee_estimator , logger );
143- assert update_res instanceof Result_NoneMonitorUpdateErrorZ . Result_NoneMonitorUpdateErrorZ_OK ;
147+ Result_NoneNoneZ update_res = monitors .get (txid ).update_monitor (update , tx_broadcaster , fee_estimator , logger );
148+ assert update_res instanceof Result_NoneNoneZ . Result_NoneNoneZ_OK ;
144149 }
145150 return Result_NoneChannelMonitorUpdateErrZ .ok ();
146151 }
@@ -206,7 +211,7 @@ private ChannelMonitor test_mon_roundtrip(OutPoint expected_id, byte[] data) {
206211 }
207212
208213 private Peer (Object _dummy , byte seed ) {
209- logger = Logger .new_impl ((Record arg )->{
214+ logger = Logger .new_impl ((org . ldk . structs . Record arg )->{
210215 if (arg .get_level () == Level .LDKLevel_Error )
211216 System .err .println (seed + ": " + arg .get_module_path () + " - " + arg .get_args ());
212217 else
@@ -353,8 +358,8 @@ private void bind_nio() {
353358 this .constructor = new ChannelManagerConstructor (Network .LDKNetwork_Bitcoin , UserConfig .with_default (), new byte [32 ], 0 ,
354359 this .keys_interface , this .fee_estimator , this .chain_monitor , this .router , this .tx_broadcaster , this .logger );
355360 }
356- LockableScore scorer = null ;
357- if (use_invoice_payer ) { scorer = LockableScore .of (Scorer .with_default ().as_Score ()); }
361+ MultiThreadedLockableScore scorer = null ;
362+ if (use_invoice_payer ) { scorer = MultiThreadedLockableScore .of (Scorer .with_default ().as_Score ()); }
358363 constructor .chain_sync_completed (new ChannelManagerConstructor .EventHandler () {
359364 @ Override public void handle_event (Event event ) {
360365 synchronized (pending_manager_events ) {
@@ -376,12 +381,13 @@ private void bind_nio() {
376381 if (use_invoice_payer ) {
377382 this .payer = InvoicePayer .of (this .chan_manager .as_Payer (), Router .new_impl (new Router .RouterInterface () {
378383 @ Override
379- public Result_RouteLightningErrorZ find_route (byte [] payer , RouteParameters params , ChannelDetails [] first_hops , Score scorer ) {
384+ public Result_RouteLightningErrorZ find_route (byte [] payer , RouteParameters params , byte [] payment_hash , ChannelDetails [] first_hops , Score scorer ) {
380385 return UtilMethods .find_route (payer , params , router , first_hops , logger , scorer );
381386 }
382- }), LockableScore .of (Score .new_impl (new Score .ScoreInterface () {
387+ }), MultiThreadedLockableScore .of (Score .new_impl (new Score .ScoreInterface () {
383388 @ Override public void payment_path_failed (RouteHop [] path , long scid ) {}
384- @ Override public long channel_penalty_msat (long scid , NodeId src , NodeId dst ) { return 0 ; }
389+ @ Override public long channel_penalty_msat (long short_channel_id , long send_amt_msat , Option_u64Z channel_capacity_msat , NodeId source , NodeId target ) { return 0 ; }
390+ @ Override public void payment_path_successful (RouteHop [] path ) {}
385391 @ Override public byte [] write () { assert false ; return null ; }
386392 })), logger , EventHandler .new_impl (new EventHandler .EventHandlerInterface () {
387393 @ Override public void handle_event (Event event ) {
@@ -430,8 +436,8 @@ public Result_RouteLightningErrorZ find_route(byte[] payer, RouteParameters para
430436 assert false ;
431437 } catch (ChannelManagerConstructor .InvalidSerializedDataException e ) {}
432438 }
433- LockableScore scorer = null ;
434- if (use_invoice_payer ) { scorer = LockableScore .of (Scorer .with_default ().as_Score ()); }
439+ MultiThreadedLockableScore scorer = null ;
440+ if (use_invoice_payer ) { scorer = MultiThreadedLockableScore .of (Scorer .with_default ().as_Score ()); }
435441 constructor .chain_sync_completed (new ChannelManagerConstructor .EventHandler () {
436442 @ Override public void handle_event (Event event ) {
437443 synchronized (pending_manager_events ) {
@@ -484,12 +490,13 @@ public Result_RouteLightningErrorZ find_route(byte[] payer, RouteParameters para
484490 if (use_invoice_payer ) {
485491 this .payer = InvoicePayer .of (this .chan_manager .as_Payer (), Router .new_impl (new Router .RouterInterface () {
486492 @ Override
487- public Result_RouteLightningErrorZ find_route (byte [] payer , RouteParameters params , ChannelDetails [] first_hops , Score scorer ) {
493+ public Result_RouteLightningErrorZ find_route (byte [] payer , RouteParameters params , byte [] _payment_hash , ChannelDetails [] first_hops , Score scorer ) {
488494 return UtilMethods .find_route (payer , params , router , first_hops , logger , scorer );
489495 }
490- }), LockableScore .of (Score .new_impl (new Score .ScoreInterface () {
496+ }), MultiThreadedLockableScore .of (Score .new_impl (new Score .ScoreInterface () {
497+ @ Override public long channel_penalty_msat (long short_channel_id , long send_amt_msat , Option_u64Z channel_capacity_msat , NodeId source , NodeId target ) { return 0 ; }
491498 @ Override public void payment_path_failed (RouteHop [] path , long scid ) {}
492- @ Override public long channel_penalty_msat ( long scid , NodeId src , NodeId dst ) { return 0 ; }
499+ @ Override public void payment_path_successful ( RouteHop [] path ) {}
493500 @ Override public byte [] write () { assert false ; return null ; }
494501 })), logger , EventHandler .new_impl (new EventHandler .EventHandlerInterface () {
495502 @ Override public void handle_event (Event event ) {
@@ -593,9 +600,11 @@ Event[] get_manager_events(int expected_len, Peer peer1, Peer peer2) {
593600 if (use_chan_manager_constructor ) {
594601 while (res .length < expected_len ) {
595602 synchronized (this .pending_manager_events ) {
596- res = this .pending_manager_events .toArray (res );
597- assert res .length == expected_len || res .length == 0 ; // We don't handle partial results
598- this .pending_manager_events .clear ();
603+ if (this .pending_manager_events .size () >= expected_len ) {
604+ res = this .pending_manager_events .toArray (res );
605+ assert res .length == expected_len ;
606+ this .pending_manager_events .clear ();
607+ }
599608 if (res .length < expected_len ) {
600609 try { this .pending_manager_events .wait (); } catch (InterruptedException e ) { assert false ; }
601610 }
@@ -610,7 +619,6 @@ Event[] get_manager_events(int expected_len, Peer peer1, Peer peer2) {
610619 peer2 .nio_peer_handler .check_events ();
611620 }
612621 chan_manager .as_EventsProvider ().process_pending_events (EventHandler .new_impl (l ::add ));
613- assert l .size () == expected_len || l .size () == 0 ; // We don't handle partial results
614622 }
615623 return l .toArray (new Event [0 ]);
616624 }
@@ -900,9 +908,11 @@ void do_test_message_handler_b(TestState state) throws InterruptedException {
900908 assert !Arrays .equals (payment_preimage , new byte [32 ]);
901909 state .peer2 .chan_manager .claim_funds (payment_preimage );
902910
903- events = state .peer1 .get_manager_events (1 , state .peer1 , state .peer2 );
911+ events = state .peer1 .get_manager_events (2 , state .peer1 , state .peer2 );
904912 assert events [0 ] instanceof Event .PaymentSent ;
905913 assert Arrays .equals (((Event .PaymentSent ) events [0 ]).payment_preimage , payment_preimage );
914+ assert events [1 ] instanceof Event .PaymentPathSuccessful ;
915+ assert Arrays .equals (((Event .PaymentPathSuccessful ) events [1 ]).payment_hash , ((Event .PaymentSent ) events [0 ]).payment_hash );
906916
907917 if (use_nio_peer_handler ) {
908918 // We receive PaymentSent immediately upon receipt of the payment preimage, but we expect to not have an
0 commit comments