mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-19 07:04:22 +01:00
pytest: Test the mindepth customizations of fundchannel and hook
Just test that we can customize, and we'll add mindepth=0 support in the next couple of commits.
This commit is contained in:
34
tests/plugins/zeroconf-selective.py
Executable file
34
tests/plugins/zeroconf-selective.py
Executable file
@@ -0,0 +1,34 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Use the openchannel hook to selectively opt-into zeroconf
|
||||
"""
|
||||
|
||||
from pyln.client import Plugin
|
||||
|
||||
plugin = Plugin()
|
||||
|
||||
|
||||
@plugin.hook('openchannel')
|
||||
def on_openchannel(openchannel, plugin, **kwargs):
|
||||
plugin.log(repr(openchannel))
|
||||
mindepth = int(plugin.options['zeroconf-mindepth']['value'])
|
||||
|
||||
if openchannel['id'] == plugin.options['zeroconf-allow']['value']:
|
||||
plugin.log(f"This peer is in the zeroconf allowlist, setting mindepth={mindepth}")
|
||||
return {'result': 'continue', 'mindepth': mindepth}
|
||||
else:
|
||||
return {'result': 'continue'}
|
||||
|
||||
|
||||
plugin.add_option(
|
||||
'zeroconf-allow',
|
||||
'A node_id to allow zeroconf channels from',
|
||||
'03864ef025fde8fb587d989186ce6a4a186895ee44a926bfc370e2c366597a3f8f'
|
||||
)
|
||||
|
||||
plugin.add_option(
|
||||
'zeroconf-mindepth',
|
||||
0,
|
||||
'Number of confirmations to require from allowlisted peers',
|
||||
)
|
||||
|
||||
plugin.run()
|
||||
@@ -5,6 +5,7 @@ from utils import (
|
||||
only_one, wait_for, sync_blockheight, first_channel_id, calc_lease_fee
|
||||
)
|
||||
|
||||
from pathlib import Path
|
||||
import pytest
|
||||
import re
|
||||
import unittest
|
||||
@@ -1187,3 +1188,49 @@ def test_funder_contribution_limits(node_factory, bitcoind):
|
||||
l1.fundchannel(l3, 10**7)
|
||||
assert l3.daemon.is_in_log('Policy .* returned funding amount of 50000sat')
|
||||
assert l3.daemon.is_in_log(r'calling `signpsbt` .* 7 inputs')
|
||||
|
||||
|
||||
def test_zeroconf_mindepth(bitcoind, node_factory):
|
||||
"""Check that funder/fundee can customize mindepth.
|
||||
|
||||
Zeroconf will use this to set the mindepth to 0, which coupled
|
||||
with an artificial depth=0 event that will result in an immediate
|
||||
`channel_ready` being sent.
|
||||
|
||||
"""
|
||||
plugin_path = Path(__file__).parent / "plugins" / "zeroconf-selective.py"
|
||||
|
||||
l1, l2 = node_factory.get_nodes(2, opts=[
|
||||
{},
|
||||
{
|
||||
'plugin': str(plugin_path),
|
||||
'zeroconf-allow': '0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518',
|
||||
'zeroconf-mindepth': '2',
|
||||
},
|
||||
])
|
||||
|
||||
# Try to open a mindepth=6 channel
|
||||
l1.fundwallet(10**6)
|
||||
|
||||
l1.connect(l2)
|
||||
assert (int(l1.rpc.listpeers()['peers'][0]['features'], 16) >> 50) & 0x02 != 0
|
||||
|
||||
# Now start the negotiation, l1 should have negotiated zeroconf,
|
||||
# and use their own mindepth=6, while l2 uses mindepth=2 from the
|
||||
# plugin
|
||||
l1.rpc.fundchannel(l2.info['id'], 'all', mindepth=6)
|
||||
|
||||
assert l1.db.query('SELECT minimum_depth FROM channels') == [{'minimum_depth': 6}]
|
||||
assert l2.db.query('SELECT minimum_depth FROM channels') == [{'minimum_depth': 2}]
|
||||
|
||||
bitcoind.generate_block(2, wait_for_mempool=1) # Confirm on the l2 side.
|
||||
l2.daemon.wait_for_log(r'peer_out WIRE_FUNDING_LOCKED')
|
||||
# l1 should not be sending funding_locked/channel_ready yet, it is
|
||||
# configured to wait for 6 confirmations.
|
||||
assert not l1.daemon.is_in_log(r'peer_out WIRE_FUNDING_LOCKED')
|
||||
|
||||
bitcoind.generate_block(4) # Confirm on the l2 side.
|
||||
l1.daemon.wait_for_log(r'peer_out WIRE_FUNDING_LOCKED')
|
||||
|
||||
wait_for(lambda: l1.rpc.listpeers()['peers'][0]['channels'][0]['state'] == "CHANNELD_NORMAL")
|
||||
wait_for(lambda: l2.rpc.listpeers()['peers'][0]['channels'][0]['state'] == "CHANNELD_NORMAL")
|
||||
|
||||
Reference in New Issue
Block a user