pub struct DefaultMessageRouter<G: Deref<Target = NetworkGraph<L>>, L: Deref, ES: Deref>{ /* private fields */ }Expand description
A MessageRouter that can only route to a directly connected Destination.
DefaultMessageRouter constructs compact BlindedMessagePaths on a best-effort basis.
That is, if appropriate SCID information is available for the intermediate peers, it will
default to creating compact paths.
§Compact Blinded Paths
Compact blinded paths use short channel IDs (SCIDs) instead of pubkeys, resulting in smaller
serialization. This is particularly useful when encoding data into space-constrained formats
such as QR codes. The SCID is communicated via a MessageForwardNode, but may be None
to allow for graceful degradation.
Note: If any SCID in the blinded path becomes invalid, the entire compact blinded path may fail to route. For the immediate hop, this can happen if the corresponding channel is closed. For other intermediate hops, it can happen if the channel is closed or modified (e.g., due to splicing).
§Privacy
Creating BlindedMessagePaths may affect privacy since, if a suitable path cannot be found,
it will create a one-hop path using the recipient as the introduction node if it is an announced
node. Otherwise, there is no way to find a path to the introduction node in order to send a
message, and thus an Err is returned.
Implementations§
Source§impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, ES: Deref> DefaultMessageRouter<G, L, ES>
impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, ES: Deref> DefaultMessageRouter<G, L, ES>
Sourcepub fn new(network_graph: G, entropy_source: ES) -> Self
pub fn new(network_graph: G, entropy_source: ES) -> Self
Creates a DefaultMessageRouter using the given NetworkGraph.
Trait Implementations§
Source§impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, ES: Deref> MessageRouter for DefaultMessageRouter<G, L, ES>
impl<G: Deref<Target = NetworkGraph<L>>, L: Deref, ES: Deref> MessageRouter for DefaultMessageRouter<G, L, ES>
Source§fn find_path(
&self,
sender: PublicKey,
peers: Vec<PublicKey>,
destination: Destination,
) -> Result<OnionMessagePath, ()>
fn find_path( &self, sender: PublicKey, peers: Vec<PublicKey>, destination: Destination, ) -> Result<OnionMessagePath, ()>
OnionMessage to the given Destination.Source§fn create_blinded_paths<T: Signing + Verification>(
&self,
recipient: PublicKey,
local_node_receive_key: ReceiveAuthKey,
context: MessageContext,
peers: Vec<MessageForwardNode>,
secp_ctx: &Secp256k1<T>,
) -> Result<Vec<BlindedMessagePath>, ()>
fn create_blinded_paths<T: Signing + Verification>( &self, recipient: PublicKey, local_node_receive_key: ReceiveAuthKey, context: MessageContext, peers: Vec<MessageForwardNode>, secp_ctx: &Secp256k1<T>, ) -> Result<Vec<BlindedMessagePath>, ()>
BlindedMessagePaths to the recipient node. The nodes in peers are assumed to
be direct peers with the recipient.