mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-20 23:54:22 +01:00
df: start of RPC for bumping the fee!
Doesn't call into dualopend yet
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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 = {
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user