+//! The top-level routing/network map tracking logic lives here.
+//!
+//! You probably want to create a Router and use that as your RoutingMessageHandler and then
+//! interrogate it to get routes for your own payments.
+
use secp256k1::key::PublicKey;
use secp256k1::{Secp256k1,Message};
use secp256k1;
/// A hop in a route
#[derive(Clone)]
pub struct RouteHop {
+ /// The node_id of the node at this hop.
pub pubkey: PublicKey,
/// The channel that should be used from the previous hop to reach this node.
pub short_channel_id: u64,
/// A channel descriptor which provides a last-hop route to get_route
pub struct RouteHint {
+ /// The node_id of the non-target end of the route
pub src_node_id: PublicKey,
+ /// The short_channel_id of this channel
pub short_channel_id: u64,
+ /// The static msat-denominated fee which must be paid to use this channel
pub fee_base_msat: u32,
+ /// The dynamic proportional fee which must be paid to use this channel, denominated in
+ /// millionths of the value being forwarded to the next hop.
pub fee_proportional_millionths: u32,
+ /// The difference in CLTV values between this node and the next node.
pub cltv_expiry_delta: u16,
+ /// The minimum value, in msat, which must be relayed to the next hop.
pub htlc_minimum_msat: u64,
}
}
impl Router {
+ /// Creates a new router with the given node_id to be used as the source for get_route()
pub fn new(our_pubkey: PublicKey, chain_monitor: Arc<ChainWatchInterface>, logger: Arc<Logger>) -> Router {
let mut nodes = HashMap::new();
nodes.insert(our_pubkey.clone(), NodeInfo {
}
/// Gets a route from us to the given target node.
+ ///
/// Extra routing hops between known nodes and the target will be used if they are included in
/// last_hops.
+ ///
/// If some channels aren't announced, it may be useful to fill in a first_hops with the
/// results from a local ChannelManager::list_usable_channels() call. If it is filled in, our
/// (this Router's) view of our local channels will be ignored, and only those in first_hops
- /// will be used. Panics if first_hops contains channels without short_channel_ids
+ /// will be used.
+ ///
+ /// Panics if first_hops contains channels without short_channel_ids
/// (ChannelManager::list_usable_channels will never include such channels).
+ ///
/// The fees on channels from us to next-hops are ignored (as they are assumed to all be
/// equal), however the enabled/disabled bit on such channels as well as the htlc_minimum_msat
/// *is* checked as they may change based on the receiving node.