1 // This file is Copyright its original authors, visible in version control
4 // This file is licensed under the Apache License, Version 2.0 <LICENSE-APACHE
5 // or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
6 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
7 // You may not use this file except in accordance with one or both of these
10 //! LDK sends, receives, and forwards onion messages via the [`OnionMessenger`]. See its docs for
13 use bitcoin::secp256k1::{self, PublicKey, Secp256k1};
15 use chain::keysinterface::{InMemorySigner, KeysInterface, KeysManager, Sign};
17 use util::logger::Logger;
20 use sync::{Arc, Mutex};
23 /// A sender, receiver and forwarder of onion messages. In upcoming releases, this object will be
24 /// used to retrieve invoices and fulfill invoice requests from [offers].
26 /// [offers]: <https://github.com/lightning/bolts/pull/798>
27 pub struct OnionMessenger<Signer: Sign, K: Deref, L: Deref>
28 where K::Target: KeysInterface<Signer = Signer>,
33 pending_messages: Mutex<HashMap<PublicKey, Vec<msgs::OnionMessage>>>,
34 secp_ctx: Secp256k1<secp256k1::All>,
36 // invoice_handler: InvoiceHandler,
37 // custom_handler: CustomHandler, // handles custom onion messages
40 impl<Signer: Sign, K: Deref, L: Deref> OnionMessenger<Signer, K, L>
41 where K::Target: KeysInterface<Signer = Signer>,
44 /// Constructs a new `OnionMessenger` to send, forward, and delegate received onion messages to
45 /// their respective handlers.
46 pub fn new(keys_manager: K, logger: L) -> Self {
47 let mut secp_ctx = Secp256k1::new();
48 secp_ctx.seeded_randomize(&keys_manager.get_secure_random_bytes());
51 pending_messages: Mutex::new(HashMap::new()),
58 // TODO: parameterize the below Simple* types with OnionMessenger and handle the messages it
60 /// Useful for simplifying the parameters of [`SimpleArcChannelManager`] and
61 /// [`SimpleArcPeerManager`]. See their docs for more details.
63 ///[`SimpleArcChannelManager`]: crate::ln::channelmanager::SimpleArcChannelManager
64 ///[`SimpleArcPeerManager`]: crate::ln::peer_handler::SimpleArcPeerManager
65 pub type SimpleArcOnionMessenger<L> = OnionMessenger<InMemorySigner, Arc<KeysManager>, Arc<L>>;
66 /// Useful for simplifying the parameters of [`SimpleRefChannelManager`] and
67 /// [`SimpleRefPeerManager`]. See their docs for more details.
69 ///[`SimpleRefChannelManager`]: crate::ln::channelmanager::SimpleRefChannelManager
70 ///[`SimpleRefPeerManager`]: crate::ln::peer_handler::SimpleRefPeerManager
71 pub type SimpleRefOnionMessenger<'a, 'b, L> = OnionMessenger<InMemorySigner, &'a KeysManager, &'b L>;