Skip to content

Commit e0820ae

Browse files
Rename APIError::RouteError to ::InvalidRoute
Soon we're going to need to return an error when ChannelManager is unable to find a route, so we'll need a way to distinguish between that and the user supplying an invalid route.
1 parent 7203c83 commit e0820ae

File tree

5 files changed

+14
-14
lines changed

5 files changed

+14
-14
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ fn check_api_err(api_err: APIError) {
253253
match api_err {
254254
APIError::APIMisuseError { .. } => panic!("We can't misuse the API"),
255255
APIError::FeeRateTooHigh { .. } => panic!("We can't send too much fee?"),
256-
APIError::RouteError { .. } => panic!("Our routes should work"),
256+
APIError::InvalidRoute { .. } => panic!("Our routes should work"),
257257
APIError::ChannelUnavailable { err } => {
258258
// Test the error against a list of errors we can hit, and reject
259259
// all others. If you hit this panic, the list of acceptable errors

lightning/src/ln/channelmanager.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2407,10 +2407,10 @@ impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
24072407
let session_priv = SecretKey::from_slice(&session_priv_bytes[..]).expect("RNG is busted");
24082408

24092409
let onion_keys = onion_utils::construct_onion_keys(&self.secp_ctx, &path, &session_priv)
2410-
.map_err(|_| APIError::RouteError{err: "Pubkey along hop was maliciously selected"})?;
2410+
.map_err(|_| APIError::InvalidRoute{err: "Pubkey along hop was maliciously selected"})?;
24112411
let (onion_payloads, htlc_msat, htlc_cltv) = onion_utils::build_onion_payloads(path, total_value, payment_secret, cur_height, keysend_preimage)?;
24122412
if onion_utils::route_size_insane(&onion_payloads) {
2413-
return Err(APIError::RouteError{err: "Route size too large considering onion data"});
2413+
return Err(APIError::InvalidRoute{err: "Route size too large considering onion data"});
24142414
}
24152415
let onion_packet = onion_utils::construct_onion_packet(onion_payloads, onion_keys, prng_seed, payment_hash);
24162416

@@ -2427,7 +2427,7 @@ impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
24272427
if let hash_map::Entry::Occupied(mut chan) = channel_state.by_id.entry(id) {
24282428
match {
24292429
if chan.get().get_counterparty_node_id() != path.first().unwrap().pubkey {
2430-
return Err(APIError::RouteError{err: "Node ID mismatch on first hop!"});
2430+
return Err(APIError::InvalidRoute{err: "Node ID mismatch on first hop!"});
24312431
}
24322432
if !chan.get().is_live() {
24332433
return Err(APIError::ChannelUnavailable{err: "Peer for first hop currently disconnected/pending monitor update!".to_owned()});
@@ -2502,7 +2502,7 @@ impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
25022502
/// fields for more info.
25032503
///
25042504
/// If a pending payment is currently in-flight with the same [`PaymentId`] provided, this
2505-
/// method will error with an [`APIError::RouteError`]. Note, however, that once a payment
2505+
/// method will error with an [`APIError::InvalidRoute`]. Note, however, that once a payment
25062506
/// is no longer pending (either via [`ChannelManager::abandon_payment`], or handling of an
25072507
/// [`Event::PaymentSent`]) LDK will not stop you from sending a second payment with the same
25082508
/// [`PaymentId`].
@@ -2521,7 +2521,7 @@ impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
25212521
/// PaymentSendFailure for more info.
25222522
///
25232523
/// In general, a path may raise:
2524-
/// * [`APIError::RouteError`] when an invalid route or forwarding parameter (cltv_delta, fee,
2524+
/// * [`APIError::InvalidRoute`] when an invalid route or forwarding parameter (cltv_delta, fee,
25252525
/// node public key) is specified.
25262526
/// * [`APIError::ChannelUnavailable`] if the next-hop channel is not available for updates
25272527
/// (including due to previous monitor update failure or new permanent monitor update
@@ -2586,7 +2586,7 @@ impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
25862586

25872587
fn send_payment_internal(&self, route: &Route, payment_hash: PaymentHash, payment_secret: &Option<PaymentSecret>, keysend_preimage: Option<PaymentPreimage>, payment_id: PaymentId, recv_value_msat: Option<u64>, onion_session_privs: Vec<[u8; 32]>) -> Result<(), PaymentSendFailure> {
25882588
if route.paths.len() < 1 {
2589-
return Err(PaymentSendFailure::ParameterError(APIError::RouteError{err: "There must be at least one path to send over"}));
2589+
return Err(PaymentSendFailure::ParameterError(APIError::InvalidRoute{err: "There must be at least one path to send over"}));
25902590
}
25912591
if payment_secret.is_none() && route.paths.len() > 1 {
25922592
return Err(PaymentSendFailure::ParameterError(APIError::APIMisuseError{err: "Payment secret is required for multi-path payments".to_string()}));
@@ -2596,12 +2596,12 @@ impl<M: Deref, T: Deref, K: Deref, F: Deref, L: Deref> ChannelManager<M, T, K, F
25962596
let mut path_errs = Vec::with_capacity(route.paths.len());
25972597
'path_check: for path in route.paths.iter() {
25982598
if path.len() < 1 || path.len() > 20 {
2599-
path_errs.push(Err(APIError::RouteError{err: "Path didn't go anywhere/had bogus size"}));
2599+
path_errs.push(Err(APIError::InvalidRoute{err: "Path didn't go anywhere/had bogus size"}));
26002600
continue 'path_check;
26012601
}
26022602
for (idx, hop) in path.iter().enumerate() {
26032603
if idx != path.len() - 1 && hop.pubkey == our_node_id {
2604-
path_errs.push(Err(APIError::RouteError{err: "Path went through us but wasn't a simple rebalance loop to us"}));
2604+
path_errs.push(Err(APIError::InvalidRoute{err: "Path went through us but wasn't a simple rebalance loop to us"}));
26052605
continue 'path_check;
26062606
}
26072607
}

lightning/src/ln/functional_tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6023,7 +6023,7 @@ fn test_update_add_htlc_bolt2_sender_cltv_expiry_too_high() {
60236023
.with_features(channelmanager::provided_invoice_features());
60246024
let (mut route, our_payment_hash, _, our_payment_secret) = get_route_and_payment_hash!(nodes[0], nodes[1], payment_params, 100000000, 0);
60256025
route.paths[0].last_mut().unwrap().cltv_expiry_delta = 500000001;
6026-
unwrap_send_err!(nodes[0].node.send_payment(&route, our_payment_hash, &Some(our_payment_secret), PaymentId(our_payment_hash.0)), true, APIError::RouteError { ref err },
6026+
unwrap_send_err!(nodes[0].node.send_payment(&route, our_payment_hash, &Some(our_payment_secret), PaymentId(our_payment_hash.0)), true, APIError::InvalidRoute { ref err },
60276027
assert_eq!(err, &"Channel CLTV overflowed?"));
60286028
}
60296029

lightning/src/ln/onion_utils.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,11 +182,11 @@ pub(super) fn build_onion_payloads(path: &Vec<RouteHop>, total_msat: u64, paymen
182182
});
183183
cur_value_msat += hop.fee_msat;
184184
if cur_value_msat >= 21000000 * 100000000 * 1000 {
185-
return Err(APIError::RouteError{err: "Channel fees overflowed?"});
185+
return Err(APIError::InvalidRoute{err: "Channel fees overflowed?"});
186186
}
187187
cur_cltv += hop.cltv_expiry_delta as u32;
188188
if cur_cltv >= 500000000 {
189-
return Err(APIError::RouteError{err: "Channel CLTV overflowed?"});
189+
return Err(APIError::InvalidRoute{err: "Channel CLTV overflowed?"});
190190
}
191191
last_short_channel_id = hop.short_channel_id;
192192
}

lightning/src/util/errors.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ pub enum APIError {
3535
},
3636
/// A malformed Route was provided (eg overflowed value, node id mismatch, overly-looped route,
3737
/// too-many-hops, etc).
38-
RouteError {
38+
InvalidRoute {
3939
/// A human-readable error message
4040
err: &'static str
4141
},
@@ -74,7 +74,7 @@ impl fmt::Debug for APIError {
7474
match *self {
7575
APIError::APIMisuseError {ref err} => write!(f, "Misuse error: {}", err),
7676
APIError::FeeRateTooHigh {ref err, ref feerate} => write!(f, "{} feerate: {}", err, feerate),
77-
APIError::RouteError {ref err} => write!(f, "Route error: {}", err),
77+
APIError::InvalidRoute {ref err} => write!(f, "Invalid route provided: {}", err),
7878
APIError::ChannelUnavailable {ref err} => write!(f, "Channel unavailable: {}", err),
7979
APIError::MonitorUpdateInProgress => f.write_str("Client indicated a channel monitor update is in progress but not yet complete"),
8080
APIError::IncompatibleShutdownScript { ref script } => {

0 commit comments

Comments
 (0)