forked from ElementsProject/lightning
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest_splicing_insane.py
95 lines (70 loc) · 2.65 KB
/
test_splicing_insane.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
from fixtures import * # noqa: F401,F403
from utils import TEST_NETWORK
import pytest
import unittest
def make_pending_splice(node_factory):
l1, l2 = node_factory.line_graph(2, fundamount=1000000, wait_for_announce=True, opts={'experimental-splicing': None, 'may_reconnect': True})
chan_id = l1.get_channel_id(l2)
funds_result = l1.rpc.fundpsbt("109000sat", "slow", 166, excess_as_change=True)
result = l1.rpc.splice_init(chan_id, 100000, funds_result['psbt'])
result = l1.rpc.splice_update(chan_id, result['psbt'])
result = l1.rpc.signpsbt(result['psbt'])
result = l1.rpc.splice_signed(chan_id, result['signed_psbt'])
return [l1, l2]
def wait_for_confirm(l1, l2):
l2.daemon.wait_for_log(r'CHANNELD_AWAITING_SPLICE to CHANNELD_NORMAL')
l1.daemon.wait_for_log(r'CHANNELD_AWAITING_SPLICE to CHANNELD_NORMAL')
def confirm(bitcoind):
bitcoind.generate_block(6, wait_for_mempool=1)
def confirm_and_wait(l1, l2, bitcoind):
confirm(bitcoind)
wait_for_confirm(l1, l2)
def confirm_funding_not_spent(nodes):
for node in nodes:
assert not node.daemon.is_in_log("Funding transaction spent")
assert node.db_query("SELECT count(*) as c FROM channeltxs;")[0]['c'] == 0
def wait_for_restart(l1, l2):
l1.daemon.wait_for_log(r'peer_in WIRE_CHANNEL_REESTABLISH')
l2.daemon.wait_for_log(r'peer_in WIRE_CHANNEL_REESTABLISH')
@pytest.mark.openchannel('v1')
@pytest.mark.openchannel('v2')
@unittest.skipIf(TEST_NETWORK != 'regtest', 'elementsd doesnt yet support PSBT features we need')
def test_splice_insane(node_factory, bitcoind):
nodes = []
l1, l2 = make_pending_splice(node_factory)
l2.restart()
wait_for_restart(l1, l2)
confirm_and_wait(l1, l2, bitcoind)
nodes.append(l1)
nodes.append(l2)
l1, l2 = make_pending_splice(node_factory)
l1.restart()
wait_for_restart(l1, l2)
confirm_and_wait(l1, l2, bitcoind)
nodes.append(l1)
nodes.append(l2)
l1, l2 = make_pending_splice(node_factory)
l1.restart()
wait_for_restart(l1, l2)
confirm_and_wait(l1, l2, bitcoind)
nodes.append(l1)
nodes.append(l2)
l1, l2 = make_pending_splice(node_factory)
l2.restart()
wait_for_restart(l1, l2)
confirm_and_wait(l1, l2, bitcoind)
nodes.append(l1)
nodes.append(l2)
l1, l2 = make_pending_splice(node_factory)
confirm_and_wait(l1, l2, bitcoind)
l1.restart()
wait_for_restart(l1, l2)
nodes.append(l1)
nodes.append(l2)
l1, l2 = make_pending_splice(node_factory)
confirm_and_wait(l1, l2, bitcoind)
l2.restart()
wait_for_restart(l1, l2)
nodes.append(l1)
nodes.append(l2)
confirm_funding_not_spent(nodes)