onchaind: see closes when wrong_funding shutdowns are used.

Fairly easy to do, though we also have to add the watch when we load
from the database.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Rusty Russell 2021-03-16 06:56:13 +10:30
parent b62706aa01
commit a1b43a3653
4 changed files with 20 additions and 3 deletions

View File

@ -264,6 +264,9 @@ static void peer_got_shutdown(struct channel *channel, const u8 *msg)
if (!channel->shutdown_wrong_funding)
channel->shutdown_wrong_funding = wrong_funding;
/* We now watch the "wrong" funding, in case we spend it. */
channel_watch_wrong_funding(ld, channel);
/* TODO(cdecker) Selectively save updated fields to DB */
wallet_channel_save(ld->wallet, channel);
}

View File

@ -1353,6 +1353,18 @@ static enum watch_result funding_spent(struct channel *channel,
return onchaind_funding_spent(channel, tx, block->height, false);
}
void channel_watch_wrong_funding(struct lightningd *ld, struct channel *channel)
{
/* Watch the "wrong" funding too, in case we spend it. */
if (channel->shutdown_wrong_funding) {
/* FIXME: Remove arg from cb? */
watch_txo(channel, ld->topology, channel,
&channel->shutdown_wrong_funding->txid,
channel->shutdown_wrong_funding->n,
funding_spent);
}
}
void channel_watch_funding(struct lightningd *ld, struct channel *channel)
{
/* FIXME: Remove arg from cb? */
@ -1361,6 +1373,7 @@ void channel_watch_funding(struct lightningd *ld, struct channel *channel)
watch_txo(channel, ld->topology, channel,
&channel->funding_txid, channel->funding_outnum,
funding_spent);
channel_watch_wrong_funding(ld, channel);
}
static void json_add_peer(struct lightningd *ld,

View File

@ -87,6 +87,8 @@ void activate_peers(struct lightningd *ld);
void drop_to_chain(struct lightningd *ld, struct channel *channel, bool cooperative);
void channel_watch_funding(struct lightningd *ld, struct channel *channel);
/* If this channel has a "wrong funding" shutdown, watch that too. */
void channel_watch_wrong_funding(struct lightningd *ld, struct channel *channel);
struct amount_msat channel_amount_receivable(const struct channel *channel);

View File

@ -2739,6 +2739,5 @@ def test_shutdown_alternate_txid(node_factory, bitcoind):
# We will see our funds return.
assert len(l1.rpc.listfunds()['outputs']) == 1
# FIXME: we should close channels, but we don't!
# wait_for(lambda: l2.rpc.listpeers()['peers'] == [])
# wait_for(lambda: l1.rpc.listpeers()['peers'] == [])
wait_for(lambda: l2.rpc.listpeers()['peers'] == [])
wait_for(lambda: l1.rpc.listpeers()['peers'] == [])