mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-02-25 07:17:40 +01:00
Fail request_refund_payment for unsupported chain
If a Refund has an unsupported chain, ChannelManager should not send an invoice as it can't be paid on that chain. Instead, return an error when calling ChannelManager::request_refund_payment for such refunds.
This commit is contained in:
parent
ad91fcd510
commit
228e72ca34
2 changed files with 37 additions and 2 deletions
|
@ -7919,8 +7919,10 @@ where
|
|||
///
|
||||
/// # Errors
|
||||
///
|
||||
/// Errors if the parameterized [`Router`] is unable to create a blinded payment path or reply
|
||||
/// path for the invoice.
|
||||
/// Errors if:
|
||||
/// - the refund is for an unsupported chain, or
|
||||
/// - the parameterized [`Router`] is unable to create a blinded payment path or reply path for
|
||||
/// the invoice.
|
||||
///
|
||||
/// [`Bolt12Invoice`]: crate::offers::invoice::Bolt12Invoice
|
||||
pub fn request_refund_payment(&self, refund: &Refund) -> Result<(), Bolt12SemanticError> {
|
||||
|
@ -7931,6 +7933,10 @@ where
|
|||
let amount_msats = refund.amount_msats();
|
||||
let relative_expiry = DEFAULT_RELATIVE_EXPIRY.as_secs() as u32;
|
||||
|
||||
if refund.chain() != self.chain_hash {
|
||||
return Err(Bolt12SemanticError::UnsupportedChain);
|
||||
}
|
||||
|
||||
match self.create_inbound_payment(Some(amount_msats), relative_expiry, None) {
|
||||
Ok((payment_hash, payment_secret)) => {
|
||||
let payment_paths = self.create_blinded_payment_paths(amount_msats, payment_secret)
|
||||
|
|
|
@ -759,6 +759,35 @@ fn fails_creating_invoice_request_for_unsupported_chain() {
|
|||
}
|
||||
}
|
||||
|
||||
/// Fails requesting a payment when the refund contains an unsupported chain.
|
||||
#[test]
|
||||
fn fails_sending_invoice_with_unsupported_chain_for_refund() {
|
||||
let chanmon_cfgs = create_chanmon_cfgs(2);
|
||||
let node_cfgs = create_node_cfgs(2, &chanmon_cfgs);
|
||||
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
|
||||
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);
|
||||
|
||||
create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 10_000_000, 1_000_000_000);
|
||||
|
||||
let alice = &nodes[0];
|
||||
let bob = &nodes[1];
|
||||
|
||||
let absolute_expiry = Duration::from_secs(u64::MAX);
|
||||
let payment_id = PaymentId([1; 32]);
|
||||
let refund = bob.node
|
||||
.create_refund_builder(
|
||||
"refund".to_string(), 10_000_000, absolute_expiry, payment_id, Retry::Attempts(0), None
|
||||
)
|
||||
.unwrap()
|
||||
.chain(Network::Signet)
|
||||
.build().unwrap();
|
||||
|
||||
match alice.node.request_refund_payment(&refund) {
|
||||
Ok(_) => panic!("Expected error"),
|
||||
Err(e) => assert_eq!(e, Bolt12SemanticError::UnsupportedChain),
|
||||
}
|
||||
}
|
||||
|
||||
/// Fails creating an invoice request when a blinded reply path cannot be created without exposing
|
||||
/// the node's id.
|
||||
#[test]
|
||||
|
|
Loading…
Add table
Reference in a new issue