Skip to content

Commit

Permalink
onchaind: see closes when wrong_funding shutdowns are used.
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
rustyrussell committed Mar 10, 2021
1 parent 4321f6e commit ff85516
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 3 deletions.
3 changes: 3 additions & 0 deletions lightningd/channel_control.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
13 changes: 13 additions & 0 deletions lightningd/peer_control.c
Original file line number Diff line number Diff line change
Expand Up @@ -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? */
Expand All @@ -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,
Expand Down
2 changes: 2 additions & 0 deletions lightningd/peer_control.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
5 changes: 2 additions & 3 deletions tests/test_closing.py
Original file line number Diff line number Diff line change
Expand Up @@ -2738,6 +2738,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'] == [])

0 comments on commit ff85516

Please sign in to comment.