@@ -3,12 +3,16 @@ use crate::transport::msgs::{LSPSMessage, RawLSPSMessage, LSPS_MESSAGE_TYPE};
3
3
use crate :: transport:: protocol:: LSPS0MessageHandler ;
4
4
5
5
use bitcoin:: secp256k1:: PublicKey ;
6
+ use lightning:: chain;
7
+ use lightning:: chain:: chaininterface:: { BroadcasterInterface , FeeEstimator } ;
8
+ use lightning:: ln:: channelmanager:: ChannelManager ;
6
9
use lightning:: ln:: features:: { InitFeatures , NodeFeatures } ;
7
10
use lightning:: ln:: msgs:: { ErrorAction , LightningError } ;
8
11
use lightning:: ln:: peer_handler:: CustomMessageHandler ;
9
12
use lightning:: ln:: wire:: CustomMessageReader ;
10
- use lightning:: sign:: EntropySource ;
11
- use lightning:: util:: logger:: Level ;
13
+ use lightning:: routing:: router:: Router ;
14
+ use lightning:: sign:: { EntropySource , NodeSigner , SignerProvider } ;
15
+ use lightning:: util:: logger:: { Level , Logger } ;
12
16
use lightning:: util:: ser:: Readable ;
13
17
use std:: collections:: HashMap ;
14
18
use std:: convert:: TryFrom ;
@@ -41,25 +45,53 @@ pub struct LiquidityProviderConfig;
41
45
///
42
46
/// Should be used as a [`CustomMessageHandler`] for your
43
47
/// [`lightning::ln::peer_handler::PeerManager`]'s [`lightning::ln::peer_handler::MessageHandler`].
44
- pub struct LiquidityManager < ES : Deref >
45
- where
48
+ pub struct LiquidityManager <
49
+ ES : Deref ,
50
+ M : Deref ,
51
+ T : Deref ,
52
+ F : Deref ,
53
+ R : Deref ,
54
+ SP : Deref ,
55
+ L : Deref ,
56
+ NS : Deref ,
57
+ > where
46
58
ES :: Target : EntropySource ,
59
+ M :: Target : chain:: Watch < <SP :: Target as SignerProvider >:: Signer > ,
60
+ T :: Target : BroadcasterInterface ,
61
+ F :: Target : FeeEstimator ,
62
+ R :: Target : Router ,
63
+ SP :: Target : SignerProvider ,
64
+ L :: Target : Logger ,
65
+ NS :: Target : NodeSigner ,
47
66
{
48
67
pending_messages : Arc < Mutex < Vec < ( PublicKey , LSPSMessage ) > > > ,
49
68
pending_events : Arc < EventQueue > ,
50
69
request_id_to_method_map : Mutex < HashMap < String , String > > ,
51
70
lsps0_message_handler : LSPS0MessageHandler < ES > ,
52
71
provider_config : Option < LiquidityProviderConfig > ,
72
+ channel_manager : Arc < ChannelManager < M , T , ES , NS , SP , F , R , L > > ,
53
73
}
54
74
55
- impl < ES : Deref > LiquidityManager < ES >
75
+ impl < ES : Deref , M : Deref , T : Deref , F : Deref , R : Deref , SP : Deref , L : Deref , NS : Deref >
76
+ LiquidityManager < ES , M , T , F , R , SP , L , NS >
56
77
where
57
78
ES :: Target : EntropySource ,
79
+ M :: Target : chain:: Watch < <SP :: Target as SignerProvider >:: Signer > ,
80
+ T :: Target : BroadcasterInterface ,
81
+ F :: Target : FeeEstimator ,
82
+ R :: Target : Router ,
83
+ SP :: Target : SignerProvider ,
84
+ L :: Target : Logger ,
85
+ NS :: Target : NodeSigner ,
58
86
{
59
87
/// Constructor for the LiquidityManager
60
88
///
61
89
/// Sets up the required protocol message handlers based on the given [`LiquidityProviderConfig`].
62
- pub fn new ( entropy_source : ES , provider_config : Option < LiquidityProviderConfig > ) -> Self {
90
+ pub fn new (
91
+ entropy_source : ES , provider_config : Option < LiquidityProviderConfig > ,
92
+ channel_manager : Arc < ChannelManager < M , T , ES , NS , SP , F , R , L > > ,
93
+ ) -> Self
94
+ where {
63
95
let pending_messages = Arc :: new ( Mutex :: new ( vec ! [ ] ) ) ;
64
96
65
97
let lsps0_message_handler =
71
103
request_id_to_method_map : Mutex :: new ( HashMap :: new ( ) ) ,
72
104
lsps0_message_handler,
73
105
provider_config,
106
+ channel_manager,
74
107
}
75
108
}
76
109
@@ -108,14 +141,22 @@ where
108
141
}
109
142
}
110
143
111
- impl < ES : Deref > CustomMessageReader for LiquidityManager < ES >
144
+ impl < ES : Deref , M : Deref , T : Deref , F : Deref , R : Deref , SP : Deref , L : Deref , NS : Deref >
145
+ CustomMessageReader for LiquidityManager < ES , M , T , F , R , SP , L , NS >
112
146
where
113
147
ES :: Target : EntropySource ,
148
+ M :: Target : chain:: Watch < <SP :: Target as SignerProvider >:: Signer > ,
149
+ T :: Target : BroadcasterInterface ,
150
+ F :: Target : FeeEstimator ,
151
+ R :: Target : Router ,
152
+ SP :: Target : SignerProvider ,
153
+ L :: Target : Logger ,
154
+ NS :: Target : NodeSigner ,
114
155
{
115
156
type CustomMessage = RawLSPSMessage ;
116
157
117
- fn read < R : io:: Read > (
118
- & self , message_type : u16 , buffer : & mut R ,
158
+ fn read < RD : io:: Read > (
159
+ & self , message_type : u16 , buffer : & mut RD ,
119
160
) -> Result < Option < Self :: CustomMessage > , lightning:: ln:: msgs:: DecodeError > {
120
161
match message_type {
121
162
LSPS_MESSAGE_TYPE => Ok ( Some ( RawLSPSMessage :: read ( buffer) ?) ) ,
@@ -124,9 +165,17 @@ where
124
165
}
125
166
}
126
167
127
- impl < ES : Deref > CustomMessageHandler for LiquidityManager < ES >
168
+ impl < ES : Deref , M : Deref , T : Deref , F : Deref , R : Deref , SP : Deref , L : Deref , NS : Deref >
169
+ CustomMessageHandler for LiquidityManager < ES , M , T , F , R , SP , L , NS >
128
170
where
129
171
ES :: Target : EntropySource ,
172
+ M :: Target : chain:: Watch < <SP :: Target as SignerProvider >:: Signer > ,
173
+ T :: Target : BroadcasterInterface ,
174
+ F :: Target : FeeEstimator ,
175
+ R :: Target : Router ,
176
+ SP :: Target : SignerProvider ,
177
+ L :: Target : Logger ,
178
+ NS :: Target : NodeSigner ,
130
179
{
131
180
fn handle_custom_message (
132
181
& self , msg : Self :: CustomMessage , sender_node_id : & PublicKey ,
0 commit comments