@@ -241,6 +241,50 @@ func (s *swapClientServer) Monitor(in *looprpc.MonitorRequest,
241
241
}
242
242
}
243
243
244
+ // ListSwaps returns a list of all currently known swaps and their current
245
+ // status.
246
+ func (s * swapClientServer ) ListSwaps (_ context.Context ,
247
+ _ * looprpc.ListSwapsRequest ) (* looprpc.ListSwapsResponse , error ) {
248
+
249
+ var (
250
+ rpcSwaps = make ([]* looprpc.SwapStatus , len (s .swaps ))
251
+ idx = 0
252
+ err error
253
+ )
254
+
255
+ // We can just use the server's in-memory cache as that contains the
256
+ // most up-to-date state including temporary failures which aren't
257
+ // persisted to disk. The swaps field is a map, that's why we need an
258
+ // additional index.
259
+ for _ , swp := range s .swaps {
260
+ swp := swp
261
+ rpcSwaps [idx ], err = s .marshallSwap (& swp )
262
+ if err != nil {
263
+ return nil , err
264
+ }
265
+ idx ++
266
+ }
267
+ return & looprpc.ListSwapsResponse {Swaps : rpcSwaps }, nil
268
+ }
269
+
270
+ // SwapInfo returns all known details about a single swap.
271
+ func (s * swapClientServer ) SwapInfo (_ context.Context ,
272
+ req * looprpc.SwapInfoRequest ) (* looprpc.SwapStatus , error ) {
273
+
274
+ swapHash , err := lntypes .MakeHash (req .Id )
275
+ if err != nil {
276
+ return nil , fmt .Errorf ("error parsing swap hash: %v" , err )
277
+ }
278
+
279
+ // Just return the server's in-memory cache here too as we also want to
280
+ // return temporary failures to the client.
281
+ swp , ok := s .swaps [swapHash ]
282
+ if ! ok {
283
+ return nil , fmt .Errorf ("swap with hash %s not found" , req .Id )
284
+ }
285
+ return s .marshallSwap (& swp )
286
+ }
287
+
244
288
// LoopOutTerms returns the terms that the server enforces for loop out swaps.
245
289
func (s * swapClientServer ) LoopOutTerms (ctx context.Context ,
246
290
req * looprpc.TermsRequest ) (* looprpc.TermsResponse , error ) {
0 commit comments