X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;ds=sidebyside;f=lightning-invoice%2Fsrc%2Fpayment.rs;h=a3517264b4a0bd1e8846f26afbf975f0f77b42eb;hb=8ecd7c30c903b9e2db0c280110200f7c61565c11;hp=0958c79649521b4eec769f090705b34792de9f4e;hpb=de783e0b958fadb9ca810248af782642d2cf3b78;p=rust-lightning diff --git a/lightning-invoice/src/payment.rs b/lightning-invoice/src/payment.rs index 0958c796..a3517264 100644 --- a/lightning-invoice/src/payment.rs +++ b/lightning-invoice/src/payment.rs @@ -115,7 +115,7 @@ //! # let router = FakeRouter {}; //! # let scorer = RefCell::new(FakeScorer {}); //! # let logger = FakeLogger {}; -//! let invoice_payer = InvoicePayer::new(&payer, router, &logger, event_handler, Retry::Attempts(2)); +//! let invoice_payer = InvoicePayer::new(&payer, &router, &logger, event_handler, Retry::Attempts(2)); //! //! let invoice = "..."; //! if let Ok(invoice) = invoice.parse::() { @@ -184,12 +184,13 @@ mod sealed { /// (C-not exported) generally all users should use the [`InvoicePayer`] type alias. pub struct InvoicePayerUsingTime< P: Deref, - R: Router, + R: Deref, L: Deref, E: sealed::BaseEventHandler, T: Time > where P::Target: Payer, + R::Target: Router, L::Target: Logger, { payer: P, @@ -316,10 +317,11 @@ pub enum PaymentError { Sending(PaymentSendFailure), } -impl +impl InvoicePayerUsingTime where P::Target: Payer, + R::Target: Router, L::Target: Logger, { /// Creates an invoice payer that retries failed payment paths. @@ -429,7 +431,7 @@ where let route_params = RouteParameters { payment_params, final_value_msat: invoice.amount_milli_satoshis().or(amount_msats).unwrap(), - final_cltv_expiry_delta: invoice.min_final_cltv_expiry() as u32, + final_cltv_expiry_delta: invoice.min_final_cltv_expiry_delta() as u32, }; let send_payment = |route: &Route| { @@ -630,10 +632,11 @@ fn has_expired(route_params: &RouteParameters) -> bool { } else { false } } -impl +impl InvoicePayerUsingTime where P::Target: Payer, + R::Target: Router, L::Target: Logger, { /// Returns a bool indicating whether the processed event should be forwarded to a user-provided @@ -697,10 +700,11 @@ where } } -impl +impl EventHandler for InvoicePayerUsingTime where P::Target: Payer, + R::Target: Router, L::Target: Logger, { fn handle_event(&self, event: Event) { @@ -711,10 +715,11 @@ where } } -impl F> +impl F> InvoicePayerUsingTime where P::Target: Payer, + R::Target: Router, L::Target: Logger, { /// Intercepts events required by the [`InvoicePayer`] and forwards them to the underlying event @@ -746,7 +751,6 @@ mod tests { use secp256k1::{SecretKey, PublicKey, Secp256k1}; use std::cell::RefCell; use std::collections::VecDeque; - use std::ops::DerefMut; use std::time::{SystemTime, Duration}; use crate::time_utils::tests::SinceEpoch; use crate::DEFAULT_EXPIRY_TIME; @@ -760,7 +764,7 @@ mod tests { .payment_hash(payment_hash) .payment_secret(PaymentSecret([0; 32])) .duration_since_epoch(duration_since_epoch()) - .min_final_cltv_expiry(144) + .min_final_cltv_expiry_delta(144) .amount_milli_satoshis(128) .build_signed(|hash| { Secp256k1::new().sign_ecdsa_recoverable(hash, &private_key) @@ -786,7 +790,7 @@ mod tests { .payment_hash(payment_hash) .payment_secret(PaymentSecret([0; 32])) .duration_since_epoch(duration_since_epoch()) - .min_final_cltv_expiry(144) + .min_final_cltv_expiry_delta(144) .build_signed(|hash| { Secp256k1::new().sign_ecdsa_recoverable(hash, &private_key) }) @@ -805,7 +809,7 @@ mod tests { .payment_hash(payment_hash) .payment_secret(PaymentSecret([0; 32])) .duration_since_epoch(duration) - .min_final_cltv_expiry(144) + .min_final_cltv_expiry_delta(144) .amount_milli_satoshis(128) .build_signed(|hash| { Secp256k1::new().sign_ecdsa_recoverable(hash, &private_key) @@ -831,7 +835,7 @@ mod tests { let router = TestRouter::new(TestScorer::new()); let logger = TestLogger::new(); let invoice_payer = - InvoicePayer::new(&payer, router, &logger, event_handler, Retry::Attempts(0)); + InvoicePayer::new(&payer, &router, &logger, event_handler, Retry::Attempts(0)); let payment_id = Some(invoice_payer.pay_invoice(&invoice).unwrap()); assert_eq!(*payer.attempts.borrow(), 1); @@ -859,7 +863,7 @@ mod tests { let router = TestRouter::new(TestScorer::new()); let logger = TestLogger::new(); let invoice_payer = - InvoicePayer::new(&payer, router, &logger, event_handler, Retry::Attempts(2)); + InvoicePayer::new(&payer, &router, &logger, event_handler, Retry::Attempts(2)); let payment_id = Some(invoice_payer.pay_invoice(&invoice).unwrap()); assert_eq!(*payer.attempts.borrow(), 1); @@ -903,7 +907,7 @@ mod tests { let router = TestRouter::new(TestScorer::new()); let logger = TestLogger::new(); let invoice_payer = - InvoicePayer::new(&payer, router, &logger, event_handler, Retry::Attempts(2)); + InvoicePayer::new(&payer, &router, &logger, event_handler, Retry::Attempts(2)); assert!(invoice_payer.pay_invoice(&invoice).is_ok()); } @@ -924,7 +928,7 @@ mod tests { let router = TestRouter::new(TestScorer::new()); let logger = TestLogger::new(); let invoice_payer = - InvoicePayer::new(&payer, router, &logger, event_handler, Retry::Attempts(2)); + InvoicePayer::new(&payer, &router, &logger, event_handler, Retry::Attempts(2)); let payment_id = Some(PaymentId([1; 32])); let event = Event::PaymentPathFailed { @@ -968,7 +972,7 @@ mod tests { let router = TestRouter::new(TestScorer::new()); let logger = TestLogger::new(); let invoice_payer = - InvoicePayer::new(&payer, router, &logger, event_handler, Retry::Attempts(2)); + InvoicePayer::new(&payer, &router, &logger, event_handler, Retry::Attempts(2)); let payment_id = Some(invoice_payer.pay_invoice(&invoice).unwrap()); assert_eq!(*payer.attempts.borrow(), 1); @@ -1027,7 +1031,7 @@ mod tests { type InvoicePayerUsingSinceEpoch = InvoicePayerUsingTime::; let invoice_payer = - InvoicePayerUsingSinceEpoch::new(&payer, router, &logger, event_handler, Retry::Timeout(Duration::from_secs(120))); + InvoicePayerUsingSinceEpoch::new(&payer, &router, &logger, event_handler, Retry::Timeout(Duration::from_secs(120))); let payment_id = Some(invoice_payer.pay_invoice(&invoice).unwrap()); assert_eq!(*payer.attempts.borrow(), 1); @@ -1066,7 +1070,7 @@ mod tests { let router = TestRouter::new(TestScorer::new()); let logger = TestLogger::new(); let invoice_payer = - InvoicePayer::new(&payer, router, &logger, event_handler, Retry::Attempts(2)); + InvoicePayer::new(&payer, &router, &logger, event_handler, Retry::Attempts(2)); let payment_id = Some(invoice_payer.pay_invoice(&invoice).unwrap()); assert_eq!(*payer.attempts.borrow(), 1); @@ -1097,7 +1101,7 @@ mod tests { let router = TestRouter::new(TestScorer::new()); let logger = TestLogger::new(); let invoice_payer = - InvoicePayer::new(&payer, router, &logger, event_handler, Retry::Attempts(2)); + InvoicePayer::new(&payer, &router, &logger, event_handler, Retry::Attempts(2)); let payment_preimage = PaymentPreimage([1; 32]); let invoice = expired_invoice(payment_preimage); @@ -1121,7 +1125,7 @@ mod tests { let router = TestRouter::new(TestScorer::new()); let logger = TestLogger::new(); let invoice_payer = - InvoicePayer::new(&payer, router, &logger, event_handler, Retry::Attempts(2)); + InvoicePayer::new(&payer, &router, &logger, event_handler, Retry::Attempts(2)); let payment_id = Some(invoice_payer.pay_invoice(&invoice).unwrap()); assert_eq!(*payer.attempts.borrow(), 1); @@ -1161,7 +1165,7 @@ mod tests { let router = TestRouter::new(TestScorer::new()); let logger = TestLogger::new(); let invoice_payer = - InvoicePayer::new(&payer, router, &logger, event_handler, Retry::Attempts(2)); + InvoicePayer::new(&payer, &router, &logger, event_handler, Retry::Attempts(2)); let payment_id = Some(invoice_payer.pay_invoice(&invoice).unwrap()); assert_eq!(*payer.attempts.borrow(), 1); @@ -1194,7 +1198,7 @@ mod tests { let router = TestRouter::new(TestScorer::new()); let logger = TestLogger::new(); let invoice_payer = - InvoicePayer::new(&payer, router, &logger, event_handler, Retry::Attempts(2)); + InvoicePayer::new(&payer, &router, &logger, event_handler, Retry::Attempts(2)); let payment_id = Some(invoice_payer.pay_invoice(&invoice).unwrap()); assert_eq!(*payer.attempts.borrow(), 1); @@ -1229,7 +1233,7 @@ mod tests { let router = TestRouter::new(TestScorer::new()); let logger = TestLogger::new(); let invoice_payer = - InvoicePayer::new(&payer, router, &logger, event_handler, Retry::Attempts(0)); + InvoicePayer::new(&payer, &router, &logger, event_handler, Retry::Attempts(0)); let payment_id = Some(invoice_payer.pay_invoice(&invoice).unwrap()); @@ -1267,7 +1271,7 @@ mod tests { let router = FailingRouter {}; let logger = TestLogger::new(); let invoice_payer = - InvoicePayer::new(&payer, router, &logger, |_: Event| {}, Retry::Attempts(0)); + InvoicePayer::new(&payer, &router, &logger, |_: Event| {}, Retry::Attempts(0)); let payment_preimage = PaymentPreimage([1; 32]); let invoice = invoice(payment_preimage); @@ -1290,7 +1294,7 @@ mod tests { let router = TestRouter::new(TestScorer::new()); let logger = TestLogger::new(); let invoice_payer = - InvoicePayer::new(&payer, router, &logger, |_: Event| {}, Retry::Attempts(0)); + InvoicePayer::new(&payer, &router, &logger, |_: Event| {}, Retry::Attempts(0)); match invoice_payer.pay_invoice(&invoice) { Err(PaymentError::Sending(_)) => {}, @@ -1313,7 +1317,7 @@ mod tests { let router = TestRouter::new(TestScorer::new()); let logger = TestLogger::new(); let invoice_payer = - InvoicePayer::new(&payer, router, &logger, event_handler, Retry::Attempts(0)); + InvoicePayer::new(&payer, &router, &logger, event_handler, Retry::Attempts(0)); let payment_id = Some(invoice_payer.pay_zero_value_invoice(&invoice, final_value_msat).unwrap()); @@ -1335,7 +1339,7 @@ mod tests { let router = TestRouter::new(TestScorer::new()); let logger = TestLogger::new(); let invoice_payer = - InvoicePayer::new(&payer, router, &logger, event_handler, Retry::Attempts(0)); + InvoicePayer::new(&payer, &router, &logger, event_handler, Retry::Attempts(0)); let payment_preimage = PaymentPreimage([1; 32]); let invoice = invoice(payment_preimage); @@ -1365,7 +1369,7 @@ mod tests { let router = TestRouter::new(TestScorer::new()); let logger = TestLogger::new(); let invoice_payer = - InvoicePayer::new(&payer, router, &logger, event_handler, Retry::Attempts(2)); + InvoicePayer::new(&payer, &router, &logger, event_handler, Retry::Attempts(2)); let payment_id = Some(invoice_payer.pay_pubkey( pubkey, payment_preimage, final_value_msat, final_cltv_expiry_delta @@ -1420,7 +1424,7 @@ mod tests { let router = TestRouter::new(scorer); let logger = TestLogger::new(); let invoice_payer = - InvoicePayer::new(&payer, router, &logger, event_handler, Retry::Attempts(2)); + InvoicePayer::new(&payer, &router, &logger, event_handler, Retry::Attempts(2)); let payment_id = Some(invoice_payer.pay_invoice(&invoice).unwrap()); let event = Event::PaymentPathFailed { @@ -1455,7 +1459,7 @@ mod tests { let router = TestRouter::new(scorer); let logger = TestLogger::new(); let invoice_payer = - InvoicePayer::new(&payer, router, &logger, event_handler, Retry::Attempts(2)); + InvoicePayer::new(&payer, &router, &logger, event_handler, Retry::Attempts(2)); let payment_id = invoice_payer.pay_invoice(&invoice).unwrap(); let event = Event::PaymentPathSuccessful { @@ -1498,7 +1502,7 @@ mod tests { let router = TestRouter::new(scorer); let logger = TestLogger::new(); let invoice_payer = - InvoicePayer::new(&payer, router, &logger, event_handler, Retry::Attempts(0)); + InvoicePayer::new(&payer, &router, &logger, event_handler, Retry::Attempts(0)); // Make first invoice payment. invoice_payer.pay_invoice(&payment_invoice).unwrap(); @@ -1552,7 +1556,7 @@ mod tests { let router = TestRouter::new(scorer); let logger = TestLogger::new(); let invoice_payer = - InvoicePayer::new(&payer, router, &logger, event_handler, Retry::Attempts(2)); + InvoicePayer::new(&payer, &router, &logger, event_handler, Retry::Attempts(2)); // Fail 1st path, leave 2nd path inflight let payment_id = Some(invoice_payer.pay_invoice(&payment_invoice).unwrap()); @@ -1661,7 +1665,7 @@ mod tests { RouteParameters { payment_params, final_value_msat, - final_cltv_expiry_delta: invoice.min_final_cltv_expiry() as u32, + final_cltv_expiry_delta: invoice.min_final_cltv_expiry_delta() as u32, } } } @@ -2077,11 +2081,11 @@ mod tests { router.expect_find_route(Ok(route.clone())); let event_handler = |_: Event| { panic!(); }; - let invoice_payer = InvoicePayer::new(nodes[0].node, router, nodes[0].logger, event_handler, Retry::Attempts(1)); + let invoice_payer = InvoicePayer::new(nodes[0].node, &router, nodes[0].logger, event_handler, Retry::Attempts(1)); assert!(invoice_payer.pay_invoice(&create_invoice_from_channelmanager_and_duration_since_epoch( &nodes[1].node, nodes[1].keys_manager, nodes[1].logger, Currency::Bitcoin, - Some(100_010_000), "Invoice".to_string(), duration_since_epoch(), 3600).unwrap()) + Some(100_010_000), "Invoice".to_string(), duration_since_epoch(), 3600, None).unwrap()) .is_ok()); let htlc_msgs = nodes[0].node.get_and_clear_pending_msg_events(); assert_eq!(htlc_msgs.len(), 2); @@ -2122,11 +2126,11 @@ mod tests { router.expect_find_route(Ok(route.clone())); let event_handler = |_: Event| { panic!(); }; - let invoice_payer = InvoicePayer::new(nodes[0].node, router, nodes[0].logger, event_handler, Retry::Attempts(1)); + let invoice_payer = InvoicePayer::new(nodes[0].node, &router, nodes[0].logger, event_handler, Retry::Attempts(1)); assert!(invoice_payer.pay_invoice(&create_invoice_from_channelmanager_and_duration_since_epoch( &nodes[1].node, nodes[1].keys_manager, nodes[1].logger, Currency::Bitcoin, - Some(100_010_000), "Invoice".to_string(), duration_since_epoch(), 3600).unwrap()) + Some(100_010_000), "Invoice".to_string(), duration_since_epoch(), 3600, None).unwrap()) .is_ok()); let htlc_msgs = nodes[0].node.get_and_clear_pending_msg_events(); assert_eq!(htlc_msgs.len(), 2); @@ -2203,11 +2207,11 @@ mod tests { let event_checker = expected_events.borrow_mut().pop_front().unwrap(); event_checker(event); }; - let invoice_payer = InvoicePayer::new(nodes[0].node, router, nodes[0].logger, event_handler, Retry::Attempts(1)); + let invoice_payer = InvoicePayer::new(nodes[0].node, &router, nodes[0].logger, event_handler, Retry::Attempts(1)); assert!(invoice_payer.pay_invoice(&create_invoice_from_channelmanager_and_duration_since_epoch( &nodes[1].node, nodes[1].keys_manager, nodes[1].logger, Currency::Bitcoin, - Some(100_010_000), "Invoice".to_string(), duration_since_epoch(), 3600).unwrap()) + Some(100_010_000), "Invoice".to_string(), duration_since_epoch(), 3600, None).unwrap()) .is_ok()); let htlc_updates = SendEvent::from_node(&nodes[0]); check_added_monitors!(nodes[0], 1);