MCPcopy Create free account
hub / github.com/ElementsProject/lightning / closing_negotiation_step

Function closing_negotiation_step

tests/test_closing.py:336–411  ·  view source on GitHub ↗
(node_factory, bitcoind, chainparams, opts)

Source from the content-addressed store, hash-verified

334
335
336def closing_negotiation_step(node_factory, bitcoind, chainparams, opts):
337 def feerate_for(target, minimum=0, maximum=10000000):
338 """Binary search to find feerate"""
339 assert minimum != maximum
340 mid = (minimum + maximum) // 2
341 mid_fee = closing_fee(mid, 1)
342 if mid_fee > target:
343 return feerate_for(target, minimum, mid)
344 elif mid_fee < target:
345 return feerate_for(target, mid, maximum)
346 else:
347 return mid
348
349 orate = feerate_for(21000) # closing fee negotiation starts at 21000
350 prate = feerate_for(20000) # closing fee negotiation starts at 20000
351 opener, peer = node_factory.line_graph(2, opts=[{'feerates': (orate, orate, orate, orate)},
352 {'feerates': (prate, prate, prate, prate)}])
353
354 opener_id = opener.info['id']
355 peer_id = peer.info['id']
356
357 assert bitcoind.rpc.getmempoolinfo()['size'] == 0
358
359 if opts['close_initiated_by'] == 'opener':
360 opener.rpc.close(peer_id=peer_id, fee_negotiation_step=opts['fee_negotiation_step'])
361 else:
362 assert opts['close_initiated_by'] == 'peer'
363 peer.rpc.close(peer_id=opener_id, fee_negotiation_step=opts['fee_negotiation_step'])
364
365 # Get the proclaimed closing fee from the two nodes' statuses
366
367 status_agreed_regex = re.compile("agreed on a closing fee of ([0-9]+) satoshi")
368
369 # [fee_from_opener_status, fee_from_peer_status]
370 fees_from_status = [None, None]
371
372 def get_fee_from_status(node, peer_id, i):
373 nonlocal fees_from_status
374 peer = only_one(node.rpc.listpeers(peer_id)['peers'])
375 channel = only_one(peer['channels'])
376 status = channel['status'][0]
377
378 m = status_agreed_regex.search(status)
379 if not m:
380 return False
381
382 fees_from_status[i] = int(m.group(1))
383 return True
384
385 wait_for(lambda: get_fee_from_status(opener, peer_id, 0))
386 wait_for(lambda: get_fee_from_status(peer, opener_id, 1))
387
388 assert opts['expected_close_fee'] == fees_from_status[0]
389 assert opts['expected_close_fee'] == fees_from_status[1]
390
391 # Get the closing transaction from the bitcoind mempool and get its fee
392
393 mempool = None

Calls 6

wait_forFunction · 0.90
feerate_forFunction · 0.85
get_fee_from_statusFunction · 0.85
line_graphMethod · 0.80
compileMethod · 0.80
closeMethod · 0.45

Tested by

no test coverage detected