tests: test reproduce #8863 [ Neated and added xfail -- RR ]
What changed, and why it matters
This commit only adds a new test case to the project's test suite. It does not change any production code. The test is marked as expected to fail (xfail) and is intended to reproduce a previously reported issue (#8863) about opening dual-funded channels when fee estimates are unavailable. There is no security fix or vulnerability being introduced in this diff.
No action required; this is a test-only commit. Monitor the linked issue #8863 and any follow-up commits that actually modify channel-opening or fee-estimation logic.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The diff adds a single pytest test function, test_opening_dualfund_with_unknown_feerates, to tests/test_opening.py. The test configures two nodes with ignore-fee-limits, feerates=None, dev-no-fake-fees=True, and experimental-dual-fund, then attempts a dual-funded channel open when fee estimation is unavailable. It is decorated with @pytest.mark.xfail(strict=True), meaning it documents a known failing scenario. No library, protocol, or node logic is modified.
Changed components
tests/test_opening.pyInspect captured patch +29 / −0
diff --git a/tests/test_opening.py b/tests/test_opening.py
index 13863df4..fc7d406a 100644
--- a/tests/test_opening.py
+++ b/tests/test_opening.py
@@ -13,6 +13,35 @@ import unittest
import time
+@pytest.mark.xfail(strict=True)
+@unittest.skipIf(TEST_NETWORK != 'regtest', "requires regtest")
+def test_opening_dualfund_with_unknown_feerates(node_factory, bitcoind):
+ """
+ Test dualfund openchannel when feerates are unknown (like on signet/testnet with empty mempool).
+ """
+ opts = {
+ 'ignore-fee-limits': True,
+ 'feerates': None,
+ 'dev-no-fake-fees': True,
+ 'experimental-dual-fund': None
+ }
+
+ l1, l2 = node_factory.get_nodes(2, opts=opts)
+
+ l1.fundwallet(FUNDAMOUNT)
+
+ # Connect peers
+ l1.rpc.connect(l2.info['id'], 'localhost', l2.port)
+
+ # Verify fee estimation is failing
+ l1.daemon.wait_for_log('Unable to estimate any fees')
+ l2.daemon.wait_for_log('Unable to estimate any fees')
+
+ # Open channel l1 <-> l2
+ l1.rpc.fundchannel(l2.info['id'], 100000, feerate='253perkw', minconf=0)['txid']
+ l2.rpc.listpeerchannels(l1.info['id'])['channels']
+
+
def find_next_feerate(node, peer):
chan = only_one(node.rpc.listpeerchannels(peer.info['id'])['channels'])
return chan['next_feerate']
Why this scored 12/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.