Skip to content

Commit

Permalink
dual-fund: Fail if you try to buy a liquidity ad w/o dualfunding on
Browse files Browse the repository at this point in the history
Fixes #5271

In-Collaboration-With: Base58 'n Coding Seminar Participants

Changelog-Changed: `fundchannel` now errors if you try to buy a liquidity ad but dont' have `experimental-dual-fund` enabled
  • Loading branch information
niftynei authored and cdecker committed Jul 12, 2022
1 parent f98df63 commit 49d7e7f
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 1 deletion.
10 changes: 9 additions & 1 deletion plugins/spender/multifundchannel.c
Original file line number Diff line number Diff line change
Expand Up @@ -1611,13 +1611,21 @@ connect_ok(struct command *cmd,
json_tok_full_len(features_tok),
json_tok_full(buf, features_tok));

dest->state = MULTIFUNDCHANNEL_CONNECTED;

/* Set the open protocol to use now */
if (feature_negotiated(plugin_feature_set(mfc->cmd->plugin),
dest->their_features,
OPT_DUAL_FUND))
dest->protocol = OPEN_CHANNEL;
else if (!amount_sat_zero(dest->request_amt) || !(!dest->rates))
/* Return an error */
fail_destination_msg(dest, FUNDING_V2_NOT_SUPPORTED,
"Tried to buy a liquidity ad"
" but we(?) don't have"
" experimental-dual-fund"
" enabled");

dest->state = MULTIFUNDCHANNEL_CONNECTED;
return connect_done(dest);
}

Expand Down
19 changes: 19 additions & 0 deletions tests/test_opening.py
Original file line number Diff line number Diff line change
Expand Up @@ -1391,3 +1391,22 @@ def test_zeroconf_forward(node_factory, bitcoind):
wait_for(lambda: len(l3.rpc.listchannels()['channels']) == 4)
inv = l1.rpc.invoice(42, 'back1', 'desc')['bolt11']
l3.rpc.pay(inv)


@pytest.mark.openchannel('v1')
def test_buy_liquidity_ad_no_v2(node_factory, bitcoind):
""" Test that you can't actually request amt for a
node that doesn' support v2 opens """

l1, l2, = node_factory.get_nodes(2)
amount = 500000
feerate = 2000

l1.fundwallet(amount * 100)
l1.rpc.connect(l2.info['id'], 'localhost', l2.port)

# l1 leases a channel from l2
with pytest.raises(RpcError, match=r"Tried to buy a liquidity ad but we[(][?][)] don't have experimental-dual-fund enabled"):
l1.rpc.fundchannel(l2.info['id'], amount, request_amt=amount,
feerate='{}perkw'.format(feerate),
compact_lease='029a002d000000004b2003e8')

0 comments on commit 49d7e7f

Please sign in to comment.