From 36306a0554ab3e778d83837238545c8727107fa8 Mon Sep 17 00:00:00 2001 From: yukang Date: Wed, 23 Oct 2024 15:05:46 +0800 Subject: [PATCH] add allow_self_payment for send_payment --- src/fiber/graph.rs | 45 +++++++--- src/fiber/network.rs | 26 +++--- src/fiber/tests/graph.rs | 178 ++++++++++++++++++++++++++++++++++++--- src/rpc/README.md | 1 + src/rpc/channel.rs | 4 + 5 files changed, 216 insertions(+), 38 deletions(-) diff --git a/src/fiber/graph.rs b/src/fiber/graph.rs index dd51233c..16f9f441 100644 --- a/src/fiber/graph.rs +++ b/src/fiber/graph.rs @@ -510,15 +510,16 @@ where /// Returns a list of `PaymentHopData` for all nodes in the route, including the origin and the target node. pub fn build_route( &self, - payment_request: SendPaymentData, + payment_data: &SendPaymentData, ) -> Result, GraphError> { + let payment_data = payment_data.clone(); let source = self.get_source_pubkey(); - let target = payment_request.target_pubkey; - let amount = payment_request.amount; - let preimage = payment_request.preimage; - let payment_hash = payment_request.payment_hash; - let udt_type_script = payment_request.udt_type_script; - let invoice = payment_request + let target = payment_data.target_pubkey; + let amount = payment_data.amount; + let preimage = payment_data.preimage; + let payment_hash = payment_data.payment_hash; + let udt_type_script = payment_data.udt_type_script; + let invoice = payment_data .invoice .map(|x| x.parse::().unwrap()); let hash_algorithm = invoice @@ -531,12 +532,20 @@ where source, target, amount, payment_hash ); + let allow_self_payment = payment_data.allow_self_payment; + if source == target && !allow_self_payment { + return Err(GraphError::PathFind( + "source and target are the same and allow_self_payment is not enable".to_string(), + )); + } + let route = self.find_route( source, target, amount, - payment_request.max_fee_amount, + payment_data.max_fee_amount, udt_type_script, + allow_self_payment, )?; assert!(!route.is_empty()); @@ -609,6 +618,7 @@ where amount: u128, max_fee_amount: Option, udt_type_script: Option