Skip to content

Abstract ChannelManager outbound payment logic #1923

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

68 changes: 35 additions & 33 deletions lightning/src/ln/outbound_payment.rs
Original file line number Diff line number Diff line change
Expand Up @@ -271,10 +271,10 @@ impl OutboundPayments {
}
}

pub(super) fn send_payment<K: Deref, F>(&self, route: &Route, payment_hash: PaymentHash,
payment_secret: &Option<PaymentSecret>, payment_id: PaymentId, keys_manager: &K,
best_block_height: u32, send_payment_along_path: F)
-> Result<(), PaymentSendFailure>
pub(super) fn send_payment<K: Deref, F>(
&self, route: &Route, payment_hash: PaymentHash, payment_secret: &Option<PaymentSecret>,
payment_id: PaymentId, keys_manager: &K, best_block_height: u32, send_payment_along_path: F
) -> Result<(), PaymentSendFailure>
where
K::Target: KeysInterface,
F: Fn(&Vec<RouteHop>, &Option<PaymentParameters>, &PaymentHash, &Option<PaymentSecret>, u64,
Expand All @@ -284,10 +284,10 @@ impl OutboundPayments {
self.send_payment_internal(route, payment_hash, payment_secret, None, payment_id, None, onion_session_privs, keys_manager, best_block_height, send_payment_along_path)
}

pub(super) fn send_spontaneous_payment<K: Deref, F>(&self, route: &Route,
payment_preimage: Option<PaymentPreimage>, payment_id: PaymentId, keys_manager: &K,
best_block_height: u32, send_payment_along_path: F)
-> Result<PaymentHash, PaymentSendFailure>
pub(super) fn send_spontaneous_payment<K: Deref, F>(
&self, route: &Route, payment_preimage: Option<PaymentPreimage>, payment_id: PaymentId,
keys_manager: &K, best_block_height: u32, send_payment_along_path: F
) -> Result<PaymentHash, PaymentSendFailure>
where
K::Target: KeysInterface,
F: Fn(&Vec<RouteHop>, &Option<PaymentParameters>, &PaymentHash, &Option<PaymentSecret>, u64,
Expand All @@ -306,9 +306,10 @@ impl OutboundPayments {
}
}

pub(super) fn retry_payment<K: Deref, F>(&self, route: &Route, payment_id: PaymentId,
keys_manager: &K, best_block_height: u32, send_payment_along_path: F)
-> Result<(), PaymentSendFailure>
pub(super) fn retry_payment<K: Deref, F>(
&self, route: &Route, payment_id: PaymentId, keys_manager: &K, best_block_height: u32,
send_payment_along_path: F
) -> Result<(), PaymentSendFailure>
where
K::Target: KeysInterface,
F: Fn(&Vec<RouteHop>, &Option<PaymentParameters>, &PaymentHash, &Option<PaymentSecret>, u64,
Expand Down Expand Up @@ -374,9 +375,10 @@ impl OutboundPayments {
self.send_payment_internal(route, payment_hash, &payment_secret, None, payment_id, Some(total_msat), onion_session_privs, keys_manager, best_block_height, send_payment_along_path)
}

pub(super) fn send_probe<K: Deref, F>(&self, hops: Vec<RouteHop>, probing_cookie_secret: [u8; 32],
keys_manager: &K, best_block_height: u32, send_payment_along_path: F)
-> Result<(PaymentHash, PaymentId), PaymentSendFailure>
pub(super) fn send_probe<K: Deref, F>(
&self, hops: Vec<RouteHop>, probing_cookie_secret: [u8; 32], keys_manager: &K,
best_block_height: u32, send_payment_along_path: F
) -> Result<(PaymentHash, PaymentId), PaymentSendFailure>
where
K::Target: KeysInterface,
F: Fn(&Vec<RouteHop>, &Option<PaymentParameters>, &PaymentHash, &Option<PaymentSecret>, u64,
Expand All @@ -401,10 +403,10 @@ impl OutboundPayments {
}
}

pub(super) fn add_new_pending_payment<K: Deref>(&self, payment_hash: PaymentHash,
payment_secret: Option<PaymentSecret>, payment_id: PaymentId, route: &Route, keys_manager: &K,
best_block_height: u32)
-> Result<Vec<[u8; 32]>, PaymentSendFailure> where K::Target: KeysInterface {
pub(super) fn add_new_pending_payment<K: Deref>(
&self, payment_hash: PaymentHash, payment_secret: Option<PaymentSecret>, payment_id: PaymentId,
route: &Route, keys_manager: &K, best_block_height: u32
) -> Result<Vec<[u8; 32]>, PaymentSendFailure> where K::Target: KeysInterface {
let mut onion_session_privs = Vec::with_capacity(route.paths.len());
for _ in 0..route.paths.len() {
onion_session_privs.push(keys_manager.get_secure_random_bytes());
Expand Down Expand Up @@ -433,8 +435,8 @@ impl OutboundPayments {
}
}

fn send_payment_internal<K: Deref, F>
(&self, route: &Route, payment_hash: PaymentHash, payment_secret: &Option<PaymentSecret>,
fn send_payment_internal<K: Deref, F>(
Copy link
Contributor

@jkczyz jkczyz Dec 20, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: I'd also move the closing ) to the next line here and all the following methods as you did in the methods before this (ec55730).

&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]>, keys_manager: &K, best_block_height: u32,
send_payment_along_path: F) -> Result<(), PaymentSendFailure>
Expand Down Expand Up @@ -542,11 +544,11 @@ impl OutboundPayments {
}

#[cfg(test)]
pub(super) fn test_send_payment_internal<K: Deref, F>
(&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]>, keys_manager: &K, best_block_height: u32,
send_payment_along_path: F) -> Result<(), PaymentSendFailure>
pub(super) fn test_send_payment_internal<K: Deref, F>(
&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]>, keys_manager: &K, best_block_height: u32,
send_payment_along_path: F) -> Result<(), PaymentSendFailure>
where
K::Target: KeysInterface,
F: Fn(&Vec<RouteHop>, &Option<PaymentParameters>, &PaymentHash, &Option<PaymentSecret>, u64,
Expand All @@ -557,9 +559,9 @@ impl OutboundPayments {
send_payment_along_path)
}

pub(super) fn claim_htlc<L: Deref>(&self, payment_id: PaymentId,
payment_preimage: PaymentPreimage, session_priv: SecretKey, path: Vec<RouteHop>,
from_onchain: bool, pending_events: &Mutex<Vec<events::Event>>, logger: &L)
pub(super) fn claim_htlc<L: Deref>(
&self, payment_id: PaymentId, payment_preimage: PaymentPreimage, session_priv: SecretKey,
path: Vec<RouteHop>, from_onchain: bool, pending_events: &Mutex<Vec<events::Event>>, logger: &L)
where L::Target: Logger {
let mut session_priv_bytes = [0; 32];
session_priv_bytes.copy_from_slice(&session_priv[..]);
Expand Down Expand Up @@ -665,11 +667,11 @@ impl OutboundPayments {
});
}

pub(super) fn fail_htlc<L: Deref>(&self, source: &HTLCSource, payment_hash: &PaymentHash,
onion_error: &HTLCFailReason, path: &Vec<RouteHop>, session_priv: &SecretKey,
payment_id: &PaymentId, payment_params: &Option<PaymentParameters>,
probing_cookie_secret: [u8; 32], secp_ctx: &Secp256k1<secp256k1::All>,
pending_events: &Mutex<Vec<events::Event>>, logger: &L)
pub(super) fn fail_htlc<L: Deref>(
&self, source: &HTLCSource, payment_hash: &PaymentHash, onion_error: &HTLCFailReason,
path: &Vec<RouteHop>, session_priv: &SecretKey, payment_id: &PaymentId,
payment_params: &Option<PaymentParameters>, probing_cookie_secret: [u8; 32],
secp_ctx: &Secp256k1<secp256k1::All>, pending_events: &Mutex<Vec<events::Event>>, logger: &L)
where L::Target: Logger {
let mut session_priv_bytes = [0; 32];
session_priv_bytes.copy_from_slice(&session_priv[..]);
Expand Down