Commit Graph

16411 Commits

Author SHA1 Message Date
nicolas.dorier
d94b9a2713
Adapt Dockerfile for BTCPay deployment
Some checks failed
Docker packaging / main (push) Has been cancelled
2025-07-16 13:29:50 +09:00
Alex Myers
2b8b709bfd meta: update changelog for v25.05
Changelog-None
2025-06-16 13:10:33 -05:00
Alex Myers
acf935e1c8 github: Update release dates for 25.09
Changelog-None
2025-06-16 13:10:33 -05:00
Rusty Russell
f2f7b6e225 pytest: fix flake in test_anchorspend_using_to_remote
With recent changes, particularly using postgres, we can finish the HTLC before
we force close, so the test fails.  Insert an explicit hangup here so we reliably
get the result we expect:

```
    @pytest.mark.parametrize("anchors", [False, True])
    @unittest.skipIf(TEST_NETWORK != 'regtest', 'elementsd anchors not supportd')
    def test_anchorspend_using_to_remote(node_factory, bitcoind, anchors):
        """Make sure we can use `to_remote` output of previous close to spend anchor"""
        # Try with old output from both anchor and non-anchor channel.
        l4_opts = {}
        if anchors is False:
            l4_opts['dev-force-features'] = "-23"
    
        l1, l2, l3, l4 = node_factory.get_nodes(4, opts=[{},
                                                         {},
                                                         {'disconnect': ['-WIRE_UPDATE_FULFILL_HTLC']},
                                                         l4_opts])
    
        # Give l2 some funds, from a to-remote output.  It will have to spend
        # this to use anchor.
        node_factory.join_nodes([l4, l2])
    
        # l4 unilaterally closes, l2 gets to-remote with its output.
        l4.rpc.pay(l2.rpc.invoice(100000000, 'test', 'test')['bolt11'])
>       wait_for(lambda: only_one(l4.rpc.listpeerchannels()['channels'])['htlcs'] != [])

tests/test_closing.py:4183: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

success = <function test_anchorspend_using_to_remote.<locals>.<lambda> at 0x7f8293e7fe20>
timeout = 180

    def wait_for(success, timeout=TIMEOUT):
        start_time = time.time()
        interval = 0.25
        while not success():
            time_left = start_time + timeout - time.time()
            if time_left <= 0:
>               raise ValueError("Timeout while waiting for {}".format(success))
E               ValueError: Timeout while waiting for <function test_anchorspend_using_to_remote.<locals>.<lambda> at 0x7f8293e7fe20>

```

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-06-13 13:55:31 -05:00
Rusty Russell
6468d439e0 ccan: update for FreeBSD compile fixes.
Also gets some new timemono helpers, but we don't use them (yet).

Changelog-Fixed: Compilation on FreeBSD.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Closes: https://github.com/ElementsProject/lightning/issues/7758
2025-06-13 12:21:53 -05:00
Alex Myers
9d160eb8fb wallet: load closed channels at init
This seems to have been inadvertently omitted in the recent
closed channel refactor.

Fixes: #8346

Changelog-None: Changed this release.
2025-06-13 11:40:06 +09:30
daywalker90
40d319b7be python: raise minimum supported python version to 3.9
Changelog-None
2025-06-12 13:51:18 +02:00
Rusty Russell
03b4f4778e lightningd: fix log crash on weird escape lines from plugin.
Apparently clboss gives us \u UTF codes.  We don't support that (use UTF-8 directly)

```
126	../sysdeps/x86_64/multiarch/strlen-vec.S: No such file or directory.
(gdb) bt
    label=label@entry=0x63e2f9604db9 "char *[]") at ccan/ccan/tal/str/str.c:137
    complete=complete@entry=0x7ffe9090b0f6, destroyed=destroyed@entry=0x7ffe9090b0f7) at lightningd/plugin.c:773
```

