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

Commit 8e74c18

Browse files
committed
Drop versioning from LSPS2
... as the spec dropped versioning, we now make the corresponding adjustments. While we're at it, we clean up currently unused fields to get rid of the warnings.
1 parent a514c46 commit 8e74c18

File tree

5 files changed

+24
-260
lines changed

5 files changed

+24
-260
lines changed

src/lsps0/msgs.rs

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ use crate::lsps1::msgs::{
99
};
1010
use crate::lsps2::msgs::{
1111
LSPS2Message, LSPS2Request, LSPS2Response, LSPS2_BUY_METHOD_NAME, LSPS2_GET_INFO_METHOD_NAME,
12-
LSPS2_GET_VERSIONS_METHOD_NAME,
1312
};
1413
use crate::prelude::{HashMap, String, ToString, Vec};
1514

@@ -294,9 +293,6 @@ impl Serialize for LSPSMessage {
294293
jsonrpc_object.serialize_field(JSONRPC_METHOD_FIELD_KEY, request.method())?;
295294

296295
match request {
297-
LSPS2Request::GetVersions(params) => {
298-
jsonrpc_object.serialize_field(JSONRPC_PARAMS_FIELD_KEY, params)?
299-
}
300296
LSPS2Request::GetInfo(params) => {
301297
jsonrpc_object.serialize_field(JSONRPC_PARAMS_FIELD_KEY, params)?
302298
}
@@ -309,9 +305,6 @@ impl Serialize for LSPSMessage {
309305
jsonrpc_object.serialize_field(JSONRPC_ID_FIELD_KEY, &request_id.0)?;
310306

311307
match response {
312-
LSPS2Response::GetVersions(result) => {
313-
jsonrpc_object.serialize_field(JSONRPC_RESULT_FIELD_KEY, result)?
314-
}
315308
LSPS2Response::GetInfo(result) => {
316309
jsonrpc_object.serialize_field(JSONRPC_RESULT_FIELD_KEY, result)?
317310
}
@@ -423,14 +416,6 @@ impl<'de, 'a> Visitor<'de> for LSPSMessageVisitor<'a> {
423416
LSPS1Request::GetOrder(request),
424417
)))
425418
}
426-
LSPS2_GET_VERSIONS_METHOD_NAME => {
427-
let request = serde_json::from_value(params.unwrap_or(json!({})))
428-
.map_err(de::Error::custom)?;
429-
Ok(LSPSMessage::LSPS2(LSPS2Message::Request(
430-
RequestId(id),
431-
LSPS2Request::GetVersions(request),
432-
)))
433-
}
434419
LSPS2_GET_INFO_METHOD_NAME => {
435420
let request = serde_json::from_value(params.unwrap_or(json!({})))
436421
.map_err(de::Error::custom)?;
@@ -471,18 +456,6 @@ impl<'de, 'a> Visitor<'de> for LSPSMessageVisitor<'a> {
471456
Err(de::Error::custom("Received invalid JSON-RPC object: one of method, result, or error required"))
472457
}
473458
}
474-
LSPS2_GET_VERSIONS_METHOD_NAME => {
475-
if let Some(result) = result {
476-
let response =
477-
serde_json::from_value(result).map_err(de::Error::custom)?;
478-
Ok(LSPSMessage::LSPS2(LSPS2Message::Response(
479-
RequestId(id),
480-
LSPS2Response::GetVersions(response),
481-
)))
482-
} else {
483-
Err(de::Error::custom("Received invalid lsps2.get_versions response."))
484-
}
485-
}
486459
#[cfg(lsps1)]
487460
LSPS1_CREATE_ORDER_METHOD_NAME => {
488461
if let Some(error) = error {

src/lsps2/client.rs

Lines changed: 20 additions & 133 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use crate::events::{Event, EventQueue};
1313
use crate::lsps0::msgs::{ProtocolMessageHandler, RequestId, ResponseError};
1414
use crate::lsps2::event::LSPS2ClientEvent;
1515
use crate::message_queue::MessageQueue;
16-
use crate::prelude::{HashMap, String, ToString, Vec};
16+
use crate::prelude::{HashMap, String, ToString};
1717
use crate::sync::{Arc, Mutex, RwLock};
1818

1919
use lightning::ln::msgs::{ErrorAction, LightningError};
@@ -26,17 +26,14 @@ use bitcoin::secp256k1::PublicKey;
2626
use core::ops::Deref;
2727

2828
use crate::lsps2::msgs::{
29-
BuyRequest, BuyResponse, GetInfoRequest, GetInfoResponse, GetVersionsRequest,
30-
GetVersionsResponse, InterceptScid, LSPS2Message, LSPS2Request, LSPS2Response,
31-
OpeningFeeParams,
29+
BuyRequest, BuyResponse, GetInfoRequest, GetInfoResponse, InterceptScid, LSPS2Message,
30+
LSPS2Request, LSPS2Response, OpeningFeeParams,
3231
};
3332

3433
/// Client-side configuration options for JIT channels.
3534
#[derive(Clone, Debug, Copy)]
3635
pub struct LSPS2ClientConfig {}
3736

38-
const SUPPORTED_SPEC_VERSIONS: [u16; 1] = [1];
39-
4037
struct ChannelStateError(String);
4138

4239
impl From<ChannelStateError> for LightningError {
@@ -47,46 +44,22 @@ impl From<ChannelStateError> for LightningError {
4744

4845
struct InboundJITChannelConfig {
4946
pub user_id: u128,
50-
pub token: Option<String>,
5147
pub payment_size_msat: Option<u64>,
5248
}
5349

5450
#[derive(PartialEq, Debug)]
5551
enum InboundJITChannelState {
56-
VersionsRequested,
57-
MenuRequested { version: u16 },
58-
PendingMenuSelection { version: u16 },
59-
BuyRequested { version: u16 },
52+
MenuRequested,
53+
PendingMenuSelection,
54+
BuyRequested,
6055
PendingPayment { client_trusts_lsp: bool, intercept_scid: InterceptScid },
6156
}
6257

6358
impl InboundJITChannelState {
64-
fn versions_received(&self, versions: Vec<u16>) -> Result<Self, ChannelStateError> {
65-
let max_shared_version = versions
66-
.iter()
67-
.filter(|version| SUPPORTED_SPEC_VERSIONS.contains(version))
68-
.max()
69-
.cloned()
70-
.ok_or(ChannelStateError(format!(
71-
"LSP does not support any of our specification versions. ours = {:?}. theirs = {:?}",
72-
SUPPORTED_SPEC_VERSIONS, versions
73-
)))?;
74-
75-
match self {
76-
InboundJITChannelState::VersionsRequested => {
77-
Ok(InboundJITChannelState::MenuRequested { version: max_shared_version })
78-
}
79-
state => Err(ChannelStateError(format!(
80-
"Received unexpected get_versions response. JIT Channel was in state: {:?}",
81-
state
82-
))),
83-
}
84-
}
85-
8659
fn info_received(&self) -> Result<Self, ChannelStateError> {
8760
match self {
88-
InboundJITChannelState::MenuRequested { version } => {
89-
Ok(InboundJITChannelState::PendingMenuSelection { version: *version })
61+
InboundJITChannelState::MenuRequested => {
62+
Ok(InboundJITChannelState::PendingMenuSelection)
9063
}
9164
state => Err(ChannelStateError(format!(
9265
"Received unexpected get_info response. JIT Channel was in state: {:?}",
@@ -97,8 +70,8 @@ impl InboundJITChannelState {
9770

9871
fn opening_fee_params_selected(&self) -> Result<Self, ChannelStateError> {
9972
match self {
100-
InboundJITChannelState::PendingMenuSelection { version } => {
101-
Ok(InboundJITChannelState::BuyRequested { version: *version })
73+
InboundJITChannelState::PendingMenuSelection => {
74+
Ok(InboundJITChannelState::BuyRequested)
10275
}
10376
state => Err(ChannelStateError(format!(
10477
"Opening fee params selected when JIT Channel was in state: {:?}",
@@ -123,29 +96,15 @@ impl InboundJITChannelState {
12396
}
12497

12598
struct InboundJITChannel {
126-
id: u128,
12799
state: InboundJITChannelState,
128100
config: InboundJITChannelConfig,
129101
}
130102

131103
impl InboundJITChannel {
132-
fn new(id: u128, user_id: u128, payment_size_msat: Option<u64>, token: Option<String>) -> Self {
104+
fn new(user_id: u128, payment_size_msat: Option<u64>) -> Self {
133105
Self {
134-
id,
135-
config: InboundJITChannelConfig { user_id, payment_size_msat, token },
136-
state: InboundJITChannelState::VersionsRequested,
137-
}
138-
}
139-
140-
fn versions_received(&mut self, versions: Vec<u16>) -> Result<u16, LightningError> {
141-
self.state = self.state.versions_received(versions)?;
142-
143-
match self.state {
144-
InboundJITChannelState::MenuRequested { version } => Ok(version),
145-
_ => Err(LightningError {
146-
action: ErrorAction::IgnoreAndLog(Level::Error),
147-
err: "impossible state transition".to_string(),
148-
}),
106+
config: InboundJITChannelConfig { user_id, payment_size_msat },
107+
state: InboundJITChannelState::MenuRequested,
149108
}
150109
}
151110

@@ -154,11 +113,11 @@ impl InboundJITChannel {
154113
Ok(())
155114
}
156115

157-
fn opening_fee_params_selected(&mut self) -> Result<u16, LightningError> {
116+
fn opening_fee_params_selected(&mut self) -> Result<(), LightningError> {
158117
self.state = self.state.opening_fee_params_selected()?;
159118

160119
match self.state {
161-
InboundJITChannelState::BuyRequested { version } => Ok(version),
120+
InboundJITChannelState::BuyRequested => Ok(()),
162121
_ => Err(LightningError {
163122
action: ErrorAction::IgnoreAndLog(Level::Error),
164123
err: "impossible state transition".to_string(),
@@ -247,8 +206,7 @@ where
247206
token: Option<String>, user_channel_id: u128,
248207
) {
249208
let jit_channel_id = self.generate_jit_channel_id();
250-
let channel =
251-
InboundJITChannel::new(jit_channel_id, user_channel_id, payment_size_msat, token);
209+
let channel = InboundJITChannel::new(user_channel_id, payment_size_msat);
252210

253211
let mut outer_state_lock = self.per_peer_state.write().unwrap();
254212
let inner_state_lock =
@@ -261,7 +219,7 @@ where
261219

262220
self.pending_messages.enqueue(
263221
&counterparty_node_id,
264-
LSPS2Message::Request(request_id, LSPS2Request::GetVersions(GetVersionsRequest {}))
222+
LSPS2Message::Request(request_id, LSPS2Request::GetInfo(GetInfoRequest { token }))
265223
.into(),
266224
);
267225
}
@@ -284,8 +242,8 @@ where
284242
if let Some(jit_channel) =
285243
peer_state.inbound_channels_by_id.get_mut(&jit_channel_id)
286244
{
287-
let version = match jit_channel.opening_fee_params_selected() {
288-
Ok(version) => version,
245+
match jit_channel.opening_fee_params_selected() {
246+
Ok(()) => (),
289247
Err(e) => {
290248
peer_state.remove_inbound_channel(jit_channel_id);
291249
return Err(APIError::APIMisuseError { err: e.err });
@@ -300,11 +258,7 @@ where
300258
&counterparty_node_id,
301259
LSPS2Message::Request(
302260
request_id,
303-
LSPS2Request::Buy(BuyRequest {
304-
version,
305-
opening_fee_params,
306-
payment_size_msat,
307-
}),
261+
LSPS2Request::Buy(BuyRequest { opening_fee_params, payment_size_msat }),
308262
)
309263
.into(),
310264
);
@@ -331,70 +285,6 @@ where
331285
u128::from_be_bytes(id_bytes)
332286
}
333287

334-
fn handle_get_versions_response(
335-
&self, request_id: RequestId, counterparty_node_id: &PublicKey, result: GetVersionsResponse,
336-
) -> Result<(), LightningError> {
337-
let outer_state_lock = self.per_peer_state.read().unwrap();
338-
match outer_state_lock.get(counterparty_node_id) {
339-
Some(inner_state_lock) => {
340-
let mut peer_state = inner_state_lock.lock().unwrap();
341-
342-
let jit_channel_id =
343-
peer_state.request_to_cid.remove(&request_id).ok_or(LightningError {
344-
err: format!(
345-
"Received get_versions response for an unknown request: {:?}",
346-
request_id
347-
),
348-
action: ErrorAction::IgnoreAndLog(Level::Info),
349-
})?;
350-
351-
let jit_channel = peer_state
352-
.inbound_channels_by_id
353-
.get_mut(&jit_channel_id)
354-
.ok_or(LightningError {
355-
err: format!(
356-
"Received get_versions response for an unknown channel: {:?}",
357-
jit_channel_id,
358-
),
359-
action: ErrorAction::IgnoreAndLog(Level::Info),
360-
})?;
361-
362-
let token = jit_channel.config.token.clone();
363-
364-
let version = match jit_channel.versions_received(result.versions) {
365-
Ok(version) => version,
366-
Err(e) => {
367-
peer_state.remove_inbound_channel(jit_channel_id);
368-
return Err(e);
369-
}
370-
};
371-
372-
let request_id = crate::utils::generate_request_id(&self.entropy_source);
373-
peer_state.insert_request(request_id.clone(), jit_channel_id);
374-
375-
self.pending_messages.enqueue(
376-
counterparty_node_id,
377-
LSPS2Message::Request(
378-
request_id,
379-
LSPS2Request::GetInfo(GetInfoRequest { version, token }),
380-
)
381-
.into(),
382-
);
383-
}
384-
None => {
385-
return Err(LightningError {
386-
err: format!(
387-
"Received get_versions response from unknown peer: {:?}",
388-
counterparty_node_id
389-
),
390-
action: ErrorAction::IgnoreAndLog(Level::Info),
391-
})
392-
}
393-
}
394-
395-
Ok(())
396-
}
397-
398288
fn handle_get_info_response(
399289
&self, request_id: RequestId, counterparty_node_id: &PublicKey, result: GetInfoResponse,
400290
) -> Result<(), LightningError> {
@@ -602,9 +492,6 @@ where
602492
) -> Result<(), LightningError> {
603493
match message {
604494
LSPS2Message::Response(request_id, response) => match response {
605-
LSPS2Response::GetVersions(result) => {
606-
self.handle_get_versions_response(request_id, counterparty_node_id, result)
607-
}
608495
LSPS2Response::GetInfo(result) => {
609496
self.handle_get_info_response(request_id, counterparty_node_id, result)
610497
}

src/lsps2/event.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,6 @@ pub enum LSPS2ServiceEvent {
8787
request_id: RequestId,
8888
/// The node id of the client making the information request.
8989
counterparty_node_id: PublicKey,
90-
/// The protocol version they would like to use.
91-
version: u16,
9290
/// An optional token that can be used as an API key, coupon code, etc.
9391
token: Option<String>,
9492
},
@@ -109,8 +107,6 @@ pub enum LSPS2ServiceEvent {
109107
request_id: RequestId,
110108
/// The client node id that is making this request.
111109
counterparty_node_id: PublicKey,
112-
/// The version of the protocol they would like to use.
113-
version: u16,
114110
/// The channel parameters they have selected.
115111
opening_fee_params: OpeningFeeParams,
116112
/// The size of the initial payment they would like to receive.

0 commit comments

Comments
 (0)