pytest: changed old_hsmsecret to default to false.
What changed, and why it matters
This commit only updates test files and test helpers to match a new default wallet-seed format. It does not change production code, does not fix a vulnerability, and has no direct security impact on running Core Lightning nodes.
No security action required. Treat as a normal test-maintenance commit. Reviewers may want to confirm that the new default is intentionally applied only to v25.12+ and that CI passes.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The commit flips the default of the old_hsmsecret flag in the Python test framework from True to False for nodes running v25.12 or later. Because BIP39-derived secrets produce different node IDs, addresses, runes, and deterministic test vectors, the patch updates hardcoded test expectations across ten test/plugin files. The only non-test change is in contrib/pyln-testing/pyln/testing/utils.py, which is still part of the testing harness, not the daemon. No cryptographic logic, network handling, or consensus code is modified.
Changed components
contrib/pyln-testing/pyln/testing/utils.pytests/plugins/channeld_fakenet.ctests/test_askrene.pytests/test_coinmoves.pytests/test_gossip.pytests/test_misc.pytests/test_opening.pytests/test_pay.pytests/test_runes.pytests/test_xpay.pyInspect captured patch +80 / −86
diff --git a/contrib/pyln-testing/pyln/testing/utils.py b/contrib/pyln-testing/pyln/testing/utils.py
index 2159ef8..ce2a100 100644
--- a/contrib/pyln-testing/pyln/testing/utils.py
+++ b/contrib/pyln-testing/pyln/testing/utils.py
@@ -724,13 +724,10 @@ class LightningD(TailableProc):
if not os.path.exists(os.path.join(lightning_dir, TEST_NETWORK)):
os.makedirs(os.path.join(lightning_dir, TEST_NETWORK))
- # Default: use old-timey hsm_secret.
+ # Default: use newfangled hsm_secret, except old versions.
if old_hsmsecret is None:
- old_hsmsecret = True
-
- # BIP 39 secrets were only added in v25.12.
- if old_hsmsecret is True:
- assert self.cln_version >= "v25.12"
+ # BIP 39 secrets were only added in v25.12.
+ old_hsmsecret = (self.cln_version < "v25.12")
if not random_hsm:
# Last 32-bytes of final part of dir -> seed.
diff --git a/tests/plugins/channeld_fakenet.c b/tests/plugins/channeld_fakenet.c
index c828167..7714b9d 100644
--- a/tests/plugins/channeld_fakenet.c
+++ b/tests/plugins/channeld_fakenet.c
@@ -15,6 +15,7 @@
#include <ccan/crypto/hkdf_sha256/hkdf_sha256.h>
#include <ccan/htable/htable_type.h>
#include <ccan/mem/mem.h>
+#include <ccan/str/hex/hex.h>
#include <ccan/tal/str/str.h>
#include <channeld/channeld_wiregen.h>
#include <channeld/full_channel.h>
@@ -257,19 +258,13 @@ static u8 *get_next_onion(const tal_t *ctx, const struct route_step *rs)
static struct node *make_peer_node(const tal_t *ctx)
{
struct node *n = tal(ctx, struct node);
- u32 salt = 0;
- struct secret hsm_secret;
struct pubkey pubkey;
- memset(&hsm_secret, 0, sizeof(hsm_secret));
- snprintf((char *)&hsm_secret, sizeof(hsm_secret),
- "lightning-2");
-
- /* This maps hsm_secret -> node privkey */
- hkdf_sha256(&n->p, sizeof(n->p),
- &salt, sizeof(salt),
- &hsm_secret, sizeof(hsm_secret),
- "nodeid", 6);
+ /* l2's secret key */
+ if (!hex_decode("0c633a7c17c701a0980158f5483035e01fa8bd091b47fadf2e86e589a9f93fca",
+ strlen("0c633a7c17c701a0980158f5483035e01fa8bd091b47fadf2e86e589a9f93fca"),
+ &n->p, sizeof(n->p)))
+ abort();
pubkey_from_privkey(&n->p, &pubkey);
node_id_from_pubkey(&n->id, &pubkey);
n->name = tal_fmt(n, "lightningd-2");
diff --git a/tests/test_askrene.py b/tests/test_askrene.py
index 9bfa5c2..d7babfb 100644
--- a/tests/test_askrene.py
+++ b/tests/test_askrene.py
@@ -1440,7 +1440,7 @@ def test_real_data(node_factory, bitcoind):
outfile = tempfile.NamedTemporaryFile(prefix='gossip-store-')
nodeids = subprocess.check_output(['devtools/gossmap-compress',
'decompress',
- '--node-map=3301=022d223620a359a47ff7f7ac447c85c46c923da53389221a0054c11c1e3ca31d59',
+ '--node-map=3301=033845802d25b4e074ccfd7cd8b339a41dc75bf9978a034800444b51d42b07799a',
'tests/data/gossip-store-2024-09-22.compressed',
outfile.name]).decode('utf-8').splitlines()
@@ -1559,7 +1559,7 @@ def test_real_biases(node_factory, bitcoind):
outfile = tempfile.NamedTemporaryFile(prefix='gossip-store-')
nodeids = subprocess.check_output(['devtools/gossmap-compress',
'decompress',
- '--node-map=3301=022d223620a359a47ff7f7ac447c85c46c923da53389221a0054c11c1e3ca31d59',
+ '--node-map=3301=033845802d25b4e074ccfd7cd8b339a41dc75bf9978a034800444b51d42b07799a',
'tests/data/gossip-store-2024-09-22.compressed',
outfile.name]).decode('utf-8').splitlines()
@@ -1678,7 +1678,7 @@ def test_askrene_fake_channeld(node_factory, bitcoind):
outfile = tempfile.NamedTemporaryFile(prefix='gossip-store-')
nodeids = subprocess.check_output(['devtools/gossmap-compress',
'decompress',
- '--node-map=3301=022d223620a359a47ff7f7ac447c85c46c923da53389221a0054c11c1e3ca31d59',
+ '--node-map=3301=033845802d25b4e074ccfd7cd8b339a41dc75bf9978a034800444b51d42b07799a',
'tests/data/gossip-store-2024-09-22.compressed',
outfile.name]).decode('utf-8').splitlines()
AMOUNT = 100_000_000
diff --git a/tests/test_coinmoves.py b/tests/test_coinmoves.py
index 210af3e..bcaa226 100644
--- a/tests/test_coinmoves.py
+++ b/tests/test_coinmoves.py
@@ -557,6 +557,8 @@ def test_coinmoves_unilateral_htlc_before_included(node_factory, bitcoind):
line = l1.daemon.is_in_log('Tracking output.*/OUTPUT_TO_THEM')
to_l2 = int(re.search(r'output [0-9a-f]{64}:([0-9]):', line).group(1))
+ # New format: ordering is channel_close, anchor, anchor, to_them
+ # With new format, anch_to_l1 comes before anch_to_l2 in the creation order
expected_chain1 += [{'account_id': fundchannel['channel_id'],
'blockheight': 104,
'credit_msat': 0,
@@ -575,7 +577,7 @@ def test_coinmoves_unilateral_htlc_before_included(node_factory, bitcoind):
'originating_account': fundchannel['channel_id'],
'output_msat': 330000,
'primary_tag': 'anchor',
- 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l2}"},
+ 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l1}"},
{'account_id': 'external',
'blockheight': 104,
'credit_msat': 330000,
@@ -584,7 +586,7 @@ def test_coinmoves_unilateral_htlc_before_included(node_factory, bitcoind):
'originating_account': fundchannel['channel_id'],
'output_msat': 330000,
'primary_tag': 'anchor',
- 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l1}"},
+ 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l2}"},
{'account_id': 'external',
'blockheight': 104,
'credit_msat': 50000000000,
@@ -594,6 +596,7 @@ def test_coinmoves_unilateral_htlc_before_included(node_factory, bitcoind):
'output_msat': 50000000000,
'primary_tag': 'to_them',
'utxo': f"{only_one(close_info['txids'])}:{to_l2}"}]
+ # For l2, anchors are also in the same order (anch_to_l1 before anch_to_l2)
expected_chain2 += [{'account_id': fundchannel['channel_id'],
'blockheight': 104,
'credit_msat': 0,
@@ -612,7 +615,7 @@ def test_coinmoves_unilateral_htlc_before_included(node_factory, bitcoind):
'originating_account': fundchannel['channel_id'],
'output_msat': 330000,
'primary_tag': 'anchor',
- 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l2}"},
+ 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l1}"},
{'account_id': 'external',
'blockheight': 104,
'credit_msat': 330000,
@@ -621,7 +624,7 @@ def test_coinmoves_unilateral_htlc_before_included(node_factory, bitcoind):
'originating_account': fundchannel['channel_id'],
'output_msat': 330000,
'primary_tag': 'anchor',
- 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l1}"},
+ 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l2}"},
{'account_id': 'external',
'blockheight': 104,
'credit_msat': 49965193000,
@@ -794,7 +797,7 @@ def test_coinmoves_unilateral_htlc_timeout(node_factory, bitcoind):
'originating_account': fundchannel['channel_id'],
'output_msat': 330000,
'primary_tag': 'anchor',
- 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l2}"},
+ 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l1}"},
{'account_id': 'external',
'blockheight': 104,
'credit_msat': 330000,
@@ -803,7 +806,7 @@ def test_coinmoves_unilateral_htlc_timeout(node_factory, bitcoind):
'originating_account': fundchannel['channel_id'],
'output_msat': 330000,
'primary_tag': 'anchor',
- 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l1}"},
+ 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l2}"},
{'account_id': 'external',
'blockheight': 104,
'credit_msat': 50000000000,
@@ -831,7 +834,7 @@ def test_coinmoves_unilateral_htlc_timeout(node_factory, bitcoind):
'originating_account': fundchannel['channel_id'],
'output_msat': 330000,
'primary_tag': 'anchor',
- 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l2}"},
+ 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l1}"},
{'account_id': 'external',
'blockheight': 104,
'credit_msat': 330000,
@@ -840,7 +843,7 @@ def test_coinmoves_unilateral_htlc_timeout(node_factory, bitcoind):
'originating_account': fundchannel['channel_id'],
'output_msat': 330000,
'primary_tag': 'anchor',
- 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l1}"},
+ 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l2}"},
{'account_id': 'external',
'blockheight': 104,
'credit_msat': 49864547000,
@@ -1081,7 +1084,7 @@ def test_coinmoves_unilateral_htlc_dust(node_factory, bitcoind):
'originating_account': fundchannel['channel_id'],
'output_msat': 330000,
'primary_tag': 'anchor',
- 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l2}"},
+ 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l1}"},
{'account_id': 'external',
'blockheight': 104,
'credit_msat': 330000,
@@ -1090,7 +1093,7 @@ def test_coinmoves_unilateral_htlc_dust(node_factory, bitcoind):
'originating_account': fundchannel['channel_id'],
'output_msat': 330000,
'primary_tag': 'anchor',
- 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l1}"},
+ 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l2}"},
{'account_id': 'external',
'blockheight': 104,
'credit_msat': 50000000000,
@@ -1118,7 +1121,7 @@ def test_coinmoves_unilateral_htlc_dust(node_factory, bitcoind):
'originating_account': fundchannel['channel_id'],
'output_msat': 330000,
'primary_tag': 'anchor',
- 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l2}"},
+ 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l1}"},
{'account_id': 'external',
'blockheight': 104,
'credit_msat': 330000,
@@ -1127,7 +1130,7 @@ def test_coinmoves_unilateral_htlc_dust(node_factory, bitcoind):
'originating_account': fundchannel['channel_id'],
'output_msat': 330000,
'primary_tag': 'anchor',
- 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l1}"},
+ 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l2}"},
{'account_id': 'external',
'blockheight': 104,
'credit_msat': 49965183000,
@@ -1298,7 +1301,7 @@ def test_coinmoves_unilateral_htlc_fulfill(node_factory, bitcoind):
'originating_account': fundchannel['channel_id'],
'output_msat': 330000,
'primary_tag': 'anchor',
- 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l2}"},
+ 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l1}"},
{'account_id': 'external',
'blockheight': 104,
'credit_msat': 330000,
@@ -1307,7 +1310,7 @@ def test_coinmoves_unilateral_htlc_fulfill(node_factory, bitcoind):
'originating_account': fundchannel['channel_id'],
'output_msat': 330000,
'primary_tag': 'anchor',
- 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l1}"},
+ 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l2}"},
{'account_id': 'external',
'blockheight': 104,
'credit_msat': 50000000000,
@@ -1335,7 +1338,7 @@ def test_coinmoves_unilateral_htlc_fulfill(node_factory, bitcoind):
'originating_account': fundchannel['channel_id'],
'output_msat': 330000,
'primary_tag': 'anchor',
- 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l2}"},
+ 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l1}"},
{'account_id': 'external',
'blockheight': 104,
'credit_msat': 330000,
@@ -1344,7 +1347,7 @@ def test_coinmoves_unilateral_htlc_fulfill(node_factory, bitcoind):
'originating_account': fundchannel['channel_id'],
'output_msat': 330000,
'primary_tag': 'anchor',
- 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l1}"},
+ 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l2}"},
{'account_id': 'external',
'blockheight': 104,
'credit_msat': 49864547000,
@@ -1570,7 +1573,7 @@ def test_coinmoves_unilateral_htlc_fulfilled_oneside(node_factory, bitcoind):
'originating_account': fundchannel['channel_id'],
'output_msat': 330000,
'primary_tag': 'anchor',
- 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l2}"},
+ 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l1}"},
{'account_id': 'external',
'blockheight': 104,
'credit_msat': 330000,
@@ -1579,7 +1582,7 @@ def test_coinmoves_unilateral_htlc_fulfilled_oneside(node_factory, bitcoind):
'originating_account': fundchannel['channel_id'],
'output_msat': 330000,
'primary_tag': 'anchor',
- 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l1}"},
+ 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l2}"},
{'account_id': 'external',
'blockheight': 104,
'credit_msat': 50100000000,
@@ -1607,7 +1610,7 @@ def test_coinmoves_unilateral_htlc_fulfilled_oneside(node_factory, bitcoind):
'originating_account': fundchannel['channel_id'],
'output_msat': 330000,
'primary_tag': 'anchor',
- 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l2}"},
+ 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l1}"},
{'account_id': 'external',
'blockheight': 104,
'credit_msat': 330000,
@@ -1616,7 +1619,7 @@ def test_coinmoves_unilateral_htlc_fulfilled_oneside(node_factory, bitcoind):
'originating_account': fundchannel['channel_id'],
'output_msat': 330000,
'primary_tag': 'anchor',
- 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l1}"},
+ 'utxo': f"{only_one(close_info['txids'])}:{anch_to_l2}"},
{'account_id': 'external',
'blockheight': 104,
'credit_msat': 49865193000,
@@ -1795,7 +1798,7 @@ def test_coinmoves_unilateral_htlc_penalty(node_factory, bitcoind):
'originating_account': fundchannel['channel_id'],
'output_msat': 330000,
'primary_tag': 'anchor',
- 'utxo': f"{cheattxid}:{anch_to_l1}"},
+ 'utxo': f"{cheattxid}:{anch_to_l2}"},
{'account_id': 'external',
'blockheight': 104,
'credit_msat': 330000,
@@ -1804,7 +1807,7 @@ def test_coinmoves_unilateral_htlc_penalty(node_factory, bitcoind):
'originating_account': fundchannel['channel_id'],
'output_msat': 330000,
'primary_tag': 'anchor',
- 'utxo': f"{cheattxid}:{anch_to_l2}"},
+ 'utxo': f"{cheattxid}:{anch_to_l1}"},
{'account_id': 'wallet',
'blockheight': 104,
'credit_msat': 50000000000,
diff --git a/tests/test_gossip.py b/tests/test_gossip.py
index c8d700e..64980a1 100644
--- a/tests/test_gossip.py
+++ b/tests/test_gossip.py
@@ -459,14 +459,14 @@ def test_gossip_jsonrpc(node_factory):
assert n2['nodeid'] == l2.info['id']
# Might not have seen other node-announce yet.
- assert n1['alias'].startswith('JUNIORBEAM')
- assert n1['color'] == '0266e4'
+ assert n1['alias'].startswith('STRANGEBOUNCE')
+ assert n1['color'] == '038194'
if 'alias' not in n2:
assert 'color' not in n2
assert 'addresses' not in n2
else:
- assert n2['alias'].startswith('SILENTARTIST')
- assert n2['color'] == '022d22'
+ assert n2['alias'].startswith('SILENTGOPHER')
+ assert n2['color'] == '033845'
assert [c['active'] for c in l1.rpc.listchannels()['channels']] == [True, True]
assert [c['public'] for c in l1.rpc.listchannels()['channels']] == [True, True]
@@ -1312,7 +1312,7 @@ def test_node_reannounce(node_factory, bitcoind, chainparams):
# Wait for it to process it.
wait_for(lambda: l2.rpc.listnodes(l1.info['id'])['nodes'] != [])
wait_for(lambda: 'alias' in only_one(l2.rpc.listnodes(l1.info['id'])['nodes']))
- assert only_one(l2.rpc.listnodes(l1.info['id'])['nodes'])['alias'].startswith('JUNIORBEAM')
+ assert only_one(l2.rpc.listnodes(l1.info['id'])['nodes'])['alias'].startswith('STRANGEBOUNCE')
# Make sure it gets features correct.
assert only_one(l2.rpc.listnodes(l1.info['id'])['nodes'])['features'] == expected_node_features()
@@ -1501,7 +1501,7 @@ def test_getroute_exclude(node_factory, bitcoind):
# This should work
route = l1.rpc.getroute(l4.info['id'], 1, 1)['route']
- # l1 id is > l2 id, so 1 means l1->l2
+ # l1 id (038194) > l2 id (033845), so direction 1 means l1->l2
chan_l1l2 = route[0]['channel'] + '/1'
chan_l2l1 = route[0]['channel'] + '/0'
@@ -1527,13 +1527,11 @@ def test_getroute_exclude(node_factory, bitcoind):
r'update for channel {}/1 now ACTIVE'
.format(scid)])
- # l3 id is > l2 id, so 1 means l3->l2
- # chan_l3l2 = route[1]['channel'] + '/1'
+ # l2 id (033845) < l3 id (03cecb), so direction 0 means l2->l3
chan_l2l3 = route[1]['channel'] + '/0'
- # l4 is > l2
- # chan_l4l2 = scid + '/1'
- chan_l2l4 = scid + '/0'
+ # l2 id (033845) > l4 id (02287b), so direction 1 means l2->l4
+ chan_l2l4 = scid + '/1'
# This works
l1.rpc.getroute(l4.info['id'], 1, 1, exclude=[chan_l2l3])
diff --git a/tests/test_misc.py b/tests/test_misc.py
index 59f9b03..2070578 100644
--- a/tests/test_misc.py
+++ b/tests/test_misc.py
@@ -2993,7 +2993,7 @@ def test_makesecret(node_factory):
l1 = node_factory.get_node(options={"dev-force-privkey": "1212121212121212121212121212121212121212121212121212121212121212"})
secret = l1.rpc.makesecret("73636220736563726574")["secret"]
- assert (secret == "a9a2e742405c28f059349132923a99337ae7f71168b7485496e3365f5bc664ed")
+ assert (secret == "498a16a6c6b82b7280de7f5b0afa0478b29d3a1cbe52c376249cf46abb6c03da")
# Same if we do it by parameter name
assert l1.rpc.makesecret(hex="73636220736563726574")["secret"] == secret
@@ -4983,8 +4983,9 @@ def test_listaddresses(node_factory):
# Check all fields are present in the response
addresses = l1.rpc.listaddresses(address=addr[0])["addresses"]
assert addresses[0]['keyidx'] == 1
- assert addresses[0]['bech32'] == 'bcrt1qq8adjz4u6enf0cjey9j8yt0y490tact93fzgsf'
- assert addresses[0]['p2tr'] == 'bcrt1pjaazqg6qgqpv2wxgdpg8hyj49wehrfgajqe2tyuzhcp7p50hachq7tkdxf'
+ # With BIP86, addresses are different from BIP32
+ assert addresses[0]['p2tr'] == 'bcrt1ph9gd3vrxqv5c43lhz330n6u497utuqzzjwtrwj89wy879z6nwrpseaf4et'
+ assert addresses[0]['bech32'] == 'bcrt1qufr4lmec5a8humz7anckxk092uel83r2eqr33s'
# start > 10 (issued addresses till now)
addresses = l1.rpc.listaddresses(start=11, limit=2)["addresses"]
diff --git a/tests/test_opening.py b/tests/test_opening.py
index a8090f9..f400896 100644
--- a/tests/test_opening.py
+++ b/tests/test_opening.py
@@ -1580,7 +1580,7 @@ def test_zeroconf_mindepth(bitcoind, node_factory):
{},
{
'plugin': str(plugin_path),
- 'zeroconf_allow': '0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518',
+ 'zeroconf_allow': '038194b5f32bdf0aa59812c86c4ef7ad2f294104fa027d1ace9b469bb6f88cf37b',
'zeroconf_mindepth': '2',
},
])
@@ -1627,7 +1627,7 @@ def test_zeroconf_open(bitcoind, node_factory):
{},
{
'plugin': str(plugin_path),
- 'zeroconf_allow': '022d223620a359a47ff7f7ac447c85c46c923da53389221a0054c11c1e3ca31d59'
+ 'zeroconf_allow': '033845802d25b4e074ccfd7cd8b339a41dc75bf9978a034800444b51d42b07799a'
},
])
@@ -1702,7 +1702,7 @@ def test_zeroconf_public(bitcoind, node_factory, chainparams):
{'plugin': str(coin_mvt_plugin)},
{
'plugin': str(plugin_path),
- 'zeroconf_allow': '0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518'
+ 'zeroconf_allow': '038194b5f32bdf0aa59812c86c4ef7ad2f294104fa027d1ace9b469bb6f88cf37b'
},
{}
])
@@ -1804,7 +1804,7 @@ def test_zeroconf_forward(node_factory, bitcoind):
{},
{
'plugin': str(plugin_path),
- 'zeroconf_allow': '022d223620a359a47ff7f7ac447c85c46c923da53389221a0054c11c1e3ca31d59'
+ 'zeroconf_allow': '033845802d25b4e074ccfd7cd8b339a41dc75bf9978a034800444b51d42b07799a'
}
]
l1, l2, l3 = node_factory.get_nodes(3, opts=opts)
@@ -2073,7 +2073,7 @@ def test_zeroconf_multichan_forward(node_factory):
higher spendable msat, which should cause it to be chosen instead.
"""
- node_id = '022d223620a359a47ff7f7ac447c85c46c923da53389221a0054c11c1e3ca31d59'
+ node_id = '033845802d25b4e074ccfd7cd8b339a41dc75bf9978a034800444b51d42b07799a'
plugin_path = Path(__file__).parent / "plugins" / "zeroconf-selective.py"
l1, l2, l3 = node_factory.line_graph(3, opts=[
{},
@@ -2600,7 +2600,7 @@ def test_opening_explicit_channel_type(node_factory, bitcoind):
l1, l2, l3, l4 = node_factory.get_nodes(4,
opts=[{'experimental-dual-fund': None},
{'plugin': str(plugin_path),
- 'zeroconf_allow': '0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518'},
+ 'zeroconf_allow': '038194b5f32bdf0aa59812c86c4ef7ad2f294104fa027d1ace9b469bb6f88cf37b'},
{'experimental-dual-fund': None},
{}])
@@ -2734,7 +2734,7 @@ def test_zeroconf_forget(node_factory, bitcoind, dopay: bool):
{},
{
"plugin": str(plugin_path),
- "zeroconf_allow": "0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518",
+ "zeroconf_allow": "038194b5f32bdf0aa59812c86c4ef7ad2f294104fa027d1ace9b469bb6f88cf37b",
"zeroconf_mindepth": "0",
"dev-max-funding-unconfirmed-blocks": blocks,
},
@@ -2887,7 +2887,7 @@ def test_zeroconf_withhold(node_factory, bitcoind, stay_withheld, mutual_close):
'dev-no-reconnect': None,
},
{'plugin': str(plugin_path),
- 'zeroconf_allow': '0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518',
+ 'zeroconf_allow': '038194b5f32bdf0aa59812c86c4ef7ad2f294104fa027d1ace9b469bb6f88cf37b',
'may_reconnect': True,
'dev-no-reconnect': None,
}])
diff --git a/tests/test_pay.py b/tests/test_pay.py
index 8e290b1..bf03297 100644
--- a/tests/test_pay.py
+++ b/tests/test_pay.py
@@ -5042,7 +5042,7 @@ def test_unreachable_routehint(node_factory, bitcoind):
# that l4 is there only to trick the deadend heuristic.
l1, l2 = node_factory.line_graph(2, wait_for_announce=True)
l3, l4, l5 = node_factory.line_graph(3, wait_for_announce=True)
- entrypoint = '0382ce59ebf18be7d84677c2e35f23294b9992ceca95491fcf8a56c6cb2d9de199'
+ entrypoint = '02287bfac8b99b35477ebe9334eede1e32b189e24644eb701c079614712331cec0'
# Generate an invoice with exactly one routehint.
for i in range(100):
diff --git a/tests/test_runes.py b/tests/test_runes.py
index a35d139..625373b 100644
--- a/tests/test_runes.py
+++ b/tests/test_runes.py
@@ -14,33 +14,33 @@ def test_createrune(node_factory):
'allow-deprecated-apis': True,
})
- # l1's master rune secret is edb8893c04fdeef8f5f06ed70edef309a5c83f20624594e136e392504a270c40
+ # l1's master rune secret is 4ac018131e70b044e17891e67960f59b9d602525d3aef9956e900189f456e595
rune1 = l1.rpc.createrune()
- assert rune1['rune'] == 'OSqc7ixY6F-gjcigBfxtzKUI54uzgFSA6YfBQoWGDV89MA=='
+ assert rune1['rune'] == 'I9TZsYEWiAwThQye-gYhpWIe1h15szWEN_qNyMSBOdE9MA=='
assert rune1['unique_id'] == '0'
rune2 = l1.rpc.createrune(restrictions="readonly")
- assert rune2['rune'] == 'zm0x_eLgHexaTvZn3Cz7gb_YlvrlYGDo_w4BYlR9SS09MSZtZXRob2RebGlzdHxtZXRob2ReZ2V0fG1ldGhvZD1zdW1tYXJ5Jm1ldGhvZC9saXN0ZGF0YXN0b3Jl'
+ assert rune2['rune'] == 's0IEnsikGDw76tdpAiMbqzigYhlkjqSVh0ZuvJ1Np1w9MSZtZXRob2RebGlzdHxtZXRob2ReZ2V0fG1ldGhvZD1zdW1tYXJ5Jm1ldGhvZC9saXN0ZGF0YXN0b3Jl'
assert rune2['unique_id'] == '1'
rune3 = l1.rpc.createrune(restrictions=[["time>1656675211"]])
- assert rune3['rune'] == 'mxHwVsC_W-PH7r79wXQWqxBNHaHncIqIjEPyP_vGOsE9MiZ0aW1lPjE2NTY2NzUyMTE='
+ assert rune3['rune'] == 'K0c0pWvBWb3y9HF1GMy33Zx2KRg1zcEvQLr2vtWwMew9MiZ0aW1lPjE2NTY2NzUyMTE='
assert rune3['unique_id'] == '2'
rune4 = l1.rpc.createrune(restrictions=[["id^022d223620a359a47ff7"], ["method=listpeers"]])
- assert rune4['rune'] == 'YPojv9qgHPa3im0eiqRb-g8aRq76OasyfltGGqdFUOU9MyZpZF4wMjJkMjIzNjIwYTM1OWE0N2ZmNyZtZXRob2Q9bGlzdHBlZXJz'
+ assert rune4['rune'] == 'ixuStVB4oewJtVNnim1P_qEL89ZU0G8Tnxg_JZgJTUk9MyZpZF4wMjJkMjIzNjIwYTM1OWE0N2ZmNyZtZXRob2Q9bGlzdHBlZXJz'
assert rune4['unique_id'] == '3'
rune5 = l1.rpc.createrune(rune4['rune'], [["pnamelevel!", "pnamelevel/io"]])
- assert rune5['rune'] == 'Zm7A2mKkLnd5l6Er_OMAHzGKba97ij8lA-MpNYMw9nk9MyZpZF4wMjJkMjIzNjIwYTM1OWE0N2ZmNyZtZXRob2Q9bGlzdHBlZXJzJnBuYW1lbGV2ZWwhfHBuYW1lbGV2ZWwvaW8='
+ assert rune5['rune'] == 'NUPHrMs1TEdfWbRfO_KJ4rXhJSBjmSqbdcz-W0yH9J89MyZpZF4wMjJkMjIzNjIwYTM1OWE0N2ZmNyZtZXRob2Q9bGlzdHBlZXJzJnBuYW1lbGV2ZWwhfHBuYW1lbGV2ZWwvaW8='
assert rune5['unique_id'] == '3'
rune6 = l1.rpc.createrune(rune5['rune'], [["parr1!", "parr1/io"]])
- assert rune6['rune'] == 'm_tyR0qqHUuLEbFJW6AhmBg-9npxVX2yKocQBFi9cvY9MyZpZF4wMjJkMjIzNjIwYTM1OWE0N2ZmNyZtZXRob2Q9bGlzdHBlZXJzJnBuYW1lbGV2ZWwhfHBuYW1lbGV2ZWwvaW8mcGFycjEhfHBhcnIxL2lv'
+ assert rune6['rune'] == 'sloBq0jn21v4LWhkswsHZgdtvQ0-jqgXXp_2jNNWLJA9MyZpZF4wMjJkMjIzNjIwYTM1OWE0N2ZmNyZtZXRob2Q9bGlzdHBlZXJzJnBuYW1lbGV2ZWwhfHBuYW1lbGV2ZWwvaW8mcGFycjEhfHBhcnIxL2lv'
assert rune6['unique_id'] == '3'
rune7 = l1.rpc.createrune(restrictions=[["pnum=0"]])
- assert rune7['rune'] == 'enX0sTpHB8y1ktyTAF80CnEvGetG340Ne3AGItudBS49NCZwbnVtPTA='
+ assert rune7['rune'] == 'k6kQt9dkGMaz75f51-PEkPk8Qovbiqz2HXconizqa-w9NCZwbnVtPTA='
assert rune7['unique_id'] == '4'
rune8 = l1.rpc.createrune(rune7['rune'], [["rate=3"]])
- assert rune8['rune'] == '_h2eKjoK7ITAF-JQ1S5oum9oMQesrz-t1FR9kDChRB49NCZwbnVtPTAmcmF0ZT0z'
+ assert rune8['rune'] == 'jHidm2_terhiOytrn8xgEWR1pvFkKuoIvKgvcEeLLQQ9NCZwbnVtPTAmcmF0ZT0z'
assert rune8['unique_id'] == '4'
rune9 = l1.rpc.createrune(rune8['rune'], [["rate=1"]])
- assert rune9['rune'] == 'U1GDXqXRvfN1A4WmDVETazU9YnvMsDyt7WwNzpY0khE9NCZwbnVtPTAmcmF0ZT0zJnJhdGU9MQ=='
+ assert rune9['rune'] == 'AWO9sW94iv7Y99h0b6kyQO5yePUXQOSIpSuTRp8XFTM9NCZwbnVtPTAmcmF0ZT0zJnJhdGU9MQ=='
assert rune9['unique_id'] == '4'
# Test rune with \|.
@@ -245,32 +245,32 @@ def test_createrune_per_restriction(node_factory):
# 1 sec = 1,000,000,000 nanoseconds (nsec)
rune_per_nano_sec = l1.rpc.createrune(restrictions=[["per=2000000000nsec"]])['rune']
- assert rune_per_nano_sec == 'FU709V1zX-JJR2hlpBfN2hpPEqahtzi6q65fZxnRRhM9MCZwZXI9MjAwMDAwMDAwMG5zZWM='
+ assert rune_per_nano_sec == 'IUhHCEYyQOTSbBjJ09MNiPZMrV_tHFX0JG2U5yCUmIU9MCZwZXI9MjAwMDAwMDAwMG5zZWM='
do_test_rune_per_restriction(l1, rune_per_nano_sec, 2)
# 1 sec = 1,000,000 microseconds (usec)
rune_per_micro_sec = l1.rpc.createrune(restrictions=[["per=2000000usec"]])['rune']
- assert rune_per_micro_sec == 'i8H9Rk5iDvXdiNgRUbeWqKUdMH2x0h58-1LqE1jthio9MSZwZXI9MjAwMDAwMHVzZWM='
+ assert rune_per_micro_sec == '7ugvfMdjxoW6rKq__8d2gB7me5PL2KZOttq83mGuPvU9MSZwZXI9MjAwMDAwMHVzZWM='
do_test_rune_per_restriction(l1, rune_per_micro_sec, 2)
# 1 sec = 1,000 milliseconds (msec)
rune_per_milli_sec = l1.rpc.createrune(restrictions=[["per=2000msec"]])['rune']
- assert rune_per_milli_sec == 'eoEyi0Na_GeXBpmQ_cXQHrvmAuGWwq4bJrYo0jKk6V09MiZwZXI9MjAwMG1zZWM='
+ assert rune_per_milli_sec == 'uC5mTQfEmhbcFiUDMYIErTJcmaKZYMCUogncByZhMbk9MiZwZXI9MjAwMG1zZWM='
do_test_rune_per_restriction(l1, rune_per_milli_sec, 2)
# 1 sec
rune_per_sec = l1.rpc.createrune(restrictions=[["per=2sec"]])['rune']
- assert rune_per_sec == 'dBbGI4T85cF4eSHvuQF_kW8bXgSDJY8Wr9cTsPGRCqg9MyZwZXI9MnNlYw=='
+ assert rune_per_sec == 'jjk21GQ-MeO2FWD0uo6lYplwadKHe3q9q38FP_ol3_M9MyZwZXI9MnNlYw=='
do_test_rune_per_restriction(l1, rune_per_sec, 2)
# default (sec)
rune_per_default = l1.rpc.createrune(restrictions=[["per=2"]])['rune']
- assert rune_per_default == 'pd0Xr2U3uv-mJQfsp801doqTN5zpRRuc2Clp5Yb8zmU9NCZwZXI9Mg=='
+ assert rune_per_default == 'RQwZdN5OeWxIR2zPJ55mOkJ8s0SPmdFmwuNAp8TATlI9NCZwZXI9Mg=='
do_test_rune_per_restriction(l1, rune_per_default, 2)
# 1 minute
rune_per_min = l1.rpc.createrune(restrictions=[["per=1min"]])['rune']
- assert rune_per_min == 'ZfWDjFa7wTiadUWOjwpztSClfiubwVusxxUEtoLtCBk9NSZwZXI9MW1pbg=='
+ assert rune_per_min == 'gDyB_VRT5IKmpmjr4GnplGMlp-7_g8VVCR2KCjcC0Gk9NSZwZXI9MW1pbg=='
do_test_rune_per_restriction(l1, rune_per_min, 60)
diff --git a/tests/test_xpay.py b/tests/test_xpay.py
index e576d15..5fe0227 100644
--- a/tests/test_xpay.py
+++ b/tests/test_xpay.py
@@ -28,7 +28,7 @@ def test_pay_fakenet(node_factory):
gsfile, nodemap = generate_gossip_store([GenChannel(0, 1, capacity_sats=100_000),
GenChannel(1, 2, capacity_sats=100_000),
GenChannel(2, 3, capacity_sats=200_000)],
- nodemap={0: '022d223620a359a47ff7f7ac447c85c46c923da53389221a0054c11c1e3ca31d59'})
+ nodemap={0: '033845802d25b4e074ccfd7cd8b339a41dc75bf9978a034800444b51d42b07799a'})
# l2 will warn l1 about its invalid gossip: ignore.
l1, l2 = node_factory.line_graph(2,
@@ -220,7 +220,7 @@ def test_xpay_fake_channeld(node_factory, bitcoind, chainparams, slow_mode):
outfile = tempfile.NamedTemporaryFile(prefix='gossip-store-')
nodeids = subprocess.check_output(['devtools/gossmap-compress',
'decompress',
- '--node-map=3301=022d223620a359a47ff7f7ac447c85c46c923da53389221a0054c11c1e3ca31d59',
+ '--node-map=3301=033845802d25b4e074ccfd7cd8b339a41dc75bf9978a034800444b51d42b07799a',
'tests/data/gossip-store-2024-09-22.compressed',
outfile.name]).decode('utf-8').splitlines()
AMOUNT = 100_000_000
@@ -544,7 +544,7 @@ def test_xpay_maxfee(node_factory, bitcoind, chainparams):
outfile = tempfile.NamedTemporaryFile(prefix='gossip-store-')
subprocess.check_output(['devtools/gossmap-compress',
'decompress',
- '--node-map=3301=022d223620a359a47ff7f7ac447c85c46c923da53389221a0054c11c1e3ca31d59',
+ '--node-map=3301=033845802d25b4e074ccfd7cd8b339a41dc75bf9978a034800444b51d42b07799a',
'tests/data/gossip-store-2024-09-22.compressed',
outfile.name]).decode('utf-8').splitlines()
AMOUNT = 100_000_000
@@ -657,7 +657,7 @@ def test_xpay_no_mpp(node_factory, chainparams):
b11_no_mpp = subprocess.check_output(["devtools/bolt11-cli",
"encode",
# secret for l3
- "dae24b3853e1443a176daba5544ee04f7db33ebe38e70bdfdb1da34e89512c10",
+ "79893b45d1e57cf2ebf302af91aa52c9e573f638a61a83c6e603a331b53f452c",
f"currency={chainparams['bip173_prefix']}",
f"p={no_mpp['payment_hash']}",
f"s={no_mpp['payment_secret']}",
@@ -778,7 +778,7 @@ def test_fail_after_success(node_factory, bitcoind, executor, slow_mode):
l2.daemon.wait_for_log('Peer permanent failure in CHANNELD_NORMAL: Offered HTLC 0 SENT_ADD_ACK_REVOCATION cltv 124 hit deadline')
bitcoind.generate_block(3, wait_for_mempool=1)
- l1.daemon.wait_for_log(r"UNUSUAL.*Destination accepted partial payment, failed a part \(Error permanent_channel_failure for path ->022d223620a359a47ff7f7ac447c85c46c923da53389221a0054c11c1e3ca31d59->0382ce59ebf18be7d84677c2e35f23294b9992ceca95491fcf8a56c6cb2d9de199->032cf15d1ad9c4a08d26eab1918f732d8ef8fdc6abb9640bf3db174372c491304e, from 022d223620a359a47ff7f7ac447c85c46c923da53389221a0054c11c1e3ca31d59\)")
+ l1.daemon.wait_for_log(r"UNUSUAL.*Destination accepted partial payment, failed a part \(Error permanent_channel_failure for path ->033845802d25b4e074ccfd7cd8b339a41dc75bf9978a034800444b51d42b07799a->02287bfac8b99b35477ebe9334eede1e32b189e24644eb701c079614712331cec0->0258f3ff3e0853ccc09f6fe89823056d7c0c55c95fab97674df5e1ad97a72f6265, from 033845802d25b4e074ccfd7cd8b339a41dc75bf9978a034800444b51d42b07799a\)")
# Could be either way around, check both
line = l1.daemon.is_in_log(r"UNUSUAL.*Destination accepted partial payment, failed a part")
assert re.search(r'but accepted only .* of 800000000msat\. Winning\?!', line)
Why this scored 15/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.