Reported-by: Ken Sedgwick
Fixes: #8338
Changelog-None: broken in this release
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-06-11 08:50:34 -05:00
Rusty Russell
eddb0e3bbd CHANGELOG.md: warn that spec compliance mean we broke splicing.
The TLV numbers for splicing were used by the upgrade protocol, and we always
demarshal TLVs:

```
rusty@rusty-Framework:~/devel/cvs/lightning ((v25.02.1))$ ./devtools/decodemsg 00883d448f5a4d2d82c861a1e60ba317f5c848989d8c92f65833ff85cc82cb96adf500000000000000c600000000000000c559ebae46ed6f64c3e7c0005494bc684a630223d4b942a7e09b76742727b863cc02aac24eb41bbcfd77cb2e75f51bc5d298a6862cd7c2478268aa67572d8a08311801203d448f5a4d2d82c861a1e60ba317f5c848989d8c92f65833ff85cc82cb96adf503203d448f5a4d2d82c861a1e60ba317f5c848989d8c92f65833ff85cc82cb96adf5
WIRE_CHANNEL_REESTABLISH:
channel_id=3d448f5a4d2d82c861a1e60ba317f5c848989d8c92f65833ff85cc82cb96adf5
next_commitment_number=198
next_revocation_number=197
your_last_per_commitment_secret=59ebae46ed6f64c3e7c0005494bc684a630223d4b942a7e09b76742727b863cc
my_current_per_commitment_point=02aac24eb41bbcfd77cb2e75f51bc5d298a6862cd7c2478268aa67572d8a083118
channel_reestablish={
type=1
len=32
(msg_name=next_to_send)
commitment_number=**TRUNCATED tu64 channel_reestablish.channel_reestablish.commitment_number**
**TRUNCATED TLV channel_reestablish.channel_reestablish**
Segmentation fault (core dumped)
```

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Closes: #8337
2025-06-11 08:15:56 -05:00
Matt Whitlock
3f6cd59dc9 gossipd: check for existing channel announcement before sigcheck
Checking a signature is a CPU-intensive operation that should be performed only
if gossmap doesn't already have the channel announcement in question and we're
not already checking for the announcement's UTxO.

Changelog-Fixed: `gossipd` doesn't waste CPU cycles checking signatures on channel announcements that are already known
Issue: https://github.com/ElementsProject/lightning/issues/7972
2025-06-10 16:40:33 -05:00
ShahanaFarooqui
ae320cd8d2 CI: Update Ubuntu version from 20 to 22 for Github Actions
Ubuntu 20.04 reached its end-of-life (EOL) on April 15, 2025, and GitHub Actions subsequently removed the Ubuntu 20.04 LTS runner. As a result, we must upgrade all workflow runners to at least Ubuntu 22.04. Currently, this update has only been applied to pypi.yml for core-lightning.

Changelog-None.
2025-06-09 14:24:53 -05:00
ShahanaFarooqui
ad2dc972de ci: Fix noble repro build by updating sqlite3 version and shasums
The reproducible build is currently failing on Ubuntu Noble, causing the daily `Repro Build Nightly` GitHub action to fail and triggering email notifications.

This update resolves the issue by adjusting the default sqlite3 version and checksums to match the packages now available in Noble, allowing the image to build successfully.

Changelog-None.
2025-06-05 17:38:55 -05:00
daywalker90
b97278fb9a python: upgrade grpcio-tools to 1.69.0 and protobuf to 5.29.4 for python3.13 compatibility
Changelog-None
2025-05-21 10:58:15 -05:00
Alex Myers
2c2fbe36e1 meta: update changelog for 25.05rc1 2025-05-19 14:12:55 -05:00
Alex Myers
8d6ae149ff release: update version for 25.05rc1
Changelog-None
2025-05-19 14:12:55 -05:00
Rusty Russell
f68feaeb37 pytest: fix races now connecting is slightly slower.
We asserted that a node would be connected, but now we always call the
chanbackup peer_connected hook, it might not be that fast:

