Skip to content

Commit

Permalink
df-rbf: only permit the channel initiator to init RBF
Browse files Browse the repository at this point in the history
We're *mostly* set up for both sides doing RBF, except that it reverses
the callback flow (using the plugin vs RPC calls) and we're not
currently smart enough to flip between them gracefully
  • Loading branch information
niftynei authored and vibhaa committed Mar 24, 2021
1 parent d0981a2 commit ab7b3d8
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 0 deletions.
5 changes: 5 additions & 0 deletions lightningd/dual_open_control.c
Original file line number Diff line number Diff line change
Expand Up @@ -1807,6 +1807,11 @@ json_openchannel_bump(struct command *cmd,
" Current state %s, expected state %s",
channel_state_name(channel),
channel_state_str(DUALOPEND_AWAITING_LOCKIN));
if (channel->opener != LOCAL)
return command_fail(cmd, FUNDING_STATE_INVALID,
"Only the channel opener can initiate an"
" RBF attempt");

/* Ok, we're kosher to start */
channel->open_attempt = oa = new_channel_open_attempt(channel);
oa->funding = *amount;
Expand Down
4 changes: 4 additions & 0 deletions openingd/dualopend.c
Original file line number Diff line number Diff line change
Expand Up @@ -2744,6 +2744,10 @@ static void rbf_remote_start(struct state *state, const u8 *rbf_msg)
check_channel_id(state, &cid, &state->channel_id);
peer_billboard(false, "channel rbf: init received from peer");

if (state->our_role == TX_INITIATOR)
rbf_failed(state, "Only the channel initiator is allowed"
" to initiate RBF");

/* Have you sent us everything we need yet ? */
if (!state->tx_state->remote_funding_sigs_rcvd)
rbf_failed(state, "Last funding attempt not complete:"
Expand Down

0 comments on commit ab7b3d8

Please sign in to comment.