mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-19 07:04:22 +01:00
dual-fund: patch in channel_type logic
There's no reason not to use the channel-types (same as v1s) for v2 opens. Brings us into compliance with ACINQ's implementation afaict
This commit is contained in:
@@ -61,6 +61,10 @@ struct channel_type *default_channel_type(const tal_t *ctx,
|
|||||||
if (feature_negotiated(our_features, their_features,
|
if (feature_negotiated(our_features, their_features,
|
||||||
OPT_ANCHOR_OUTPUTS))
|
OPT_ANCHOR_OUTPUTS))
|
||||||
return channel_type_anchor_outputs(ctx);
|
return channel_type_anchor_outputs(ctx);
|
||||||
|
else if (feature_negotiated(our_features, their_features,
|
||||||
|
OPT_DUAL_FUND))
|
||||||
|
/* OPT_DUAL_FUND implies static remotekey */
|
||||||
|
return channel_type_static_remotekey(ctx);
|
||||||
/* BOLT #2:
|
/* BOLT #2:
|
||||||
* - otherwise, if `option_static_remotekey` was negotiated:
|
* - otherwise, if `option_static_remotekey` was negotiated:
|
||||||
* - the `channel_type` is `option_static_remotekey` (bit 12)
|
* - the `channel_type` is `option_static_remotekey` (bit 12)
|
||||||
|
|||||||
@@ -254,10 +254,6 @@ struct channel *new_unsaved_channel(struct peer *peer,
|
|||||||
channel->static_remotekey_start[LOCAL]
|
channel->static_remotekey_start[LOCAL]
|
||||||
= channel->static_remotekey_start[REMOTE] = 0;
|
= channel->static_remotekey_start[REMOTE] = 0;
|
||||||
|
|
||||||
channel->type = default_channel_type(channel,
|
|
||||||
peer->ld->our_features,
|
|
||||||
peer->their_features);
|
|
||||||
|
|
||||||
channel->future_per_commitment_point = NULL;
|
channel->future_per_commitment_point = NULL;
|
||||||
|
|
||||||
channel->lease_commit_sig = NULL;
|
channel->lease_commit_sig = NULL;
|
||||||
|
|||||||
@@ -1199,7 +1199,8 @@ wallet_commit_channel(struct lightningd *ld,
|
|||||||
const struct amount_sat lease_fee,
|
const struct amount_sat lease_fee,
|
||||||
secp256k1_ecdsa_signature *lease_commit_sig STEALS,
|
secp256k1_ecdsa_signature *lease_commit_sig STEALS,
|
||||||
const u32 lease_chan_max_msat,
|
const u32 lease_chan_max_msat,
|
||||||
const u16 lease_chan_max_ppt)
|
const u16 lease_chan_max_ppt,
|
||||||
|
const struct channel_type *type)
|
||||||
{
|
{
|
||||||
struct amount_msat our_msat, lease_fee_msat;
|
struct amount_msat our_msat, lease_fee_msat;
|
||||||
struct channel_inflight *inflight;
|
struct channel_inflight *inflight;
|
||||||
@@ -1256,7 +1257,9 @@ wallet_commit_channel(struct lightningd *ld,
|
|||||||
channel->scb->funding = *funding;
|
channel->scb->funding = *funding;
|
||||||
channel->scb->cid = channel->cid;
|
channel->scb->cid = channel->cid;
|
||||||
channel->scb->funding_sats = total_funding;
|
channel->scb->funding_sats = total_funding;
|
||||||
channel->scb->type = channel_type_dup(channel->scb, channel->type);
|
|
||||||
|
channel->type = channel_type_dup(channel, type);
|
||||||
|
channel->scb->type = channel_type_dup(channel->scb, type);
|
||||||
|
|
||||||
if (our_upfront_shutdown_script)
|
if (our_upfront_shutdown_script)
|
||||||
channel->shutdown_scriptpubkey[LOCAL]
|
channel->shutdown_scriptpubkey[LOCAL]
|
||||||
@@ -2915,6 +2918,7 @@ static void handle_commit_received(struct subd *dualopend,
|
|||||||
struct openchannel2_psbt_payload *payload;
|
struct openchannel2_psbt_payload *payload;
|
||||||
struct channel_inflight *inflight;
|
struct channel_inflight *inflight;
|
||||||
struct command *cmd = oa->cmd;
|
struct command *cmd = oa->cmd;
|
||||||
|
struct channel_type *channel_type;
|
||||||
secp256k1_ecdsa_signature *lease_commit_sig;
|
secp256k1_ecdsa_signature *lease_commit_sig;
|
||||||
|
|
||||||
if (!fromwire_dualopend_commit_rcvd(tmpctx, msg,
|
if (!fromwire_dualopend_commit_rcvd(tmpctx, msg,
|
||||||
@@ -2942,7 +2946,8 @@ static void handle_commit_received(struct subd *dualopend,
|
|||||||
&lease_fee,
|
&lease_fee,
|
||||||
&lease_commit_sig,
|
&lease_commit_sig,
|
||||||
&lease_chan_max_msat,
|
&lease_chan_max_msat,
|
||||||
&lease_chan_max_ppt)) {
|
&lease_chan_max_ppt,
|
||||||
|
&channel_type)) {
|
||||||
channel_internal_error(channel,
|
channel_internal_error(channel,
|
||||||
"Bad WIRE_DUALOPEND_COMMIT_RCVD: %s",
|
"Bad WIRE_DUALOPEND_COMMIT_RCVD: %s",
|
||||||
tal_hex(msg, msg));
|
tal_hex(msg, msg));
|
||||||
@@ -2976,7 +2981,8 @@ static void handle_commit_received(struct subd *dualopend,
|
|||||||
lease_fee,
|
lease_fee,
|
||||||
lease_commit_sig,
|
lease_commit_sig,
|
||||||
lease_chan_max_msat,
|
lease_chan_max_msat,
|
||||||
lease_chan_max_ppt))) {
|
lease_chan_max_ppt,
|
||||||
|
channel_type))) {
|
||||||
channel_internal_error(channel,
|
channel_internal_error(channel,
|
||||||
"wallet_commit_channel failed"
|
"wallet_commit_channel failed"
|
||||||
" (chan %s)",
|
" (chan %s)",
|
||||||
@@ -3524,7 +3530,8 @@ bool peer_restart_dualopend(struct peer *peer,
|
|||||||
inflight->lease_chan_max_msat,
|
inflight->lease_chan_max_msat,
|
||||||
inflight->lease_chan_max_ppt,
|
inflight->lease_chan_max_ppt,
|
||||||
/* FIXME: requested lease? */
|
/* FIXME: requested lease? */
|
||||||
NULL);
|
NULL,
|
||||||
|
channel->type);
|
||||||
|
|
||||||
subd_send_msg(channel->owner, take(msg));
|
subd_send_msg(channel->owner, take(msg));
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -192,6 +192,9 @@ struct state {
|
|||||||
* channeld-specific as initial channels never have HTLCs. */
|
* channeld-specific as initial channels never have HTLCs. */
|
||||||
struct channel *channel;
|
struct channel *channel;
|
||||||
|
|
||||||
|
/* Channel type we agreed on (even before channel populated) */
|
||||||
|
struct channel_type *channel_type;
|
||||||
|
|
||||||
struct feature_set *our_features;
|
struct feature_set *our_features;
|
||||||
|
|
||||||
/* Tally of which sides are locked, or not */
|
/* Tally of which sides are locked, or not */
|
||||||
@@ -1671,7 +1674,6 @@ static void revert_channel_state(struct state *state)
|
|||||||
struct amount_sat total;
|
struct amount_sat total;
|
||||||
struct amount_msat our_msats;
|
struct amount_msat our_msats;
|
||||||
enum side opener = state->our_role == TX_INITIATOR ? LOCAL : REMOTE;
|
enum side opener = state->our_role == TX_INITIATOR ? LOCAL : REMOTE;
|
||||||
const struct channel_type *type;
|
|
||||||
|
|
||||||
/* We've already checked this */
|
/* We've already checked this */
|
||||||
if (!amount_sat_add(&total, tx_state->opener_funding,
|
if (!amount_sat_add(&total, tx_state->opener_funding,
|
||||||
@@ -1686,8 +1688,6 @@ static void revert_channel_state(struct state *state)
|
|||||||
abort();
|
abort();
|
||||||
|
|
||||||
tal_free(state->channel);
|
tal_free(state->channel);
|
||||||
type = default_channel_type(NULL,
|
|
||||||
state->our_features, state->their_features);
|
|
||||||
state->channel = new_initial_channel(state,
|
state->channel = new_initial_channel(state,
|
||||||
&state->channel_id,
|
&state->channel_id,
|
||||||
&tx_state->funding,
|
&tx_state->funding,
|
||||||
@@ -1706,7 +1706,7 @@ static void revert_channel_state(struct state *state)
|
|||||||
&state->their_points,
|
&state->their_points,
|
||||||
&state->our_funding_pubkey,
|
&state->our_funding_pubkey,
|
||||||
&state->their_funding_pubkey,
|
&state->their_funding_pubkey,
|
||||||
take(type),
|
state->channel_type,
|
||||||
feature_offered(state->their_features,
|
feature_offered(state->their_features,
|
||||||
OPT_LARGE_CHANNELS),
|
OPT_LARGE_CHANNELS),
|
||||||
opener);
|
opener);
|
||||||
@@ -1729,7 +1729,6 @@ static u8 *accepter_commits(struct state *state,
|
|||||||
const u8 *wscript;
|
const u8 *wscript;
|
||||||
u8 *msg;
|
u8 *msg;
|
||||||
char *error;
|
char *error;
|
||||||
const struct channel_type *type;
|
|
||||||
|
|
||||||
/* Find the funding transaction txid */
|
/* Find the funding transaction txid */
|
||||||
psbt_txid(NULL, tx_state->psbt, &tx_state->funding.txid, NULL);
|
psbt_txid(NULL, tx_state->psbt, &tx_state->funding.txid, NULL);
|
||||||
@@ -1786,9 +1785,6 @@ static u8 *accepter_commits(struct state *state,
|
|||||||
"Overflow converting accepter_funding "
|
"Overflow converting accepter_funding "
|
||||||
"to msats");
|
"to msats");
|
||||||
|
|
||||||
type = default_channel_type(NULL,
|
|
||||||
state->our_features, state->their_features);
|
|
||||||
|
|
||||||
/*~ Report the channel parameters to the signer. */
|
/*~ Report the channel parameters to the signer. */
|
||||||
msg = towire_hsmd_ready_channel(NULL,
|
msg = towire_hsmd_ready_channel(NULL,
|
||||||
false, /* is_outbound */
|
false, /* is_outbound */
|
||||||
@@ -1803,7 +1799,7 @@ static u8 *accepter_commits(struct state *state,
|
|||||||
&state->their_funding_pubkey,
|
&state->their_funding_pubkey,
|
||||||
tx_state->remoteconf.to_self_delay,
|
tx_state->remoteconf.to_self_delay,
|
||||||
state->upfront_shutdown_script[REMOTE],
|
state->upfront_shutdown_script[REMOTE],
|
||||||
type);
|
state->channel_type);
|
||||||
wire_sync_write(HSM_FD, take(msg));
|
wire_sync_write(HSM_FD, take(msg));
|
||||||
msg = wire_sync_read(tmpctx, HSM_FD);
|
msg = wire_sync_read(tmpctx, HSM_FD);
|
||||||
if (!fromwire_hsmd_ready_channel_reply(msg))
|
if (!fromwire_hsmd_ready_channel_reply(msg))
|
||||||
@@ -1830,7 +1826,7 @@ static u8 *accepter_commits(struct state *state,
|
|||||||
&state->their_points,
|
&state->their_points,
|
||||||
&state->our_funding_pubkey,
|
&state->our_funding_pubkey,
|
||||||
&state->their_funding_pubkey,
|
&state->their_funding_pubkey,
|
||||||
take(type),
|
state->channel_type,
|
||||||
feature_offered(state->their_features,
|
feature_offered(state->their_features,
|
||||||
OPT_LARGE_CHANNELS),
|
OPT_LARGE_CHANNELS),
|
||||||
REMOTE);
|
REMOTE);
|
||||||
@@ -1959,7 +1955,8 @@ static u8 *accepter_commits(struct state *state,
|
|||||||
tx_state->lease_fee,
|
tx_state->lease_fee,
|
||||||
tx_state->lease_commit_sig,
|
tx_state->lease_commit_sig,
|
||||||
tx_state->lease_chan_max_msat,
|
tx_state->lease_chan_max_msat,
|
||||||
tx_state->lease_chan_max_ppt);
|
tx_state->lease_chan_max_ppt,
|
||||||
|
state->channel_type);
|
||||||
|
|
||||||
wire_sync_write(REQ_FD, take(msg));
|
wire_sync_write(REQ_FD, take(msg));
|
||||||
msg = wire_sync_read(tmpctx, REQ_FD);
|
msg = wire_sync_read(tmpctx, REQ_FD);
|
||||||
@@ -2085,6 +2082,30 @@ static void accepter_start(struct state *state, const u8 *oc2_msg)
|
|||||||
type_to_string(tmpctx, struct channel_id,
|
type_to_string(tmpctx, struct channel_id,
|
||||||
&cid));
|
&cid));
|
||||||
|
|
||||||
|
/* BOLT #2:
|
||||||
|
* The receiving node MUST fail the channel if:
|
||||||
|
*...
|
||||||
|
* - It supports `channel_type` and `channel_type` was set:
|
||||||
|
* - if `type` is not suitable.
|
||||||
|
* - if `type` includes `option_zeroconf` and it does not trust the sender to open an unconfirmed channel.
|
||||||
|
*/
|
||||||
|
if (open_tlv->channel_type) {
|
||||||
|
state->channel_type =
|
||||||
|
channel_type_accept(state,
|
||||||
|
open_tlv->channel_type,
|
||||||
|
state->our_features,
|
||||||
|
state->their_features);
|
||||||
|
if (!state->channel_type)
|
||||||
|
negotiation_failed(state,
|
||||||
|
"Did not support channel_type %s",
|
||||||
|
fmt_featurebits(tmpctx,
|
||||||
|
open_tlv->channel_type));
|
||||||
|
} else
|
||||||
|
state->channel_type
|
||||||
|
= default_channel_type(state,
|
||||||
|
state->our_features,
|
||||||
|
state->their_features);
|
||||||
|
|
||||||
/* Since anchor outputs are optional, we
|
/* Since anchor outputs are optional, we
|
||||||
* only support liquidity ads if those are enabled. */
|
* only support liquidity ads if those are enabled. */
|
||||||
if (open_tlv->request_funds &&
|
if (open_tlv->request_funds &&
|
||||||
@@ -2296,6 +2317,12 @@ static void accepter_start(struct state *state, const u8 *oc2_msg)
|
|||||||
0);
|
0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* BOLT #2:
|
||||||
|
* - if `option_channel_type` was negotiated:
|
||||||
|
* - MUST set `channel_type` to the `channel_type` from `open_channel`
|
||||||
|
*/
|
||||||
|
a_tlv->channel_type = state->channel_type->features;
|
||||||
|
|
||||||
/* BOLT- #2:
|
/* BOLT- #2:
|
||||||
* The accepting node:
|
* The accepting node:
|
||||||
* ...
|
* ...
|
||||||
@@ -2392,7 +2419,6 @@ static u8 *opener_commits(struct state *state,
|
|||||||
u8 *msg;
|
u8 *msg;
|
||||||
char *error;
|
char *error;
|
||||||
struct amount_msat their_msats;
|
struct amount_msat their_msats;
|
||||||
const struct channel_type *type;
|
|
||||||
|
|
||||||
wscript = bitcoin_redeem_2of2(tmpctx, &state->our_funding_pubkey,
|
wscript = bitcoin_redeem_2of2(tmpctx, &state->our_funding_pubkey,
|
||||||
&state->their_funding_pubkey);
|
&state->their_funding_pubkey);
|
||||||
@@ -2442,10 +2468,6 @@ static u8 *opener_commits(struct state *state,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ok, we're mostly good now? Let's do this */
|
|
||||||
type = default_channel_type(NULL,
|
|
||||||
state->our_features, state->their_features);
|
|
||||||
|
|
||||||
/*~ Report the channel parameters to the signer. */
|
/*~ Report the channel parameters to the signer. */
|
||||||
msg = towire_hsmd_ready_channel(NULL,
|
msg = towire_hsmd_ready_channel(NULL,
|
||||||
true, /* is_outbound */
|
true, /* is_outbound */
|
||||||
@@ -2460,7 +2482,7 @@ static u8 *opener_commits(struct state *state,
|
|||||||
&state->their_funding_pubkey,
|
&state->their_funding_pubkey,
|
||||||
tx_state->remoteconf.to_self_delay,
|
tx_state->remoteconf.to_self_delay,
|
||||||
state->upfront_shutdown_script[REMOTE],
|
state->upfront_shutdown_script[REMOTE],
|
||||||
type);
|
state->channel_type);
|
||||||
wire_sync_write(HSM_FD, take(msg));
|
wire_sync_write(HSM_FD, take(msg));
|
||||||
msg = wire_sync_read(tmpctx, HSM_FD);
|
msg = wire_sync_read(tmpctx, HSM_FD);
|
||||||
if (!fromwire_hsmd_ready_channel_reply(msg))
|
if (!fromwire_hsmd_ready_channel_reply(msg))
|
||||||
@@ -2485,7 +2507,7 @@ static u8 *opener_commits(struct state *state,
|
|||||||
&state->their_points,
|
&state->their_points,
|
||||||
&state->our_funding_pubkey,
|
&state->our_funding_pubkey,
|
||||||
&state->their_funding_pubkey,
|
&state->their_funding_pubkey,
|
||||||
take(type),
|
state->channel_type,
|
||||||
feature_offered(state->their_features,
|
feature_offered(state->their_features,
|
||||||
OPT_LARGE_CHANNELS),
|
OPT_LARGE_CHANNELS),
|
||||||
/* Opener is local */
|
/* Opener is local */
|
||||||
@@ -2664,8 +2686,8 @@ static u8 *opener_commits(struct state *state,
|
|||||||
tx_state->lease_fee,
|
tx_state->lease_fee,
|
||||||
tx_state->lease_commit_sig,
|
tx_state->lease_commit_sig,
|
||||||
tx_state->lease_chan_max_msat,
|
tx_state->lease_chan_max_msat,
|
||||||
tx_state->lease_chan_max_ppt);
|
tx_state->lease_chan_max_ppt,
|
||||||
|
state->channel_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void opener_start(struct state *state, u8 *msg)
|
static void opener_start(struct state *state, u8 *msg)
|
||||||
@@ -2696,8 +2718,22 @@ static void opener_start(struct state *state, u8 *msg)
|
|||||||
|
|
||||||
state->our_role = TX_INITIATOR;
|
state->our_role = TX_INITIATOR;
|
||||||
tx_state->tx_locktime = tx_state->psbt->tx->locktime;
|
tx_state->tx_locktime = tx_state->psbt->tx->locktime;
|
||||||
|
|
||||||
open_tlv = tlv_opening_tlvs_new(tmpctx);
|
open_tlv = tlv_opening_tlvs_new(tmpctx);
|
||||||
|
|
||||||
|
/* BOLT #2:
|
||||||
|
* - if it includes `channel_type`:
|
||||||
|
* - MUST set it to a defined type representing the type it wants.
|
||||||
|
* - MUST use the smallest bitmap possible to represent the channel
|
||||||
|
* type.
|
||||||
|
* - SHOULD NOT set it to a type containing a feature which was not
|
||||||
|
* negotiated.
|
||||||
|
*/
|
||||||
|
state->channel_type = default_channel_type(state,
|
||||||
|
state->our_features,
|
||||||
|
state->their_features);
|
||||||
|
open_tlv->channel_type = state->channel_type->features;
|
||||||
|
|
||||||
if (requested_lease)
|
if (requested_lease)
|
||||||
state->requested_lease = tal_steal(state, requested_lease);
|
state->requested_lease = tal_steal(state, requested_lease);
|
||||||
|
|
||||||
@@ -2829,6 +2865,19 @@ static void opener_start(struct state *state, u8 *msg)
|
|||||||
open_err_warn(state, "%s", "Abort requested");
|
open_err_warn(state, "%s", "Abort requested");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* BOLT #2:
|
||||||
|
* - if `channel_type` is set, and `channel_type` was set in
|
||||||
|
* `open_channel`, and they are not equal types:
|
||||||
|
* - MUST reject the channel.
|
||||||
|
*/
|
||||||
|
if (a_tlv->channel_type
|
||||||
|
&& !featurebits_eq(a_tlv->channel_type,
|
||||||
|
state->channel_type->features))
|
||||||
|
negotiation_failed(state,
|
||||||
|
"Return unoffered channel_type: %s",
|
||||||
|
fmt_featurebits(tmpctx,
|
||||||
|
a_tlv->channel_type));
|
||||||
|
|
||||||
/* If we've requested funds and they've failed to provide
|
/* If we've requested funds and they've failed to provide
|
||||||
* to lease us (or give them to us for free?!) then we fail.
|
* to lease us (or give them to us for free?!) then we fail.
|
||||||
* This isn't spec'd but it makes the UX predictable */
|
* This isn't spec'd but it makes the UX predictable */
|
||||||
@@ -3867,7 +3916,6 @@ int main(int argc, char *argv[])
|
|||||||
u8 *msg;
|
u8 *msg;
|
||||||
struct amount_sat total_funding, *requested_lease;
|
struct amount_sat total_funding, *requested_lease;
|
||||||
struct amount_msat our_msat;
|
struct amount_msat our_msat;
|
||||||
const struct channel_type *type;
|
|
||||||
|
|
||||||
subdaemon_setup(argc, argv);
|
subdaemon_setup(argc, argv);
|
||||||
|
|
||||||
@@ -3911,7 +3959,6 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
/* No lease requested at start! */
|
/* No lease requested at start! */
|
||||||
state->requested_lease = NULL;
|
state->requested_lease = NULL;
|
||||||
|
|
||||||
} else if (fromwire_dualopend_reinit(state, msg,
|
} else if (fromwire_dualopend_reinit(state, msg,
|
||||||
&chainparams,
|
&chainparams,
|
||||||
&state->our_features,
|
&state->our_features,
|
||||||
@@ -3948,16 +3995,13 @@ int main(int argc, char *argv[])
|
|||||||
&state->tx_state->lease_commit_sig,
|
&state->tx_state->lease_commit_sig,
|
||||||
&state->tx_state->lease_chan_max_msat,
|
&state->tx_state->lease_chan_max_msat,
|
||||||
&state->tx_state->lease_chan_max_ppt,
|
&state->tx_state->lease_chan_max_ppt,
|
||||||
&requested_lease)) {
|
&requested_lease,
|
||||||
|
&state->channel_type)) {
|
||||||
|
|
||||||
bool ok;
|
bool ok;
|
||||||
|
|
||||||
/*~ We only reconnect on channels that the
|
/*~ We only reconnect on channels that the
|
||||||
* saved the the database (exchanged commitment sigs) */
|
* saved the the database (exchanged commitment sigs) */
|
||||||
type = default_channel_type(NULL,
|
|
||||||
state->our_features,
|
|
||||||
state->their_features);
|
|
||||||
|
|
||||||
if (requested_lease)
|
if (requested_lease)
|
||||||
state->requested_lease = tal_steal(state, requested_lease);
|
state->requested_lease = tal_steal(state, requested_lease);
|
||||||
else
|
else
|
||||||
@@ -3979,7 +4023,7 @@ int main(int argc, char *argv[])
|
|||||||
&state->their_points,
|
&state->their_points,
|
||||||
&state->our_funding_pubkey,
|
&state->our_funding_pubkey,
|
||||||
&state->their_funding_pubkey,
|
&state->their_funding_pubkey,
|
||||||
take(type),
|
state->channel_type,
|
||||||
feature_offered(state->their_features,
|
feature_offered(state->their_features,
|
||||||
OPT_LARGE_CHANNELS),
|
OPT_LARGE_CHANNELS),
|
||||||
opener);
|
opener);
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
#include <common/cryptomsg.h>
|
#include <common/cryptomsg.h>
|
||||||
#include <common/channel_config.h>
|
#include <common/channel_config.h>
|
||||||
#include <common/channel_id.h>
|
#include <common/channel_id.h>
|
||||||
|
#include <common/channel_type.h>
|
||||||
#include <common/derive_basepoints.h>
|
#include <common/derive_basepoints.h>
|
||||||
#include <common/features.h>
|
#include <common/features.h>
|
||||||
#include <common/fee_states.h>
|
#include <common/fee_states.h>
|
||||||
@@ -68,6 +69,7 @@ msgdata,dualopend_reinit,lease_commit_sig,?secp256k1_ecdsa_signature,
|
|||||||
msgdata,dualopend_reinit,lease_chan_max_msat,u32,
|
msgdata,dualopend_reinit,lease_chan_max_msat,u32,
|
||||||
msgdata,dualopend_reinit,lease_chan_max_ppt,u16,
|
msgdata,dualopend_reinit,lease_chan_max_ppt,u16,
|
||||||
msgdata,dualopend_reinit,requested_lease,?amount_sat,
|
msgdata,dualopend_reinit,requested_lease,?amount_sat,
|
||||||
|
msgdata,dualopend_reinit,channel_type,channel_type,
|
||||||
|
|
||||||
# dualopend->master: they offered channel, should we continue?
|
# dualopend->master: they offered channel, should we continue?
|
||||||
msgtype,dualopend_got_offer,7005
|
msgtype,dualopend_got_offer,7005
|
||||||
@@ -155,6 +157,7 @@ msgdata,dualopend_commit_rcvd,lease_fee,amount_sat,
|
|||||||
msgdata,dualopend_commit_rcvd,lease_commit_sig,?secp256k1_ecdsa_signature,
|
msgdata,dualopend_commit_rcvd,lease_commit_sig,?secp256k1_ecdsa_signature,
|
||||||
msgdata,dualopend_commit_rcvd,lease_chan_max_msat,u32,
|
msgdata,dualopend_commit_rcvd,lease_chan_max_msat,u32,
|
||||||
msgdata,dualopend_commit_rcvd,lease_chan_max_ppt,u16,
|
msgdata,dualopend_commit_rcvd,lease_chan_max_ppt,u16,
|
||||||
|
msgdata,dualopend_commit_rcvd,channel_type,channel_type,
|
||||||
|
|
||||||
# dualopend->master: peer updated the psbt
|
# dualopend->master: peer updated the psbt
|
||||||
msgtype,dualopend_psbt_changed,7107
|
msgtype,dualopend_psbt_changed,7107
|
||||||
|
|||||||
|
Can't render this file because it has a wrong number of fields in line 15.
|
Reference in New Issue
Block a user