```
2025-05-17T08:37:58.7193306Z     def test_funding_fail(node_factory, bitcoind):
...
2025-05-17T08:37:58.7204037Z         # Restart l2 without ridiculous locktime.
2025-05-17T08:37:58.7204546Z         del l2.daemon.opts['watchtime-blocks']
2025-05-17T08:37:58.7204990Z         l2.restart()
2025-05-17T08:37:58.7206578Z         l1.rpc.connect(l2.info['id'], 'localhost', l2.port)
2025-05-17T08:37:58.7207072Z     
2025-05-17T08:37:58.7207522Z         # We don't have enough left to cover fees if we try to spend it all.
2025-05-17T08:37:58.7208203Z         with pytest.raises(RpcError, match=r'not afford'):
2025-05-17T08:37:58.7208761Z             l1.rpc.fundchannel(l2.info['id'], funds)
2025-05-17T08:37:58.7209203Z     
2025-05-17T08:37:58.7209598Z         # Should still be connected (we didn't contact the peer)
2025-05-17T08:37:58.7210243Z         assert only_one(l1.rpc.listpeers()['peers'])['connected']
2025-05-17T08:37:58.7210875Z         l2.daemon.wait_for_log('Handed peer, entering loop')
2025-05-17T08:37:58.7211439Z >       assert only_one(l2.rpc.listpeers()['peers'])['connected']
2025-05-17T08:37:58.7211912Z E       assert False
```

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-17 13:05:04 -05:00
Rusty Russell
b15100d03a lightningd: don't complain when gossipd gives us channel_update for dying channel.
It can definitely happen (it's not dead yet):

```
2025-05-17T08:44:48.9829150Z lightningd-2 2025-05-17T08:36:43.597Z **BROKEN** 0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518-chan#3: gossipd gave channel_update in CGOSSIP_CHANNEL_ANNOUNCED_DYING? update=01027cf5d46590c45eb608a7e07a7b123c998ac12a655ce11004c9d9bb59f83698e8760d7b992df0dcf925f6732503de55d596aadaa35f0a8837cee58e0769172d2a06226e46111a0b59caaf126043eb5bbf28c34f3a5e332a1fc7b2b73cf188910f00006f00000100006828493f010200060000000000000000000000010000000a000000003b023380
```

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-17 13:05:04 -05:00
Rusty Russell
04ba55d88b wallet: fix incorrect channel_htlcs id migration.
We were supposed to initialize `last_htlcs_created_index` but a typo
made us initialize `last_forwards_created_index` instead.  Fix up the
overwritten one, and actually initialize the one we were supposed to.

Fixes: https://github.com/ElementsProject/lightning/issues/8269
Fixes: https://github.com/ElementsProject/lightning/issues/8270
Changelog-None: recently introduced bug
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-17 13:05:04 -05:00
Rusty Russell
1cc64dd67c pytest: test to crash on migration from old db.
```
Error executing statement: wallet/wallet.c:3247: INSERT INTO channel_htlcs ( id, channel_id, channel_htlc_id, direction, origin_htlc, msatoshi, cltv_expiry, payment_hash, payment_key, hstate, routing_onion, malformed_onion, partid, groupid, fees_msat, min_commit_num) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 0, ?, ?, ?, ?);: UNIQUE constraint failed: channel_htlcs.id
lightningd: FATAL SIGNAL 6 (version v25.02-321-g3999879)
0x642e42dc974f send_backtrace
	common/daemon.c:33
0x642e42dc97eb crashdump
	common/daemon.c:78
0x7d90f2e4532f ???
	./signal/../sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c:0
0x7d90f2e9eb2c __pthread_kill_implementation
	./nptl/pthread_kill.c:44
0x7d90f2e9eb2c __pthread_kill_internal
	./nptl/pthread_kill.c:78
0x7d90f2e9eb2c __GI___pthread_kill
	./nptl/pthread_kill.c:89
0x7d90f2e4527d __GI_raise
	../sysdeps/posix/raise.c:26
0x7d90f2e288fe __GI_abort
	./stdlib/abort.c:79
0x642e42d71f79 fatal_vfmt
	lightningd/log.c:1055
0x642e42da61e8 db_error
	wallet/db.c:1117
0x642e42e1eafc db_fatal
	db/utils.c:323
0x642e42e1eee6 db_exec_prepared_v2
	db/utils.c:197
0x642e42db1fd9 wallet_htlc_save_out
	wallet/wallet.c:3310
0x642e42d8f07f update_out_htlc
	lightningd/peer_htlcs.c:1978
0x642e42d8f435 changed_htlc
	lightningd/peer_htlcs.c:2011
0x642e42d929aa peer_sending_commitsig
	lightningd/peer_htlcs.c:2108
0x642e42d5002f channel_msg
	lightningd/channel_control.c:1533
0x642e42d9ec3a sd_msg_read
	lightningd/subd.c:560
0x642e42e88435 next_plan
	ccan/ccan/io/io.c:60
0x642e42e88906 do_plan
	ccan/ccan/io/io.c:422
0x642e42e889c3 io_ready
	ccan/ccan/io/io.c:439
0x642e42e8a332 io_loop
	ccan/ccan/io/poll.c:455
0x642e42d69b01 io_loop_with_timers
	lightningd/io_loop_with_timers.c:22
0x642e42d6f525 main
	lightningd/lightningd.c:1486
0x7d90f2e2a1c9 __libc_start_call_main
	../sysdeps/nptl/libc_start_call_main.h:58
0x7d90f2e2a28a __libc_start_main_impl
	../csu/libc-start.c:360
0x642e42d41b64 ???
	???:0
0xffffffffffffffff ???
```

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-17 13:05:04 -05:00
Rusty Russell
44972b2e15 chanbackup: unbias our random peer selection.
We picked one node and iterated.  This means we would only sent to 1,
not 2 nodes if we picked the last (common if there were only a few
peers).  But it also means we would generally send to the same pair of
nodes, which isn't great for redundancy.

Rework to be more random.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-16 23:39:35 +09:30
Rusty Russell
b7e20b327c lightningd: enable peer storage by default,
Now we've make it only on existing channels, and not have to call
listdatastore every time, that means we can safely turn it on by
default.

Changelog-Added: Protocol: we now offer peer storage to any peers who create a channel.
Changelog-Deprecated: Config: `--experimental-peer-storage` (it's now the default).
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-16 23:39:35 +09:30
Rusty Russell
40dfbcc124 pytest: make test_v2_rbf_liquidity_ad more robust against other datastore users.
When peer backup is enabled by default, it puts things in the datastore, breaking
this assumption.  Narrow the test to examine the specific funder directory.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-16 23:39:35 +09:30
Rusty Russell
49ccb0eeb8 chanbackup: don't send our backups to peers if they would be overlength.
They will in fact get truncated, and never restore.  Large nodes should be using some real
backup strategy!

For this reason, we split "peer_backup" support into send vs store support, so we can
turn off send of our own without disabling storing/sending theirs.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-16 23:39:35 +09:30
Rusty Russell
c5cde13af6 chanbackup: only send channel backups to max 2 peers at a time.
This, too, is vital for large nodes, which don't want a significant
traffic increase.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-16 23:39:35 +09:30
Rusty Russell
90bbd8aedc chanbackup: use peer table instead of calling "listpeerchannels".
This is much better for very large nodes with lots of channel activity.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-16 23:39:35 +09:30
Rusty Russell
4eafc1a2e1 chanbackup: cache available peers.
We already get the connected hook, so in there we can add to a hash
table of suitable peers.  Rather than subscribe to disconnection, we
simply remove the peer if a sendcustommsg fails.

This does make after_send_scb_single() a bit more complex, since it
needs this specific node_id: we use a `struct info` per node and a
pointer to a shared "idx" reference counter.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-16 23:39:35 +09:30
Rusty Russell
bda52c315c chanbackup: use the cache instead of calling listdatastore every time.
Now actually use our cache.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-16 23:39:35 +09:30
Rusty Russell
dc2c3668e6 chanbackup: use local memory to store peer backups.
By keeping a local hash table, we won't have to look up every time.
We still write to the datastore when it changes, and we need to
initialize it at plugin start.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-16 23:39:35 +09:30
Rusty Russell
2d821d6012 libplugin: fix jsonrpc_set_datastore_binary/jsonrpc_set_datastore_string with NULL cb.
This should complete the command, otherwise we get an assertion on
line 1090.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-16 23:39:35 +09:30
Rusty Russell
adf7663fef chanbackup: only store backups for peers with current/previous channels.
This seems fair.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-16 23:39:35 +09:30
Rusty Russell
cdce113d57 chanbackup: use modern plugin_data.
This avoids globals, which is a bit neater.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-16 23:39:35 +09:30
Rusty Russell
f590962be2 chanbackup: less logging in preparation for default enable.
We should not send a message on unknown custom message receipt (we
expect this!).

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-16 23:39:35 +09:30
Rusty Russell
e8690021ee chanbackup: remove unnecessary allocation.
after_listpeers() doesn't use the argument, so we don't need to allocate anything.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-16 23:39:35 +09:30
Rusty Russell
9357954bd9 chanbackup: add spec quotes now we have this in the spec.
This is the only way to track spec changes in future.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-16 23:39:35 +09:30
Rusty Russell
f5b6b6f8cf pytest: fix flake in test_gossip_force_broadcast_channel_msgs caused by ping timeout.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-16 22:40:45 +09:30
Rusty Russell
72a8fa20f7 gossipwith: add --handle-pings flag.
Required for long gossips, where we might get timed out for not replying to pings.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-16 22:40:45 +09:30
Rusty Russell
40a86daaf5 lightningd: fix crash in "shouldn't happen" path.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-16 22:40:45 +09:30
Erick Cestari
9b662a83e7 common/bolt11: validate public keys in routing hints
Changelog-Fixed: Validated public keys in BOLT11 routing hints to
prevent processing of malformed public keys.
2025-05-16 14:37:52 +09:30
Dusty Daemon
10708e3168 splice: Adjust batch_size TLV to match Eclair’s
Eclair only sets `batch_size` and `funding_txid` when its a batch larger than 1.

Adjust how we send and what we expect to receive to match this.

Changelog-None
2025-05-15 16:58:00 -05:00
daywalker90
529337a5fb msggen: add signmessagewithkey
Changelog-None
2025-05-15 13:04:13 +02:00
Rusty Russell
8494ca608a pytest: fix flake in test_peer_anchor_push
If l3 does a short signature, our feerate will also be wrong.  Adjust
check_feerate to take a range of nodes for this case.

```
>           check_feerate(l2, total_feerate_perkw, feerate)

tests/test_closing.py:4054: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

node = <fixtures.LightningNode object at 0x7fd7e2cbfb20>
actual_feerate = 14006.105538595726, expected_feerate = 14000

    def check_feerate(node, actual_feerate, expected_feerate):
        # Feerate can't be lower.
        assert actual_feerate > expected_feerate - 2
        if not did_short_sig(node):
>           assert actual_feerate < expected_feerate + 2
E           AssertionError

tests/utils.py:675: AssertionError
```
2025-05-15 17:20:07 +09:30
Rusty Russell
3a0a02c406 pytest: fix case where test can do unilateral close
And we timeout in:

    l2.wait_for_channel_onchain(l1.info['id'])

Because the unilateral wins.  This is because we tell closingd to
negotiate with a min feerate of 3750, but when it does and we check it,
our min has jumped, lightningd rejects it:

	... That's below our min XXX for weight 772 at feerate 7000

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-15 17:20:07 +09:30
Rusty Russell
01a8d2b01a lightningd: send announcement_signatures once channel is ready, don't wait until 6 deep.
The spec used to say you had to wait for channel to be ready, *and* 6
depth before exchanging signatures.  Now the 6 depth requirement is only
on the actual announcing of the channel: you can send sigs any time.

This means our state machine goes from:

  NOT_USABLE -> NOT_DEEP_ENOUGH -> NEED_PEER_SIGS -> ANNOUNCED

to:

  NOT_USABLE -> NEED_PEER_SIGS -> NOT_DEEP_ENOUGH -> ANNOUNCED

However, this revealed that our state machine is insufficient, so
rework it to be more general and understandable.  In particular,
check for unexpected state transitions, and thus document them.

Note that cg->sent_sigs replaces channel->replied_to_announcement_sigs,
too.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Changelog-Changed: Protocol: We now exchange `announcement_signatures` as soon as we're ready, rather than waiting for 6 blocks (as per recent BOLT update)
2025-05-15 16:40:33 +09:30
Rusty Russell
167767d683 lightningd: don't hand redundant block_height to block notifications.
They can all call get_block_height(); the extra argument confused me and
I thought they were called before the block height was actually updated.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-15 16:40:33 +09:30
Rusty Russell
6b77c95b95 gossipd: don't spam the log on duplicate channel_update.
This message was too verbose (even for trace!)

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-15 16:40:33 +09:30
Rusty Russell
6860cd9cd4 lightningd: split channel update creation functions.
We want a more fine-grained approach, so we now have:

1. update_channel_update() - returns true if it changed.
2. channel_should_enable() - should this channel be marked enabled.
3. arm_refresh_timer() - start a refresh timer for the channel_update.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-15 16:40:33 +09:30
Rusty Russell
9c1c2f687b lightningd: add another stae check function.
In this case a "are we closed onchain".

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-15 16:40:33 +09:30
Rusty Russell
e11c2f6c04 channeld: allow announcement_signatures during splice.
It can actually happen, at least in theory.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-15 16:40:33 +09:30
Rusty Russell
cca6d166c6 closingd: ignore announcement_signatures during closing.
This could always happen, but now we're more correct about send it, it's
a possible race that I've seen in CI.

We can never get a PONG (that's now handled by connectd directly), but we
can definitely see this:

```
2025-05-15T02:29:14.7403081Z         # Even with onchain anchor channel, it still keeps reserve (just in case!).
2025-05-15T02:29:14.7403766Z >       l1.rpc.close(l2.info['id'])
2025-05-15T02:29:14.7404069Z 
2025-05-15T02:29:14.7404248Z tests/test_opening.py:2536:
...
2025-05-15T02:29:14.7413090Z >       return self.sock.recv(length)
2025-05-15T02:29:14.7413353Z E       Failed: Timeout >1800.0s
...
2025-05-15T02:29:14.8097229Z lightningd-1 2025-05-15T01:50:59.538Z DEBUG   022d223620a359a47ff7f7ac447c85c46c923da53389221a0054c11c1e3ca31d59-closingd-chan#1: billboard perm: Expected closing_signed: 0103fad81b49d5e367cd785e3088b9acf356a7984a17a1ccda86d09da41438840b08000067000001000078c3314666731e339c0b8434f7824797a084ed7ca3655991a672da068e2c44cb53b57b53a296c133bc879109a8931dc31e6913a4bda3d58559b99b95663e6d52679cabaccc6e39dbd95a4dac90e75a258893c3aa3f733d1b8890174d5ddea8003cadffe557773c54d2c07ca1d535c4bf85885f879ae466c16a516e8ffcfec174
```

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-15 16:40:33 +09:30
Rusty Russell
53a67b6a86 lightningd: rename anchor_confirms to funding_confirms.
Calling the funding tx an anchor is pre-spec terminology, which is now
confusing; let's rename the variable.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2025-05-15 16:40:33 +09:30