@@ -176,20 +176,29 @@ LDKCResult_NoneChannelMonitorUpdateErrZ update_channel_monitor(const void *this_
176
176
mons_updated += 1 ;
177
177
return CResult_NoneChannelMonitorUpdateErrZ_ok ();
178
178
}
179
- LDKCVec_MonitorEventZ monitors_pending_monitor_events (const void *this_arg) {
179
+ LDKCVec_C2Tuple_OutPointCVec_MonitorEventZZZ monitors_pending_monitor_events (const void *this_arg) {
180
180
NodeMonitors* arg = (NodeMonitors*) this_arg;
181
181
std::unique_lock<std::mutex> l (arg->mut );
182
182
183
183
if (arg->mons .size () == 0 ) {
184
- return LDKCVec_MonitorEventZ {
184
+ return LDKCVec_C2Tuple_OutPointCVec_MonitorEventZZZ {
185
185
.data = NULL ,
186
186
.datalen = 0 ,
187
187
};
188
188
} else {
189
189
// We only ever actually have one channel per node, plus concatenating two
190
190
// Rust Vecs to each other from C++ will require a bit of effort.
191
191
assert (arg->mons .size () == 1 );
192
- return ChannelMonitor_get_and_clear_pending_monitor_events (&arg->mons [0 ].second );
192
+ LDK::CVec_MonitorEventZ events = ChannelMonitor_get_and_clear_pending_monitor_events (&arg->mons [0 ].second );
193
+ LDK::C2Tuple_OutPointScriptZ funding_info = ChannelMonitor_get_funding_txo (&arg->mons [0 ].second );
194
+ LDK::OutPoint outpoint = std::move (funding_info->a );
195
+ LDK::C2Tuple_OutPointCVec_MonitorEventZZ pair = C2Tuple_OutPointCVec_MonitorEventZZ_new (std::move (outpoint), std::move (events));
196
+ auto vec = LDKCVec_C2Tuple_OutPointCVec_MonitorEventZZZ {
197
+ .data = (LDKC2Tuple_OutPointCVec_MonitorEventZZ*)malloc (sizeof (LDKC2Tuple_OutPointCVec_MonitorEventZZ)),
198
+ .datalen = 1 ,
199
+ };
200
+ vec.data [0 ] = std::move (pair);
201
+ return vec;
193
202
}
194
203
}
195
204
@@ -421,7 +430,8 @@ LDKCVec_C2Tuple_PublicKeyTypeZZ create_custom_msg(const void* this_arg) {
421
430
return ret;
422
431
}
423
432
424
- uint64_t get_chan_score (const void *this_arg, uint64_t scid, uint64_t htlc_amt, uint64_t chan_capacity, const LDKNodeId *src, const LDKNodeId *dst) {
433
+ uint64_t get_chan_score (const void *this_arg, uint64_t scid, const LDKNodeId *src, const LDKNodeId *dst, LDKChannelUsage usage_in) {
434
+ LDK::ChannelUsage usage (std::move (usage_in));
425
435
return 42 ;
426
436
}
427
437
@@ -434,7 +444,8 @@ struct LDKCResult_RouteLightningErrorZ custom_find_route(const void *this_arg, s
434
444
const struct CustomRouteFinderParams *params = (struct CustomRouteFinderParams *)this_arg;
435
445
assert (first_hops->datalen == 1 );
436
446
assert (ChannelDetails_get_is_usable (&first_hops->data [0 ]));
437
- return find_route (payer, route_params, params->graph_ref , first_hops, *params->logger , scorer, ¶ms->random_seed_bytes .data );
447
+ LDK::ReadOnlyNetworkGraph graph_lock = NetworkGraph_read_only (params->graph_ref );
448
+ return find_route (payer, route_params, &graph_lock, first_hops, *params->logger , scorer, ¶ms->random_seed_bytes .data );
438
449
}
439
450
440
451
int main () {
@@ -478,8 +489,8 @@ int main() {
478
489
.free = NULL ,
479
490
};
480
491
481
- LDK::NetworkGraph net_graph1 = NetworkGraph_new (genesis_hash);
482
- LDK::NetGraphMsgHandler graph_msg_handler1 = NetGraphMsgHandler_new (&net_graph1, COption_AccessZ_none (), logger1);
492
+ LDK::NetworkGraph net_graph1 = NetworkGraph_new (genesis_hash, logger1 );
493
+ LDK::P2PGossipSync graph_msg_handler1 = P2PGossipSync_new (&net_graph1, COption_AccessZ_none (), logger1);
483
494
LDKSecretKey node_secret1;
484
495
485
496
LDKLogger logger2 {
@@ -498,8 +509,8 @@ int main() {
498
509
.free = NULL ,
499
510
};
500
511
501
- LDK::NetworkGraph net_graph2 = NetworkGraph_new (genesis_hash);
502
- LDK::NetGraphMsgHandler graph_msg_handler2 = NetGraphMsgHandler_new (&net_graph2, COption_AccessZ_none (), logger2);
512
+ LDK::NetworkGraph net_graph2 = NetworkGraph_new (genesis_hash, logger2 );
513
+ LDK::P2PGossipSync graph_msg_handler2 = P2PGossipSync_new (&net_graph2, COption_AccessZ_none (), logger2);
503
514
LDKSecretKey node_secret2;
504
515
505
516
LDK::CVec_u8Z cm1_ser = LDKCVec_u8Z {}; // ChannelManager 1 serialization at the end of the ser-des scope
@@ -520,7 +531,7 @@ int main() {
520
531
LDK::CVec_ChannelDetailsZ channels = ChannelManager_list_channels (&cm1);
521
532
assert (channels->datalen == 0 );
522
533
523
- LDK::MessageHandler msg_handler1 = MessageHandler_new (ChannelManager_as_ChannelMessageHandler (&cm1), NetGraphMsgHandler_as_RoutingMessageHandler (&graph_msg_handler1));
534
+ LDK::MessageHandler msg_handler1 = MessageHandler_new (ChannelManager_as_ChannelMessageHandler (&cm1), P2PGossipSync_as_RoutingMessageHandler (&graph_msg_handler1));
524
535
525
536
LDK::IgnoringMessageHandler ignoring_handler1 = IgnoringMessageHandler_new ();
526
537
LDK::CustomMessageHandler custom_msg_handler1 = IgnoringMessageHandler_as_CustomMessageHandler (&ignoring_handler1);
@@ -552,7 +563,7 @@ int main() {
552
563
LDK::CVec_ChannelDetailsZ channels2 = ChannelManager_list_channels (&cm2);
553
564
assert (channels2->datalen == 0 );
554
565
555
- LDK::RoutingMessageHandler net_msgs2 = NetGraphMsgHandler_as_RoutingMessageHandler (&graph_msg_handler2);
566
+ LDK::RoutingMessageHandler net_msgs2 = P2PGossipSync_as_RoutingMessageHandler (&graph_msg_handler2);
556
567
LDK::CResult_ChannelAnnouncementDecodeErrorZ chan_ann = ChannelAnnouncement_read (LDKu8slice { .data = valid_node_announcement, .datalen = sizeof (valid_node_announcement) });
557
568
assert (chan_ann->result_ok );
558
569
LDK::CResult_boolLightningErrorZ ann_res = net_msgs2->handle_channel_announcement (net_msgs2->this_arg , chan_ann->contents .result );
@@ -605,7 +616,7 @@ int main() {
605
616
assert (!memcmp (queue.events [0 ]->funding_generation_ready .output_script .data , channel_open_block + 58 + 81 , 34 ));
606
617
LDKTransaction funding_transaction { .data = const_cast <uint8_t *>(channel_open_block + 81 ), .datalen = sizeof (channel_open_block) - 81 , .data_is_owned = false };
607
618
608
- LDK::CResult_NoneAPIErrorZ fund_res = ChannelManager_funding_transaction_generated (&cm1, &queue.events [0 ]->funding_generation_ready .temporary_channel_id .data , funding_transaction);
619
+ LDK::CResult_NoneAPIErrorZ fund_res = ChannelManager_funding_transaction_generated (&cm1, &queue.events [0 ]->funding_generation_ready .temporary_channel_id .data , queue. events [ 0 ]-> funding_generation_ready . counterparty_node_id , funding_transaction);
609
620
assert (fund_res->result_ok );
610
621
break ;
611
622
}
@@ -688,7 +699,7 @@ int main() {
688
699
.chars = (const uint8_t *)" Invoice Description" ,
689
700
.len = strlen (" Invoice Description" ),
690
701
.chars_is_owned = false
691
- });
702
+ }, 3600 );
692
703
assert (invoice->result_ok );
693
704
LDKThirtyTwoBytes payment_hash;
694
705
memcpy (payment_hash.data , Invoice_payment_hash (invoice->contents .result ), 32 );
@@ -704,7 +715,10 @@ int main() {
704
715
}, Invoice_route_hints (invoice->contents .result ), COption_u64Z_none (), 0xffffffff ),
705
716
5000 , Invoice_min_final_cltv_expiry (invoice->contents .result ));
706
717
random_bytes = keys_source1->get_secure_random_bytes (keys_source1->this_arg );
707
- LDK::CResult_RouteLightningErrorZ route = find_route (ChannelManager_get_our_node_id (&cm1), &route_params, &net_graph2, &outbound_channels, logger1, &chan_scorer, &random_bytes.data );
718
+ LDK::ReadOnlyNetworkGraph graph_lock = NetworkGraph_read_only (&net_graph2);
719
+
720
+ LDK::CResult_RouteLightningErrorZ route = find_route (ChannelManager_get_our_node_id (&cm1), &route_params, &graph_lock, &outbound_channels, logger1, &chan_scorer, &random_bytes.data );
721
+
708
722
assert (route->result_ok );
709
723
LDK::CVec_CVec_RouteHopZZ paths = Route_get_paths (route->contents .result );
710
724
assert (paths->datalen == 1 );
@@ -751,9 +765,16 @@ int main() {
751
765
assert (queue.events [0 ]->payment_received .purpose .tag == LDKPaymentPurpose_InvoicePayment);
752
766
assert (!memcmp (queue.events [0 ]->payment_received .purpose .invoice_payment .payment_secret .data ,
753
767
Invoice_payment_secret (invoice->contents .result ), 32 ));
754
- assert (queue.events [0 ]->payment_received .amt == 5000 );
768
+ assert (queue.events [0 ]->payment_received .amount_msat == 5000 );
755
769
memcpy (payment_preimage.data , queue.events [0 ]->payment_received .purpose .invoice_payment .payment_preimage .data , 32 );
756
- assert (ChannelManager_claim_funds (&cm2, payment_preimage));
770
+ ChannelManager_claim_funds (&cm2, payment_preimage);
771
+
772
+ queue.events .clear ();
773
+ ev2.process_pending_events (handler);
774
+ assert (queue.events .size () == 1 );
775
+ assert (queue.events [0 ]->tag == LDKEvent_PaymentClaimed);
776
+ assert (!memcmp (queue.events [0 ]->payment_claimed .payment_hash .data , payment_hash.data , 32 ));
777
+ assert (queue.events [0 ]->payment_claimed .purpose .tag == LDKPaymentPurpose_InvoicePayment);
757
778
}
758
779
PeerManager_process_events (&net2);
759
780
// Wait until we've passed through a full set of monitor updates (ie new preimage + CS/RAA messages)
@@ -809,11 +830,11 @@ int main() {
809
830
// Attempt to close the channel...
810
831
uint8_t chan_id[32 ];
811
832
for (int i = 0 ; i < 32 ; i++) { chan_id[i] = channel_open_txid[31 -i]; }
812
- LDK::CResult_NoneAPIErrorZ close_res = ChannelManager_close_channel (&cm1, &chan_id);
833
+ LDK::CResult_NoneAPIErrorZ close_res = ChannelManager_close_channel (&cm1, &chan_id, ChannelManager_get_our_node_id (&cm2) );
813
834
assert (!close_res->result_ok ); // Note that we can't close while disconnected!
814
835
815
836
// Open a connection!
816
- LDK::MessageHandler msg_handler1 = MessageHandler_new (ChannelManager_as_ChannelMessageHandler (&cm1), NetGraphMsgHandler_as_RoutingMessageHandler (&graph_msg_handler1));
837
+ LDK::MessageHandler msg_handler1 = MessageHandler_new (ChannelManager_as_ChannelMessageHandler (&cm1), P2PGossipSync_as_RoutingMessageHandler (&graph_msg_handler1));
817
838
random_bytes = keys_source1->get_secure_random_bytes (keys_source1->this_arg );
818
839
819
840
LDKPublicKey chan_2_node_id = ChannelManager_get_our_node_id (&cm2);
@@ -830,7 +851,7 @@ int main() {
830
851
};
831
852
LDK::PeerManager net1 = PeerManager_new (std::move (msg_handler1), node_secret1, &random_bytes.data , logger1, std::move (custom_msg_handler1));
832
853
833
- LDK::MessageHandler msg_handler2 = MessageHandler_new (ChannelManager_as_ChannelMessageHandler (&cm2), NetGraphMsgHandler_as_RoutingMessageHandler (&graph_msg_handler2));
854
+ LDK::MessageHandler msg_handler2 = MessageHandler_new (ChannelManager_as_ChannelMessageHandler (&cm2), P2PGossipSync_as_RoutingMessageHandler (&graph_msg_handler2));
834
855
CustomMsgQueue peer_2_custom_messages;
835
856
LDKCustomMessageHandler custom_msg_handler2 = {
836
857
.this_arg = &peer_2_custom_messages,
@@ -867,11 +888,11 @@ int main() {
867
888
.find_route = custom_find_route,
868
889
.free = NULL ,
869
890
};
870
- LDK::ProbabilisticScorer scorer = ProbabilisticScorer_new (ProbabilisticScoringParameters_default (), &net_graph1);
891
+ LDK::ProbabilisticScorer scorer = ProbabilisticScorer_new (ProbabilisticScoringParameters_default (), &net_graph1, logger1 );
871
892
LDK::MultiThreadedLockableScore scorer_mtx = MultiThreadedLockableScore_new (ProbabilisticScorer_as_Score (&scorer));
872
893
EventQueue queue1;
873
894
LDKEventHandler handler1 = { .this_arg = &queue1, .handle_event = handle_event, .free = NULL };
874
- LDK::InvoicePayer payer = InvoicePayer_new (ChannelManager_as_Payer (&cm1), sending_router, &scorer_mtx, logger1, handler1, RetryAttempts_new (0 ));
895
+ LDK::InvoicePayer payer = InvoicePayer_new (ChannelManager_as_Payer (&cm1), sending_router, &scorer_mtx, logger1, handler1, Retry_attempts (0 ));
875
896
876
897
LDK::CResult_InvoiceSignOrCreationErrorZ invoice_res2 = create_invoice_from_channelmanager (&cm2,
877
898
KeysManager_as_KeysInterface (&keys2),
@@ -880,7 +901,7 @@ int main() {
880
901
.chars = (const uint8_t *)" Invoice 2 Description" ,
881
902
.len = strlen (" Invoice 2 Description" ),
882
903
.chars_is_owned = false
883
- });
904
+ }, 3600 );
884
905
assert (invoice_res2->result_ok );
885
906
const LDKInvoice *invoice2 = invoice_res2->contents .result ;
886
907
LDK::CResult_PaymentIdPaymentErrorZ invoice_pay_res = InvoicePayer_pay_invoice (&payer, invoice2);
@@ -914,8 +935,16 @@ int main() {
914
935
assert (event_data->purpose .tag == LDKPaymentPurpose_InvoicePayment);
915
936
assert (!memcmp (event_data->purpose .invoice_payment .payment_secret .data ,
916
937
Invoice_payment_secret (invoice2), 32 ));
917
- assert (event_data->amt == 10000 );
918
- assert (ChannelManager_claim_funds (&cm2, event_data->purpose .invoice_payment .payment_preimage ));
938
+ assert (event_data->amount_msat == 10000 );
939
+ ChannelManager_claim_funds (&cm2, event_data->purpose .invoice_payment .payment_preimage );
940
+
941
+ queue2.events .clear ();
942
+ ev2.process_pending_events (handler2);
943
+ assert (queue2.events .size () == 1 );
944
+ assert (queue2.events [0 ]->tag == LDKEvent_PaymentClaimed);
945
+ assert (!memcmp (queue2.events [0 ]->payment_claimed .payment_hash .data , Invoice_payment_hash (invoice2), 32 ));
946
+ assert (queue2.events [0 ]->payment_claimed .purpose .tag == LDKPaymentPurpose_InvoicePayment);
947
+
919
948
break ;
920
949
}
921
950
std::this_thread::yield ();
@@ -935,7 +964,7 @@ int main() {
935
964
936
965
// Actually close the channel
937
966
num_txs_broadcasted = 0 ;
938
- close_res = ChannelManager_close_channel (&cm1, &chan_id);
967
+ close_res = ChannelManager_close_channel (&cm1, &chan_id, ChannelManager_get_our_node_id (&cm2) );
939
968
assert (close_res->result_ok );
940
969
PeerManager_process_events (&net1);
941
970
while (num_txs_broadcasted != 2 ) {
0 commit comments