channel control: don't allow peer to cancel channel

restrict fundchannel_cancel usage to only the opener side

Changelog-Changed: Only the opener of a fundchannel can cancel the channel open with fundchannel_cancel
This commit is contained in:
lisa neigut 2019-12-11 18:46:08 -06:00 committed by Rusty Russell
parent e6c486f87c
commit 278b69dfbe
2 changed files with 11 additions and 1 deletions

View file

@ -726,6 +726,11 @@ struct command_result *cancel_channel_before_broadcast(struct command *cmd,
buffer + cidtok->start);
}
if (cancel_channel->funder == REMOTE)
return command_fail(cmd, LIGHTNINGD,
"Cannot cancel channel that was "
"initiated by peer");
/* Check if we broadcast the transaction. (We store the transaction type into DB
* before broadcast). */
enum wallet_tx_type type;

View file

@ -1030,7 +1030,12 @@ def test_funding_external_wallet_corners(node_factory, bitcoind):
# Be sure fundchannel_complete is successful
assert l1.rpc.fundchannel_complete(l2.info['id'], prep['txid'], txout)['commitments_secured']
# Canceld channel after fundchannel_complete
# Peer shouldn't be able to cancel channel
with pytest.raises(RpcError, match=r'Cannot cancel channel that was initiated by peer'):
l2.rpc.fundchannel_cancel(l1.info['id'])
# We can cancel channel after fundchannel_complete
assert l1.rpc.fundchannel_cancel(l2.info['id'])['cancelled']
# l2 won't give up, since it considers error "soft".