Skip to content
This repository was archived by the owner on Jan 6, 2025. It is now read-only.

Commit b47dac7

Browse files
committed
Account for missing refund_onchain_address field
We allow de/serializing if the field is absent and mirror it back in `CreateOrderResponse`, as per recent spec change.
1 parent 5418137 commit b47dac7

File tree

2 files changed

+17
-6
lines changed

2 files changed

+17
-6
lines changed

src/lsps1/client.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ use lightning::util::errors::APIError;
2727
use lightning::util::logger::Level;
2828

2929
use bitcoin::secp256k1::PublicKey;
30+
use bitcoin::Address;
3031

3132
use core::ops::Deref;
3233

@@ -189,6 +190,7 @@ where
189190
/// The client agrees to paying channel fees according to the provided parameters.
190191
pub fn create_order(
191192
&self, counterparty_node_id: &PublicKey, order: OrderParameters,
193+
refund_onchain_address: Option<Address>,
192194
) -> RequestId {
193195
let (request_id, request_msg) = {
194196
let mut outer_state_lock = self.per_peer_state.write().unwrap();
@@ -198,7 +200,8 @@ where
198200
let mut peer_state_lock = inner_state_lock.lock().unwrap();
199201

200202
let request_id = crate::utils::generate_request_id(&self.entropy_source);
201-
let request = LSPS1Request::CreateOrder(CreateOrderRequest { order });
203+
let request =
204+
LSPS1Request::CreateOrder(CreateOrderRequest { order, refund_onchain_address });
202205
let msg = LSPS1Message::Request(request_id.clone(), request).into();
203206
peer_state_lock.pending_create_order_requests.insert(request_id.clone());
204207

src/lsps1/msgs.rs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,11 @@ pub struct CreateOrderRequest {
8585
/// The order made.
8686
#[serde(flatten)]
8787
pub order: OrderParameters,
88+
/// The address where the LSP will send the funds if the order fails.
89+
#[serde(default)]
90+
#[serde(skip_serializing_if = "Option::is_none")]
91+
#[serde(with = "unchecked_address_option")]
92+
pub refund_onchain_address: Option<Address>,
8893
}
8994

9095
/// An object representing an LSPS1 channel order.
@@ -107,9 +112,6 @@ pub struct OrderParameters {
107112
pub channel_expiry_blocks: u32,
108113
/// May contain arbitrary associated data like a coupon code or a authentication token.
109114
pub token: Option<String>,
110-
/// The address where the LSP will send the funds if the order fails.
111-
#[serde(with = "unchecked_address_option")]
112-
pub refund_onchain_address: Option<Address>,
113115
/// Indicates if the channel should be announced to the network.
114116
pub announce_channel: bool,
115117
}
@@ -194,6 +196,11 @@ pub struct OnchainPaymentInfo {
194196
/// confirmed without a confirmation.
195197
#[serde(with = "u32_fee_rate")]
196198
pub min_fee_for_0conf: FeeRate,
199+
/// The address where the LSP will send the funds if the order fails.
200+
#[serde(default)]
201+
#[serde(skip_serializing_if = "Option::is_none")]
202+
#[serde(with = "unchecked_address_option")]
203+
pub refund_onchain_address: Option<Address>,
197204
}
198205

199206
/// The state of a BOLT 11 payment.
@@ -445,9 +452,10 @@ mod tests {
445452
"expires_at": "2015-01-25T19:29:44.612Z",
446453
"fee_total_sat": "9999",
447454
"order_total_sat": "2009999",
448-
"address": "bc1qvmsy0f3yyes6z9jvddk8xqwznndmdwapvrc0xrmhd3vqj5rhdrrq6hz49h",
455+
"address" : "bc1p5uvtaxzkjwvey2tfy49k5vtqfpjmrgm09cvs88ezyy8h2zv7jhas9tu4yr",
449456
"min_fee_for_0conf": 253,
450-
"min_onchain_payment_confirmations": 0
457+
"min_onchain_payment_confirmations": 0,
458+
"refund_onchain_address": "bc1qvmsy0f3yyes6z9jvddk8xqwznndmdwapvrc0xrmhd3vqj5rhdrrq6hz49h"
451459
}
452460
},
453461
"channel": null

0 commit comments

Comments
 (0)