df: start of RPC for bumping the fee!

Doesn't call into dualopend yet
This commit is contained in:
niftynei
2021-01-19 19:40:01 -06:00
committed by neil saitug
parent d49db8ad41
commit 1e9a900918
3 changed files with 66 additions and 0 deletions

View File

@@ -56,6 +56,7 @@ static const errcode_t FUNDING_CANCEL_NOT_SAFE = 308;
static const errcode_t FUNDING_PSBT_INVALID = 309; static const errcode_t FUNDING_PSBT_INVALID = 309;
static const errcode_t FUNDING_V2_NOT_SUPPORTED = 310; static const errcode_t FUNDING_V2_NOT_SUPPORTED = 310;
static const errcode_t FUNDING_UNKNOWN_CHANNEL = 311; static const errcode_t FUNDING_UNKNOWN_CHANNEL = 311;
static const errcode_t FUNDING_STATE_INVALID = 312;
/* `connect` errors */ /* `connect` errors */
static const errcode_t CONNECT_NO_KNOWN_ADDRESS = 400; static const errcode_t CONNECT_NO_KNOWN_ADDRESS = 400;

View File

@@ -1092,6 +1092,15 @@ class LightningRpc(UnixDomainSocketRpc):
} }
return self.call("openchannel_update", payload) return self.call("openchannel_update", payload)
def openchannel_bump(self, channel_id, amount, initialpsbt):
""" Initiate an RBF for an in-progress open """
payload = {
"channel_id": channel_id,
"amount": amount,
"initialpsbt": initialpsbt,
}
return self.call("openchannel_bump", payload)
def paystatus(self, bolt11=None): def paystatus(self, bolt11=None):
"""Detail status of attempts to pay {bolt11} or any.""" """Detail status of attempts to pay {bolt11} or any."""
payload = { payload = {

View File

@@ -1681,6 +1681,54 @@ send_msg:
subd_send_msg(channel->owner, take(msg)); subd_send_msg(channel->owner, take(msg));
} }
static struct command_result *
json_openchannel_bump(struct command *cmd,
const char *buffer,
const jsmntok_t *obj UNNEEDED,
const jsmntok_t *params)
{
struct channel_id *cid;
struct channel *channel;
struct amount_sat *amount;
struct wally_psbt *psbt;
struct open_attempt *oa;
if (!param(cmd, buffer, params,
p_req("channel_id", param_channel_id, &cid),
p_req("amount", param_sat, &amount),
p_req("initialpsbt", param_psbt, &psbt),
NULL))
return command_param_failed();
/* Are we in a state where we can attempt an RBF? */
channel = channel_by_cid(cmd->ld, cid);
if (!channel)
return command_fail(cmd, FUNDING_UNKNOWN_CHANNEL,
"Unknown channel %s",
type_to_string(tmpctx, struct channel_id,
cid));
if (channel->open_attempt)
return command_fail(cmd, LIGHTNINGD,
"Commitments for this channel not "
"secured, see `openchannel_update`");
if (channel->state != DUALOPEND_AWAITING_LOCKIN)
return command_fail(cmd, FUNDING_STATE_INVALID,
"Channel not eligible to init RBF."
" Current state %s, expected state %s",
channel_state_name(channel),
channel_state_str(DUALOPEND_AWAITING_LOCKIN));
/* Ok, we're kosher to start */
channel->open_attempt = oa = new_channel_open_attempt(channel);
oa->funding = *amount;
oa->cmd = cmd;
oa->our_upfront_shutdown_script
= channel->shutdown_scriptpubkey[LOCAL];
/* FIXME: call dualopend with psbt + amount!! */
return command_still_pending(cmd);
}
static struct command_result * static struct command_result *
json_openchannel_signed(struct command *cmd, json_openchannel_signed(struct command *cmd,
@@ -2327,10 +2375,18 @@ static const struct json_command openchannel_signed_command = {
"Send our {signed_psbt}'s tx sigs for {channel_id}." "Send our {signed_psbt}'s tx sigs for {channel_id}."
}; };
static const struct json_command openchannel_bump_command = {
"openchannel_bump",
"channels",
json_openchannel_bump,
"Attempt to bump the fee on {channel_id}'s funding transaction."
};
#if EXPERIMENTAL_FEATURES #if EXPERIMENTAL_FEATURES
AUTODATA(json_command, &openchannel_init_command); AUTODATA(json_command, &openchannel_init_command);
AUTODATA(json_command, &openchannel_update_command); AUTODATA(json_command, &openchannel_update_command);
AUTODATA(json_command, &openchannel_signed_command); AUTODATA(json_command, &openchannel_signed_command);
AUTODATA(json_command, &openchannel_bump_command);
#endif /* EXPERIMENTAL_FEATURES */ #endif /* EXPERIMENTAL_FEATURES */
void peer_restart_dualopend(struct peer *peer, void peer_restart_dualopend(struct peer *peer,