@@ -13,7 +13,7 @@ use crate::events::{Event, EventQueue};
1313use crate :: lsps0:: msgs:: { ProtocolMessageHandler , RequestId , ResponseError } ;
1414use crate :: lsps2:: event:: LSPS2ClientEvent ;
1515use crate :: message_queue:: MessageQueue ;
16- use crate :: prelude:: { HashMap , String , ToString , Vec } ;
16+ use crate :: prelude:: { HashMap , String , ToString } ;
1717use crate :: sync:: { Arc , Mutex , RwLock } ;
1818
1919use lightning:: ln:: msgs:: { ErrorAction , LightningError } ;
@@ -26,17 +26,14 @@ use bitcoin::secp256k1::PublicKey;
2626use core:: ops:: Deref ;
2727
2828use 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 ) ]
3635pub struct LSPS2ClientConfig { }
3736
38- const SUPPORTED_SPEC_VERSIONS : [ u16 ; 1 ] = [ 1 ] ;
39-
4037struct ChannelStateError ( String ) ;
4138
4239impl From < ChannelStateError > for LightningError {
@@ -47,46 +44,22 @@ impl From<ChannelStateError> for LightningError {
4744
4845struct InboundJITChannelConfig {
4946 pub user_id : u128 ,
50- pub token : Option < String > ,
5147 pub payment_size_msat : Option < u64 > ,
5248}
5349
5450#[ derive( PartialEq , Debug ) ]
5551enum 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
6358impl 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
12598struct InboundJITChannel {
126- id : u128 ,
12799 state : InboundJITChannelState ,
128100 config : InboundJITChannelConfig ,
129101}
130102
131103impl 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 }
0 commit comments