projects
/
rust-lightning
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Some changes in comments and error messages.
[rust-lightning]
/
src
/
ln
/
router.rs
diff --git
a/src/ln/router.rs
b/src/ln/router.rs
index 6b20d541e270959d0089475b85437f1db4549c43..4c3bcb98074fd8301941739c9352ce6bef593e05 100644
(file)
--- a/
src/ln/router.rs
+++ b/
src/ln/router.rs
@@
-1,3
+1,8
@@
+//! 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;
use secp256k1::key::PublicKey;
use secp256k1::{Secp256k1,Message};
use secp256k1;
@@
-8,8
+13,9
@@
use bitcoin::blockdata::opcodes;
use chain::chaininterface::{ChainError, ChainWatchInterface};
use ln::channelmanager;
use chain::chaininterface::{ChainError, ChainWatchInterface};
use ln::channelmanager;
-use ln::msgs::{ErrorAction,HandleError,RoutingMessageHandler,
MsgEncodable,
NetAddress,GlobalFeatures};
+use ln::msgs::{ErrorAction,HandleError,RoutingMessageHandler,NetAddress,GlobalFeatures};
use ln::msgs;
use ln::msgs;
+use util::ser::Writeable;
use util::logger::Logger;
use std::cmp;
use util::logger::Logger;
use std::cmp;
@@
-21,6
+27,7
@@
use std;
/// A hop in a route
#[derive(Clone)]
pub struct RouteHop {
/// 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,
pub pubkey: PublicKey,
/// The channel that should be used from the previous hop to reach this node.
pub short_channel_id: u64,
@@
-159,11
+166,18
@@
impl NetworkMap {
/// A channel descriptor which provides a last-hop route to get_route
pub struct RouteHint {
/// 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,
pub src_node_id: PublicKey,
+ /// The short_channel_id of this channel
pub short_channel_id: u64,
pub short_channel_id: u64,
+ /// The static msat-denominated fee which must be paid to use this channel
pub fee_base_msat: u32,
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,
pub fee_proportional_millionths: u32,
+ /// The difference in CLTV values between this node and the next node.
pub cltv_expiry_delta: u16,
pub cltv_expiry_delta: u16,
+ /// The minimum value, in msat, which must be relayed to the next hop.
pub htlc_minimum_msat: u64,
}
pub htlc_minimum_msat: u64,
}
@@
-335,12
+349,19
@@
impl RoutingMessageHandler for Router {
&msgs::HTLCFailChannelUpdate::ChannelUpdateMessage { ref msg } => {
let _ = self.handle_channel_update(msg);
},
&msgs::HTLCFailChannelUpdate::ChannelUpdateMessage { ref msg } => {
let _ = self.handle_channel_update(msg);
},
- &msgs::HTLCFailChannelUpdate::ChannelClosed { ref short_channel_id } => {
+ &msgs::HTLCFailChannelUpdate::ChannelClosed { ref short_channel_id, is_permanent:_ } => {
+//XXX
let mut network = self.network_map.write().unwrap();
if let Some(chan) = network.channels.remove(short_channel_id) {
Self::remove_channel_in_nodes(&mut network.nodes, &chan, *short_channel_id);
}
},
let mut network = self.network_map.write().unwrap();
if let Some(chan) = network.channels.remove(short_channel_id) {
Self::remove_channel_in_nodes(&mut network.nodes, &chan, *short_channel_id);
}
},
+ &msgs::HTLCFailChannelUpdate::NodeFailure { ref node_id, is_permanent:_ } => {
+//XXX
+ //let mut network = self.network_map.write().unwrap();
+ //TODO: check _blamed_upstream_node
+ self.mark_node_bad(node_id, false);
+ },
}
}
}
}
@@
-443,6
+464,7
@@
struct DummyDirectionalChannelInfo {
}
impl Router {
}
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 {
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 {
@@
-509,13
+531,18
@@
impl Router {
}
/// Gets a route from us to the given target node.
}
/// 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.
/// 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
/// 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).
/// (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.
/// 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.