Fix sender is the introduction node onion messages
authorJeffrey Czyz <jkczyz@gmail.com>
Tue, 19 Mar 2024 21:04:43 +0000 (16:04 -0500)
committerJeffrey Czyz <jkczyz@gmail.com>
Tue, 19 Mar 2024 22:40:25 +0000 (17:40 -0500)
DefaultMessageRouter will form an OnionMessagePath from a BlindedPath
where the sender is the introduction node but only if the sender is
announced. If the sender is unannounced, then DefaultMessageRouter will
fail. While DefaultMessageRouter will only create a blinded path with an
announced introduction node, it may receive one where the introduction
node is unannounced. Don't return an error in this case, as the
OnionMessenger can advance the blinded path by one hop.

This may occur when two nodes have an unannounced channel and one (the
offer creator) wants to use it for payments without an intermediary node
and without putting its node id in the offer.

lightning/src/onion_message/messenger.rs

index 37de550453283e4a383051ace821cabb44f95ff1..15dc12f6bea7f6f89fd101dfaeeafb7a36126c0d 100644 (file)
@@ -318,10 +318,10 @@ where
        ES::Target: EntropySource,
 {
        fn find_path(
-               &self, _sender: PublicKey, peers: Vec<PublicKey>, destination: Destination
+               &self, sender: PublicKey, peers: Vec<PublicKey>, destination: Destination
        ) -> Result<OnionMessagePath, ()> {
                let first_node = destination.first_node();
-               if peers.contains(&first_node) {
+               if peers.contains(&first_node) || sender == first_node {
                        Ok(OnionMessagePath {
                                intermediate_nodes: vec![], destination, first_node_addresses: None
                        })