Skip to content

Commit 0c4fd5d

Browse files
committed
Update C++ bindings demo to latest upstream API
1 parent 0cd1d74 commit 0c4fd5d

File tree

1 file changed

+41
-25
lines changed

1 file changed

+41
-25
lines changed

lightning-c-bindings/demo.cpp

Lines changed: 41 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -436,16 +436,23 @@ uint64_t get_chan_score(const void *this_arg, uint64_t scid, const LDKNodeId *sr
436436
return 42;
437437
}
438438

439-
struct CustomRouteFinderParams {
440-
LDKLogger *logger;
441-
LDKNetworkGraph *graph_ref;
442-
LDKThirtyTwoBytes random_seed_bytes;
443-
};
444-
struct LDKCResult_RouteLightningErrorZ custom_find_route(const void *this_arg, struct LDKPublicKey payer, const struct LDKRouteParameters *NONNULL_PTR route_params, const uint8_t (*payment_hash)[32], struct LDKCVec_ChannelDetailsZ *first_hops, const struct LDKScore *NONNULL_PTR scorer) {
445-
const struct CustomRouteFinderParams *params = (struct CustomRouteFinderParams *)this_arg;
439+
struct LDKCResult_RouteLightningErrorZ custom_find_route(const void *this_arg, struct LDKPublicKey payer, const struct LDKRouteParameters *NONNULL_PTR route_params, const uint8_t (*payment_hash)[32], struct LDKCVec_ChannelDetailsZ *first_hops, const struct LDKInFlightHtlcs in_flights) {
440+
const LDK::DefaultRouter *router = (LDK::DefaultRouter *)this_arg;
446441
assert(first_hops->datalen == 1);
447442
assert(ChannelDetails_get_is_usable(&first_hops->data[0]));
448-
return find_route(payer, route_params, params->graph_ref, first_hops, *params->logger, scorer, &params->random_seed_bytes.data);
443+
const LDK::Router router_impl = DefaultRouter_as_Router(&*router);
444+
return router_impl->find_route(router_impl->this_arg, payer, route_params, payment_hash, first_hops, in_flights);
445+
}
446+
447+
void custom_notify_payment_path_failed(const void *this_arg, struct LDKCVec_RouteHopZ path, uint64_t short_channel_id) {
448+
const LDK::DefaultRouter *router = (LDK::DefaultRouter *)this_arg;
449+
const LDK::Router router_impl = DefaultRouter_as_Router(&*router);
450+
return router_impl->notify_payment_path_failed(router_impl->this_arg, path, short_channel_id);
451+
}
452+
void custom_notify_payment_path_successful(const void *this_arg, struct LDKCVec_RouteHopZ path) {
453+
const LDK::DefaultRouter *router = (LDK::DefaultRouter *)this_arg;
454+
const LDK::Router router_impl = DefaultRouter_as_Router(&*router);
455+
return router_impl->notify_payment_path_successful(router_impl->this_arg, path);
449456
}
450457

451458
int main() {
@@ -527,17 +534,18 @@ int main() {
527534
node_secret1 = *node_secret1_res->contents.result;
528535

529536
LDK::ChannelManager cm1 = ChannelManager_new(fee_est, mon1, broadcast, logger1, KeysManager_as_KeysInterface(&keys1), UserConfig_default(), ChainParameters_new(network, BestBlock_new(chain_tip, 0)));
537+
LDK::OnionMessenger om1 = OnionMessenger_new(KeysManager_as_KeysInterface(&keys1), logger1);
530538

531539
LDK::CVec_ChannelDetailsZ channels = ChannelManager_list_channels(&cm1);
532540
assert(channels->datalen == 0);
533541

534-
LDK::MessageHandler msg_handler1 = MessageHandler_new(ChannelManager_as_ChannelMessageHandler(&cm1), P2PGossipSync_as_RoutingMessageHandler(&graph_msg_handler1));
542+
LDK::MessageHandler msg_handler1 = MessageHandler_new(ChannelManager_as_ChannelMessageHandler(&cm1), P2PGossipSync_as_RoutingMessageHandler(&graph_msg_handler1), OnionMessenger_as_OnionMessageHandler(&om1));
535543

536544
LDK::IgnoringMessageHandler ignoring_handler1 = IgnoringMessageHandler_new();
537545
LDK::CustomMessageHandler custom_msg_handler1 = IgnoringMessageHandler_as_CustomMessageHandler(&ignoring_handler1);
538546

539547
random_bytes = keys_source1->get_secure_random_bytes(keys_source1->this_arg);
540-
LDK::PeerManager net1 = PeerManager_new(std::move(msg_handler1), node_secret1, &random_bytes.data, logger1, std::move(custom_msg_handler1));
548+
LDK::PeerManager net1 = PeerManager_new(std::move(msg_handler1), node_secret1, 0xdeadbeef, &random_bytes.data, logger1, std::move(custom_msg_handler1));
541549

542550
// Demo getting a channel key and check that its returning real pubkeys:
543551
LDK::Sign chan_signer1 = keys_source1->get_channel_signer(keys_source1->this_arg, false, 42);
@@ -559,6 +567,7 @@ int main() {
559567
UserConfig_set_channel_handshake_config(&config2, std::move(handshake_config2));
560568

561569
LDK::ChannelManager cm2 = ChannelManager_new(fee_est, mon2, broadcast, logger2, KeysManager_as_KeysInterface(&keys2), std::move(config2), ChainParameters_new(network, BestBlock_new(chain_tip, 0)));
570+
LDK::OnionMessenger om2 = OnionMessenger_new(KeysManager_as_KeysInterface(&keys2), logger2);
562571

563572
LDK::CVec_ChannelDetailsZ channels2 = ChannelManager_list_channels(&cm2);
564573
assert(channels2->datalen == 0);
@@ -569,13 +578,13 @@ int main() {
569578
LDK::CResult_boolLightningErrorZ ann_res = net_msgs2->handle_channel_announcement(net_msgs2->this_arg, chan_ann->contents.result);
570579
assert(ann_res->result_ok);
571580

572-
LDK::MessageHandler msg_handler2 = MessageHandler_new(ChannelManager_as_ChannelMessageHandler(&cm2), std::move(net_msgs2));
581+
LDK::MessageHandler msg_handler2 = MessageHandler_new(ChannelManager_as_ChannelMessageHandler(&cm2), std::move(net_msgs2), OnionMessenger_as_OnionMessageHandler(&om1));
573582

574583
LDK::IgnoringMessageHandler ignoring_handler2 = IgnoringMessageHandler_new();
575584
LDK::CustomMessageHandler custom_msg_handler2 = IgnoringMessageHandler_as_CustomMessageHandler(&ignoring_handler2);
576585

577586
random_bytes = keys_source2->get_secure_random_bytes(keys_source2->this_arg);
578-
LDK::PeerManager net2 = PeerManager_new(std::move(msg_handler2), node_secret2, &random_bytes.data, logger2, std::move(custom_msg_handler2));
587+
LDK::PeerManager net2 = PeerManager_new(std::move(msg_handler2), node_secret2, 0xdeadbeef, &random_bytes.data, logger2, std::move(custom_msg_handler2));
579588

580589
// Open a connection!
581590
PeersConnection conn(cm1, cm2, net1, net2);
@@ -814,6 +823,8 @@ int main() {
814823
assert(cm1_read->result_ok);
815824
LDK::ChannelManager cm1(std::move(cm1_read->contents.result->b));
816825

826+
LDK::OnionMessenger om1 = OnionMessenger_new(KeysManager_as_KeysInterface(&keys1), logger1);
827+
817828
LDK::CVec_ChannelMonitorZ mons_list2 = LDKCVec_ChannelMonitorZ { .data = (LDKChannelMonitor*)malloc(sizeof(LDKChannelMonitor)), .datalen = 1 };
818829
assert(mons2.mons.size() == 1);
819830
mons_list2->data[0] = *& std::get<1>(mons2.mons[0]); // Note that we need a reference, thus need a raw clone here, which *& does.
@@ -827,14 +838,16 @@ int main() {
827838
assert(cm2_read->result_ok);
828839
LDK::ChannelManager cm2(std::move(cm2_read->contents.result->b));
829840

841+
LDK::OnionMessenger om2 = OnionMessenger_new(KeysManager_as_KeysInterface(&keys2), logger2);
842+
830843
// Attempt to close the channel...
831844
uint8_t chan_id[32];
832845
for (int i = 0; i < 32; i++) { chan_id[i] = channel_open_txid[31-i]; }
833846
LDK::CResult_NoneAPIErrorZ close_res = ChannelManager_close_channel(&cm1, &chan_id, ChannelManager_get_our_node_id(&cm2));
834847
assert(!close_res->result_ok); // Note that we can't close while disconnected!
835848

836849
// Open a connection!
837-
LDK::MessageHandler msg_handler1 = MessageHandler_new(ChannelManager_as_ChannelMessageHandler(&cm1), P2PGossipSync_as_RoutingMessageHandler(&graph_msg_handler1));
850+
LDK::MessageHandler msg_handler1 = MessageHandler_new(ChannelManager_as_ChannelMessageHandler(&cm1), P2PGossipSync_as_RoutingMessageHandler(&graph_msg_handler1), OnionMessenger_as_OnionMessageHandler(&om1));
838851
random_bytes = keys_source1->get_secure_random_bytes(keys_source1->this_arg);
839852

840853
LDKPublicKey chan_2_node_id = ChannelManager_get_our_node_id(&cm2);
@@ -849,9 +862,9 @@ int main() {
849862
},
850863
.free = NULL,
851864
};
852-
LDK::PeerManager net1 = PeerManager_new(std::move(msg_handler1), node_secret1, &random_bytes.data, logger1, std::move(custom_msg_handler1));
865+
LDK::PeerManager net1 = PeerManager_new(std::move(msg_handler1), node_secret1, 0xdeadbeef, &random_bytes.data, logger1, std::move(custom_msg_handler1));
853866

854-
LDK::MessageHandler msg_handler2 = MessageHandler_new(ChannelManager_as_ChannelMessageHandler(&cm2), P2PGossipSync_as_RoutingMessageHandler(&graph_msg_handler2));
867+
LDK::MessageHandler msg_handler2 = MessageHandler_new(ChannelManager_as_ChannelMessageHandler(&cm2), P2PGossipSync_as_RoutingMessageHandler(&graph_msg_handler2), OnionMessenger_as_OnionMessageHandler(&om2));
855868
CustomMsgQueue peer_2_custom_messages;
856869
LDKCustomMessageHandler custom_msg_handler2 = {
857870
.this_arg = &peer_2_custom_messages,
@@ -865,7 +878,7 @@ int main() {
865878
.free = NULL,
866879
};
867880
random_bytes = keys_source1->get_secure_random_bytes(keys_source1->this_arg);
868-
LDK::PeerManager net2 = PeerManager_new(std::move(msg_handler2), node_secret2, &random_bytes.data, logger2, std::move(custom_msg_handler2));
881+
LDK::PeerManager net2 = PeerManager_new(std::move(msg_handler2), node_secret2, 0xdeadbeef, &random_bytes.data, logger2, std::move(custom_msg_handler2));
869882

870883
PeersConnection conn(cm1, cm2, net1, net2);
871884

@@ -878,21 +891,24 @@ int main() {
878891
}
879892

880893
// Send another payment, this time via the InvoicePayer
881-
struct CustomRouteFinderParams router_params = {
882-
.logger = &logger1,
883-
.graph_ref = &net_graph1,
884-
.random_seed_bytes = keys_source1->get_secure_random_bytes(keys_source1->this_arg),
885-
};
894+
LDK::ProbabilisticScorer scorer = ProbabilisticScorer_new(ProbabilisticScoringParameters_default(), &net_graph1, logger1);
895+
LDK::Score scorer_trait = ProbabilisticScorer_as_Score(&scorer);
896+
LDK::MultiThreadedLockableScore scorer_mtx = MultiThreadedLockableScore_new(std::move(scorer_trait));
897+
LDK::LockableScore scorer_mtx_trait = MultiThreadedLockableScore_as_LockableScore(&scorer_mtx);
898+
const LDK::DefaultRouter router = DefaultRouter_new(&net_graph1, logger1, keys_source1->get_secure_random_bytes(keys_source1->this_arg), std::move(scorer_mtx_trait));
886899
LDKRouter sending_router = {
887-
.this_arg = &router_params,
900+
.this_arg = (void*)&router,
888901
.find_route = custom_find_route,
902+
.notify_payment_path_failed = custom_notify_payment_path_failed,
903+
.notify_payment_path_successful = custom_notify_payment_path_successful,
904+
// We don't probe, so we opt to crash if the probe functions are called.
905+
.notify_payment_probe_successful = NULL,
906+
.notify_payment_probe_failed = NULL,
889907
.free = NULL,
890908
};
891-
LDK::ProbabilisticScorer scorer = ProbabilisticScorer_new(ProbabilisticScoringParameters_default(), &net_graph1, logger1);
892-
LDK::MultiThreadedLockableScore scorer_mtx = MultiThreadedLockableScore_new(ProbabilisticScorer_as_Score(&scorer));
893909
EventQueue queue1;
894910
LDKEventHandler handler1 = { .this_arg = &queue1, .handle_event = handle_event, .free = NULL };
895-
LDK::InvoicePayer payer = InvoicePayer_new(ChannelManager_as_Payer(&cm1), sending_router, &scorer_mtx, logger1, handler1, Retry_attempts(0));
911+
LDK::InvoicePayer payer = InvoicePayer_new(ChannelManager_as_Payer(&cm1), sending_router, logger1, handler1, Retry_attempts(0));
896912

897913
LDK::CResult_InvoiceSignOrCreationErrorZ invoice_res2 = create_invoice_from_channelmanager(&cm2,
898914
KeysManager_as_KeysInterface(&keys2),

0 commit comments

Comments
 (0)