@@ -42,16 +42,15 @@ def gen(n):
42
42
ln_addrs = []
43
43
44
44
def get_ln_addr (self , ln ):
45
- address = None
46
45
while True :
47
- success , address = ln . newaddress ()
48
- if success :
46
+ try :
47
+ address = ln . newaddress ()
49
48
ln_addrs .append (address )
50
49
self .log .info (f"Got wallet address { address } from { ln .name } " )
51
50
break
52
- else :
51
+ except Exception as e :
53
52
self .log .info (
54
- f"Couldn't get wallet address from { ln .name } , retrying in 5 seconds..."
53
+ f"Couldn't get wallet address from { ln .name } because { e } , retrying in 5 seconds..."
55
54
)
56
55
sleep (5 )
57
56
@@ -86,13 +85,18 @@ def get_ln_addr(self, ln):
86
85
)
87
86
88
87
def confirm_ln_balance (self , ln ):
89
- bal = 0
90
88
while True :
91
- bal = ln .walletbalance ()
92
- if bal >= (split * 100000000 ):
93
- self .log .info (f"LN node { ln .name } confirmed funds" )
94
- break
95
- sleep (1 )
89
+ try :
90
+ bal = ln .walletbalance ()
91
+ if bal >= (split * 100000000 ):
92
+ self .log .info (f"LN node { ln .name } confirmed funds" )
93
+ break
94
+ else :
95
+ self .log .info (f"Got balance from { ln .name } but less than expected, retrying in 5 seconds..." )
96
+ sleep (5 )
97
+ except Exception as e :
98
+ self .log .info (f"Couldn't get balance from { ln .name } because { e } , retrying in 5 seconds..." )
99
+ sleep (5 )
96
100
97
101
fund_threads = [
98
102
threading .Thread (target = confirm_ln_balance , args = (self , ln )) for ln in self .lns .values ()
@@ -110,14 +114,15 @@ def confirm_ln_balance(self, ln):
110
114
ln_uris = {}
111
115
112
116
def get_ln_uri (self , ln ):
113
- uri = None
114
117
while True :
115
- uri = ln . uri ()
116
- if uri :
118
+ try :
119
+ uri = ln . uri ()
117
120
ln_uris [ln .name ] = uri
118
121
self .log .info (f"LN node { ln .name } has URI { uri } " )
119
122
break
120
- sleep (1 )
123
+ except Exception as e :
124
+ self .log .info (f"Couldn't get URI from { ln .name } because { e } , retrying in 5 seconds..." )
125
+ sleep (5 )
121
126
122
127
uri_threads = [
123
128
threading .Thread (target = get_ln_uri , args = (self , ln )) for ln in self .lns .values ()
@@ -150,28 +155,27 @@ def get_ln_uri(self, ln):
150
155
151
156
def connect_ln (self , pair ):
152
157
while True :
153
- res = pair [0 ].connect (ln_uris [pair [1 ].name ])
154
- if res == {}:
155
- self .log .info (f"Connected LN nodes { pair [0 ].name } -> { pair [1 ].name } " )
156
- break
157
- if "message" in res :
158
- if "already connected" in res ["message" ]:
159
- self .log .info (
160
- f"Already connected LN nodes { pair [0 ].name } -> { pair [1 ].name } "
161
- )
158
+ try :
159
+ res = pair [0 ].connect (ln_uris [pair [1 ].name ])
160
+ if res == {}:
161
+ self .log .info (f"Connected LN nodes { pair [0 ].name } -> { pair [1 ].name } " )
162
162
break
163
- if "process of starting" in res ["message" ]:
164
- self .log .info (
165
- f"{ pair [0 ].name } not ready for connections yet, wait and retry..."
166
- )
167
- sleep (1 )
168
- else :
169
- self .log .error (
170
- f"Unexpected response attempting to connect { pair [0 ].name } -> { pair [1 ].name } :\n { res } \n ABORTING"
171
- )
172
- raise Exception (
173
- f"Unable to connect { pair [0 ].name } -> { pair [1 ].name } :\n { res } "
174
- )
163
+ if "message" in res :
164
+ if "already connected" in res ["message" ]:
165
+ self .log .info (
166
+ f"Already connected LN nodes { pair [0 ].name } -> { pair [1 ].name } "
167
+ )
168
+ break
169
+ if "process of starting" in res ["message" ]:
170
+ self .log .info (
171
+ f"{ pair [0 ].name } not ready for connections yet, wait and retry..."
172
+ )
173
+ sleep (5 )
174
+ else :
175
+ raise Exception (res )
176
+ except Exception as e :
177
+ self .log .info (f"Couldn't connect { pair [0 ].name } -> { pair [1 ].name } because { e } , retrying in 5 seconds..." )
178
+ sleep (5 )
175
179
176
180
p2p_threads = [
177
181
threading .Thread (target = connect_ln , args = (self , pair )) for pair in connections
@@ -217,26 +221,30 @@ def open_channel(self, ch, fee_rate):
217
221
self .log .info (
218
222
f"Sending channel open from { ch ['source' ]} -> { ch ['target' ]} with fee_rate={ fee_rate } "
219
223
)
220
- res = src .channel (
221
- pk = tgt_pk ,
222
- capacity = ch ["capacity" ],
223
- push_amt = ch ["push_amt" ],
224
- fee_rate = fee_rate ,
225
- )
226
- if res and "txid" in res :
227
- ch ["txid" ] = res ["txid" ]
228
- self .log .info (
229
- f"Channel open { ch ['source' ]} -> { ch ['target' ]} \n "
230
- + f"outpoint={ res ['outpoint' ]} \n "
231
- + f"expected channel id: { ch ['id' ]} "
232
- )
233
- else :
234
- ch ["txid" ] = "N/A"
235
- self .log .info (
236
- "Unexpected channel open response:\n "
237
- + f"From { ch ['source' ]} -> { ch ['target' ]} fee_rate={ fee_rate } \n "
238
- + f"{ res } "
239
- )
224
+ while True :
225
+ try :
226
+ res = src .channel (
227
+ pk = tgt_pk ,
228
+ capacity = ch ["capacity" ],
229
+ push_amt = ch ["push_amt" ],
230
+ fee_rate = fee_rate ,
231
+ )
232
+ ch ["txid" ] = res ["txid" ]
233
+ self .log .info (
234
+ f"Channel open { ch ['source' ]} -> { ch ['target' ]} \n "
235
+ + f"outpoint={ res ['outpoint' ]} \n "
236
+ + f"expected channel id: { ch ['id' ]} "
237
+ )
238
+ break
239
+ except Exception as e :
240
+ ch ["txid" ] = "N/A"
241
+ self .log .info (
242
+ "Couldn't open channel:\n "
243
+ + f"From { ch ['source' ]} -> { ch ['target' ]} fee_rate={ fee_rate } \n "
244
+ + f"{ e } \n "
245
+ + "Retrying in 5 seconds..."
246
+ )
247
+ sleep (5 )
240
248
241
249
channels = sorted (ch_by_block [target_block ], key = lambda ch : ch ["id" ]["index" ])
242
250
index = 0
@@ -279,20 +287,21 @@ def open_channel(self, ch, fee_rate):
279
287
280
288
def ln_all_chs (self , ln ):
281
289
expected = len (self .channels )
282
- attempts = 0
283
290
actual = 0
284
291
while actual != expected :
285
- actual = len (ln .graph ()["edges" ])
286
- if attempts > 10 :
287
- break
288
- attempts += 1
289
- sleep (5 )
290
- if actual == expected :
291
- self .log .info (f"LN { ln .name } has graph with all { expected } channels" )
292
- else :
293
- self .log .error (
294
- f"LN { ln .name } graph is INCOMPLETE - { actual } of { expected } channels"
295
- )
292
+ try :
293
+ actual = len (ln .graph ()["edges" ])
294
+ if actual == expected :
295
+ self .log .info (f"LN { ln .name } has graph with all { expected } channels" )
296
+ break
297
+ else :
298
+ self .log .info (
299
+ f"LN { ln .name } graph is incomplete - { actual } of { expected } channels, checking again in 5 seconds..."
300
+ )
301
+ sleep (5 )
302
+ except Exception as e :
303
+ self .log .info (f"Couldn't check graph from { ln .name } because { e } , retrying in 5 seconds..." )
304
+ sleep (5 )
296
305
297
306
ch_ann_threads = [
298
307
threading .Thread (target = ln_all_chs , args = (self , ln )) for ln in self .lns .values ()
@@ -315,12 +324,15 @@ def update_policy(self, ln, txid_hex, policy, capacity):
315
324
while res is None :
316
325
try :
317
326
res = ln .update (txid_hex , policy , capacity )
327
+ if len (res ["failed_updates" ]) != 0 :
328
+ self .log .info (
329
+ f" Failed updates: { res ['failed_updates' ]} \n txid: { txid_hex } \n policy:{ policy } \n retrying in 5 seconds..."
330
+ )
331
+ sleep (5 )
318
332
break
319
- except Exception :
320
- sleep (1 )
321
- assert len (res ["failed_updates" ]) == 0 , (
322
- f" Failed updates: { res ['failed_updates' ]} \n txid: { txid_hex } \n policy:{ policy } "
323
- )
333
+ except Exception as e :
334
+ self .log .info (f"Couldn't update channel policy for { ln .name } because { e } , retrying in 5 seconds..." )
335
+ sleep (5 )
324
336
325
337
update_threads = []
326
338
for ch in self .channels :
@@ -365,7 +377,13 @@ def policy_equal(pol1, pol2, capacity):
365
377
def matching_graph (self , expected , ln ):
366
378
done = False
367
379
while not done :
368
- actual = ln .graph ()["edges" ]
380
+ try :
381
+ actual = ln .graph ()["edges" ]
382
+ except Exception as e :
383
+ self .log .info (f"Couldn't get graph from { ln .name } because { e } , retrying in 5 seconds..." )
384
+ sleep (5 )
385
+ continue
386
+
369
387
self .log .debug (f"LN { ln .name } channel graph edges: { actual } " )
370
388
if len (actual ) > 0 :
371
389
done = True
0 commit comments