liquidity-ad: request amount, pass through to dualopend

Changelog-Experimental: EXPERIMENTAL-DUAL-FUND: JSON-RPC: openchannel_init now takes a `requested_amt`, which is an amount to request from peer
This commit is contained in:
niftynei 2021-06-08 16:50:41 -05:00 committed by neil saitug
parent f1b7e5fffe
commit e41d2dc0e6
8 changed files with 131 additions and 27 deletions

View File

@ -1009,7 +1009,7 @@ class LightningRpc(UnixDomainSocketRpc):
}
return self.call("pay", payload)
def openchannel_init(self, node_id, channel_amount, psbt, feerate=None, funding_feerate=None, announce=True, close_to=None, *args, **kwargs):
def openchannel_init(self, node_id, channel_amount, psbt, feerate=None, funding_feerate=None, announce=True, close_to=None, request_amt=None, *args, **kwargs):
"""Initiate an openchannel with a peer """
payload = {
"id": node_id,
@ -1019,6 +1019,7 @@ class LightningRpc(UnixDomainSocketRpc):
"funding_feerate": funding_feerate,
"announce": announce,
"close_to": close_to,
"request_amt": request_amt,
}
return self.call("openchannel_init", payload)

View File

@ -3,7 +3,7 @@
lightning-openchannel_init - Command to initiate a channel to a peer
.SH SYNOPSIS
\fBopenchannel_init\fR \fIid\fR \fIamount\fR \fIinitalpsbt\fR [\fIcommitment_feerate\fR] [\fIfunding_feerate\fR] [\fIannounce\fR] [\fIclose_to\fR]
\fBopenchannel_init\fR \fIid\fR \fIamount\fR \fIinitalpsbt\fR [\fIcommitment_feerate\fR] [\fIfunding_feerate\fR] [\fIannounce\fR] [\fIclose_to\fR] [\fIrequest_amt\fR]
.SH DESCRIPTION
@ -43,6 +43,11 @@ funding transaction\. Defaults to 'opening' feerate\.
sent on close\. Only valid if both peers have negotiated
\fBoption_upfront_shutdown_script\fR\.
\fIrequest_amt\fR is an amount of liquidity you'd like to lease from the peer\.
If peer supports \fBoption_will_fund\fR, indicates to them to include this
much liquidity into the channel\.
.SH RETURN VALUE
On success, an object is returned, containing:
@ -63,6 +68,15 @@ If the peer does not support \fBoption_dual_fund\fR, this command
will return an error\.
If you sent a \fIrequest_amt\fR and the peer supports \fBoption_will_fund\fR and is
interested in leasing you liquidity in this channel, returns their updated
channel fee max (\fIchannel_fee_proportional_basis\fR, \fIchannel_fee_base_msat\fR),
updated rate card for the lease fee (\fIlease_fee_proportional_basis\fR,
\fIlease_fee_base_sat\fR) and their on-chain weight \fIweight_charge\fR, which will
be added to the lease fee at a rate of \fIfunding_feerate\fR \fI \fRweight_charge*
/ 1000\.
On error the returned object will contain \fBcode\fR and \fBmessage\fR properties,
with \fBcode\fR being one of the following:
@ -105,4 +119,4 @@ lightning-fundchannel_\fBcomplete\fR(7), \fBlightning-fundchannel\fR(7),
Main web site: \fIhttps://github.com/ElementsProject/lightning\fR
\" SHA256STAMP:ba03cf64c3578303a0cdfcf94546bb94d86ecf3d6187b16871a39c08b3a40f38
\" SHA256STAMP:13023bb80ee4a7f6a94a168399a01e05c6c5ab68e9eec5795ebd5f49207a03ac

View File

@ -4,7 +4,7 @@ lightning-openchannel\_init -- Command to initiate a channel to a peer
SYNOPSIS
--------
**openchannel_init** *id* *amount* *initalpsbt* \[*commitment_feerate*\] \[*funding_feerate*\] \[*announce*\] \[*close_to*\]
**openchannel_init** *id* *amount* *initalpsbt* \[*commitment_feerate*\] \[*funding_feerate*\] \[*announce*\] \[*close_to*\] \[*request_amt*\]
DESCRIPTION
-----------
@ -38,6 +38,10 @@ funding transaction. Defaults to 'opening' feerate.
sent on close. Only valid if both peers have negotiated
`option_upfront_shutdown_script`.
*request_amt* is an amount of liquidity you'd like to lease from the peer.
If peer supports `option_will_fund`, indicates to them to include this
much liquidity into the channel.
RETURN VALUE
------------
@ -53,6 +57,14 @@ On success, an object is returned, containing:
If the peer does not support `option_dual_fund`, this command
will return an error.
If you sent a *request_amt* and the peer supports `option_will_fund` and is
interested in leasing you liquidity in this channel, returns their updated
channel fee max (*channel_fee_proportional_basis*, *channel_fee_base_msat*),
updated rate card for the lease fee (*lease_fee_proportional_basis*,
*lease_fee_base_sat*) and their on-chain weight *weight_charge*, which will
be added to the lease fee at a rate of *funding_feerate* * *weight_charge*
/ 1000.
On error the returned object will contain `code` and `message` properties,
with `code` being one of the following:

View File

@ -701,7 +701,8 @@ openchannel2_hook_cb(struct openchannel2_payload *payload STEALS)
msg = towire_dualopend_got_offer_reply(NULL,
payload->accepter_funding,
payload->psbt,
payload->our_shutdown_scriptpubkey);
payload->our_shutdown_scriptpubkey,
payload->rates);
subd_send_msg(dualopend, take(msg));
}
@ -1733,7 +1734,9 @@ static void accepter_got_offer(struct subd *dualopend,
&payload->max_accepted_htlcs,
&payload->channel_flags,
&payload->locktime,
&payload->shutdown_scriptpubkey)) {
&payload->shutdown_scriptpubkey,
&payload->requested_lease_amt,
&payload->lease_blockheight_start)) {
channel_internal_error(channel, "Bad DUALOPEND_GOT_OFFER: %s",
tal_hex(tmpctx, msg));
return;
@ -2343,7 +2346,7 @@ static struct command_result *json_openchannel_init(struct command *cmd,
bool *announce_channel;
u32 *feerate_per_kw_funding;
u32 *feerate_per_kw;
struct amount_sat *amount, psbt_val;
struct amount_sat *amount, psbt_val, *request_amt;
struct wally_psbt *psbt;
const u8 *our_upfront_shutdown_script;
struct open_attempt *oa;
@ -2357,6 +2360,7 @@ static struct command_result *json_openchannel_init(struct command *cmd,
p_opt("funding_feerate", param_feerate, &feerate_per_kw_funding),
p_opt_def("announce", param_bool, &announce_channel, true),
p_opt("close_to", param_bitcoin_address, &our_upfront_shutdown_script),
p_opt_def("request_amt", param_sat, &request_amt, AMOUNT_SAT(0)),
NULL))
return command_param_failed();
@ -2488,7 +2492,9 @@ static struct command_result *json_openchannel_init(struct command *cmd,
oa->our_upfront_shutdown_script,
*feerate_per_kw,
*feerate_per_kw_funding,
channel->channel_flags);
channel->channel_flags,
*request_amt,
get_block_height(cmd->ld->topology));
subd_send_msg(channel->owner, take(msg));
return command_still_pending(cmd);

View File

@ -119,6 +119,9 @@ struct tx_state {
/* Have we gotten the peer's tx-sigs yet? */
bool remote_funding_sigs_rcvd;
/* Rates that we're using for this open... */
struct lease_rates *rates;
};
static struct tx_state *new_tx_state(const tal_t *ctx)
@ -1908,7 +1911,8 @@ static void accepter_start(struct state *state, const u8 *oc2_msg)
struct channel_id cid, full_cid;
char *err_reason;
u8 *msg;
struct amount_sat total;
struct amount_sat total, requested_amt;
u32 lease_blockheight_start;
enum dualopend_wire msg_type;
struct tx_state *tx_state = state->tx_state;
@ -1943,6 +1947,19 @@ static void accepter_start(struct state *state, const u8 *oc2_msg)
} else
state->upfront_shutdown_script[REMOTE] = NULL;
/* This is an `option_will_fund` request */
if (open_tlv->request_funds) {
/* FIXME: Do we support this? */
requested_amt
= amount_sat(open_tlv->request_funds->requested_sats);
lease_blockheight_start
= open_tlv->request_funds->blockheight;
} else {
requested_amt = AMOUNT_SAT(0);
lease_blockheight_start = 0;
}
/* BOLT-* #2
* If the peer's revocation basepoint is unknown (e.g.
* `open_channel2`), a temporary `channel_id` should be found
@ -2006,7 +2023,9 @@ static void accepter_start(struct state *state, const u8 *oc2_msg)
tx_state->remoteconf.max_accepted_htlcs,
state->channel_flags,
tx_state->tx_locktime,
state->upfront_shutdown_script[REMOTE]);
state->upfront_shutdown_script[REMOTE],
requested_amt,
lease_blockheight_start);
wire_sync_write(REQ_FD, take(msg));
msg = wire_sync_read(tmpctx, REQ_FD);
@ -2021,7 +2040,8 @@ static void accepter_start(struct state *state, const u8 *oc2_msg)
if (!fromwire_dualopend_got_offer_reply(state, msg,
&tx_state->accepter_funding,
&tx_state->psbt,
&state->upfront_shutdown_script[LOCAL]))
&state->upfront_shutdown_script[LOCAL],
&tx_state->rates))
master_badmsg(WIRE_DUALOPEND_GOT_OFFER_REPLY, msg);
if (!tx_state->psbt)
@ -2031,6 +2051,19 @@ static void accepter_start(struct state *state, const u8 *oc2_msg)
/* Locktimes must match! */
tx_state->psbt->tx->locktime = tx_state->tx_locktime;
/* BOLT- #2:
*
* - if they decide to accept the offer:
* ...
* - MUST set `funding_satoshis` to a value greater than 0msat
*/
if (tx_state->rates && amount_sat_zero(tx_state->accepter_funding)) {
status_broken("opt_will_fund ad passed in, but no funding");
negotiation_failed(state, "We're unable to accept"
" your lease offer.");
return;
}
/* Check that total funding doesn't overflow */
if (!amount_sat_add(&total, tx_state->opener_funding,
tx_state->accepter_funding))
@ -2400,7 +2433,8 @@ static void opener_start(struct state *state, u8 *msg)
struct tlv_accept_tlvs *a_tlv;
struct channel_id cid;
char *err_reason;
struct amount_sat total;
struct amount_sat total, requested_sats;
u32 current_blockheight;
struct tx_state *tx_state = state->tx_state;
if (!fromwire_dualopend_opener_init(state, msg,
@ -2409,7 +2443,9 @@ static void opener_start(struct state *state, u8 *msg)
&state->upfront_shutdown_script[LOCAL],
&state->feerate_per_kw_commitment,
&tx_state->feerate_per_kw_funding,
&state->channel_flags))
&state->channel_flags,
&requested_sats,
&current_blockheight))
master_badmsg(WIRE_DUALOPEND_OPENER_INIT, msg);
state->our_role = TX_INITIATOR;
@ -2438,6 +2474,14 @@ static void opener_start(struct state *state, u8 *msg)
state->upfront_shutdown_script[LOCAL];
}
if (!amount_sat_zero(requested_sats)) {
open_tlv->request_funds =
tal(open_tlv, struct tlv_opening_tlvs_request_funds);
open_tlv->request_funds->requested_sats =
requested_sats.satoshis; /* Raw: struct -> wire */
open_tlv->request_funds->blockheight = current_blockheight;
}
msg = towire_open_channel2(NULL,
&chainparams->genesis_blockhash,
&state->channel_id,

View File

@ -9,6 +9,7 @@
#include <common/htlc_wire.h>
#include <common/penalty_base.h>
#include <common/per_peer_state.h>
#include <wire/peer_wire.h>
msgtype,dualopend_init,7000
# Which network are we configured for?
@ -79,6 +80,8 @@ msgdata,dualopend_got_offer,channel_flags,u8,
msgdata,dualopend_got_offer,locktime,u32,
msgdata,dualopend_got_offer,shutdown_len,u16,
msgdata,dualopend_got_offer,shutdown_scriptpubkey,u8,shutdown_len
msgdata,dualopend_got_offer,requested_amt,amount_sat,
msgdata,dualopend_got_offer,lease_blockheight_start,u32,
# master->dualopend: reply back with our first funding info/contribs
msgtype,dualopend_got_offer_reply,7105
@ -86,6 +89,7 @@ msgdata,dualopend_got_offer_reply,accepter_funding,amount_sat,
msgdata,dualopend_got_offer_reply,psbt,wally_psbt,
msgdata,dualopend_got_offer_reply,shutdown_len,u16,
msgdata,dualopend_got_offer_reply,our_shutdown_scriptpubkey,?u8,shutdown_len
msgdata,dualopend_got_offer_reply,lease_rates,?lease_rates,
# dualopend->master: they offered a RBF, should we continue?
msgtype,dualopend_got_rbf_offer,7500
@ -161,6 +165,8 @@ msgdata,dualopend_opener_init,local_shutdown_scriptpubkey,u8,local_shutdown_len
msgdata,dualopend_opener_init,feerate_per_kw,u32,
msgdata,dualopend_opener_init,feerate_per_kw_funding,u32,
msgdata,dualopend_opener_init,channel_flags,u8,
msgdata,dualopend_opener_init,requested_sats,amount_sat,
msgdata,dualopend_opener_init,blockheight,u32,
# dualopend->master received tx_sigs from peer
msgtype,dualopend_funding_sigs,7010

Can't render this file because it has a wrong number of fields in line 14.

View File

@ -247,7 +247,7 @@ bool fromwire_dualopend_reinit(const tal_t *ctx, const void *p, const struct cha
/* WIRE: DUALOPEND_GOT_OFFER */
/* dualopend->master: they offered channel */
u8 *towire_dualopend_got_offer(const tal_t *ctx, const struct channel_id *channel_id, struct amount_sat opener_funding, struct amount_sat dust_limit_satoshis, struct amount_msat max_htlc_value_in_flight_msat, struct amount_msat htlc_minimum_msat, u32 feerate_per_kw_funding, u32 feerate_per_kw_commitment, u16 to_self_delay, u16 max_accepted_htlcs, u8 channel_flags, u32 locktime, const u8 *shutdown_scriptpubkey)
u8 *towire_dualopend_got_offer(const tal_t *ctx, const struct channel_id *channel_id, struct amount_sat opener_funding, struct amount_sat dust_limit_satoshis, struct amount_msat max_htlc_value_in_flight_msat, struct amount_msat htlc_minimum_msat, u32 feerate_per_kw_funding, u32 feerate_per_kw_commitment, u16 to_self_delay, u16 max_accepted_htlcs, u8 channel_flags, u32 locktime, const u8 *shutdown_scriptpubkey, struct amount_sat requested_amt, u32 lease_blockheight_start)
{
u16 shutdown_len = tal_count(shutdown_scriptpubkey);
u8 *p = tal_arr(ctx, u8, 0);
@ -266,10 +266,12 @@ u8 *towire_dualopend_got_offer(const tal_t *ctx, const struct channel_id *channe
towire_u32(&p, locktime);
towire_u16(&p, shutdown_len);
towire_u8_array(&p, shutdown_scriptpubkey, shutdown_len);
towire_amount_sat(&p, requested_amt);
towire_u32(&p, lease_blockheight_start);
return memcheck(p, tal_count(p));
}
bool fromwire_dualopend_got_offer(const tal_t *ctx, const void *p, struct channel_id *channel_id, struct amount_sat *opener_funding, struct amount_sat *dust_limit_satoshis, struct amount_msat *max_htlc_value_in_flight_msat, struct amount_msat *htlc_minimum_msat, u32 *feerate_per_kw_funding, u32 *feerate_per_kw_commitment, u16 *to_self_delay, u16 *max_accepted_htlcs, u8 *channel_flags, u32 *locktime, u8 **shutdown_scriptpubkey)
bool fromwire_dualopend_got_offer(const tal_t *ctx, const void *p, struct channel_id *channel_id, struct amount_sat *opener_funding, struct amount_sat *dust_limit_satoshis, struct amount_msat *max_htlc_value_in_flight_msat, struct amount_msat *htlc_minimum_msat, u32 *feerate_per_kw_funding, u32 *feerate_per_kw_commitment, u16 *to_self_delay, u16 *max_accepted_htlcs, u8 *channel_flags, u32 *locktime, u8 **shutdown_scriptpubkey, struct amount_sat *requested_amt, u32 *lease_blockheight_start)
{
u16 shutdown_len;
@ -293,12 +295,14 @@ bool fromwire_dualopend_got_offer(const tal_t *ctx, const void *p, struct channe
// 2nd case shutdown_scriptpubkey
*shutdown_scriptpubkey = shutdown_len ? tal_arr(ctx, u8, shutdown_len) : NULL;
fromwire_u8_array(&cursor, &plen, *shutdown_scriptpubkey, shutdown_len);
*requested_amt = fromwire_amount_sat(&cursor, &plen);
*lease_blockheight_start = fromwire_u32(&cursor, &plen);
return cursor != NULL;
}
/* WIRE: DUALOPEND_GOT_OFFER_REPLY */
/* master->dualopend: reply back with our first funding info/contribs */
u8 *towire_dualopend_got_offer_reply(const tal_t *ctx, struct amount_sat accepter_funding, const struct wally_psbt *psbt, const u8 *our_shutdown_scriptpubkey)
u8 *towire_dualopend_got_offer_reply(const tal_t *ctx, struct amount_sat accepter_funding, const struct wally_psbt *psbt, const u8 *our_shutdown_scriptpubkey, const struct lease_rates *lease_rates)
{
u16 shutdown_len = tal_count(our_shutdown_scriptpubkey);
u8 *p = tal_arr(ctx, u8, 0);
@ -308,10 +312,16 @@ u8 *towire_dualopend_got_offer_reply(const tal_t *ctx, struct amount_sat accepte
towire_wally_psbt(&p, psbt);
towire_u16(&p, shutdown_len);
towire_u8_array(&p, our_shutdown_scriptpubkey, shutdown_len);
if (!lease_rates)
towire_bool(&p, false);
else {
towire_bool(&p, true);
towire_lease_rates(&p, lease_rates);
}
return memcheck(p, tal_count(p));
}
bool fromwire_dualopend_got_offer_reply(const tal_t *ctx, const void *p, struct amount_sat *accepter_funding, struct wally_psbt **psbt, u8 **our_shutdown_scriptpubkey)
bool fromwire_dualopend_got_offer_reply(const tal_t *ctx, const void *p, struct amount_sat *accepter_funding, struct wally_psbt **psbt, u8 **our_shutdown_scriptpubkey, struct lease_rates **lease_rates)
{
u16 shutdown_len;
@ -326,6 +336,12 @@ bool fromwire_dualopend_got_offer_reply(const tal_t *ctx, const void *p, struct
// 2nd case our_shutdown_scriptpubkey
*our_shutdown_scriptpubkey = shutdown_len ? tal_arr(ctx, u8, shutdown_len) : NULL;
fromwire_u8_array(&cursor, &plen, *our_shutdown_scriptpubkey, shutdown_len);
if (!fromwire_bool(&cursor, &plen))
*lease_rates = NULL;
else {
*lease_rates = tal(ctx, struct lease_rates);
fromwire_lease_rates(&cursor, &plen, *lease_rates);
}
return cursor != NULL;
}
@ -605,7 +621,7 @@ bool fromwire_dualopend_fail(const tal_t *ctx, const void *p, wirestring **reaso
/* WIRE: DUALOPEND_OPENER_INIT */
/* master->dualopend: hello */
u8 *towire_dualopend_opener_init(const tal_t *ctx, const struct wally_psbt *psbt, struct amount_sat funding_amount, const u8 *local_shutdown_scriptpubkey, u32 feerate_per_kw, u32 feerate_per_kw_funding, u8 channel_flags)
u8 *towire_dualopend_opener_init(const tal_t *ctx, const struct wally_psbt *psbt, struct amount_sat funding_amount, const u8 *local_shutdown_scriptpubkey, u32 feerate_per_kw, u32 feerate_per_kw_funding, u8 channel_flags, struct amount_sat requested_sats, u32 blockheight)
{
u16 local_shutdown_len = tal_count(local_shutdown_scriptpubkey);
u8 *p = tal_arr(ctx, u8, 0);
@ -618,10 +634,12 @@ u8 *towire_dualopend_opener_init(const tal_t *ctx, const struct wally_psbt *psbt
towire_u32(&p, feerate_per_kw);
towire_u32(&p, feerate_per_kw_funding);
towire_u8(&p, channel_flags);
towire_amount_sat(&p, requested_sats);
towire_u32(&p, blockheight);
return memcheck(p, tal_count(p));
}
bool fromwire_dualopend_opener_init(const tal_t *ctx, const void *p, struct wally_psbt **psbt, struct amount_sat *funding_amount, u8 **local_shutdown_scriptpubkey, u32 *feerate_per_kw, u32 *feerate_per_kw_funding, u8 *channel_flags)
bool fromwire_dualopend_opener_init(const tal_t *ctx, const void *p, struct wally_psbt **psbt, struct amount_sat *funding_amount, u8 **local_shutdown_scriptpubkey, u32 *feerate_per_kw, u32 *feerate_per_kw_funding, u8 *channel_flags, struct amount_sat *requested_sats, u32 *blockheight)
{
u16 local_shutdown_len;
@ -639,6 +657,8 @@ bool fromwire_dualopend_opener_init(const tal_t *ctx, const void *p, struct wall
*feerate_per_kw = fromwire_u32(&cursor, &plen);
*feerate_per_kw_funding = fromwire_u32(&cursor, &plen);
*channel_flags = fromwire_u8(&cursor, &plen);
*requested_sats = fromwire_amount_sat(&cursor, &plen);
*blockheight = fromwire_u32(&cursor, &plen);
return cursor != NULL;
}
@ -912,4 +932,4 @@ bool fromwire_dualopend_dev_memleak_reply(const void *p, bool *leak)
*leak = fromwire_bool(&cursor, &plen);
return cursor != NULL;
}
// SHA256STAMP:2aa38c967abfcd0110b6c65f62b13aa77cefacaf5f036a9217bb5d63220f1e1f
// SHA256STAMP:d8a31a5de292561ccfb5b7050c911b590db44a50209e02469179904708328861

View File

@ -18,6 +18,7 @@
#include <common/htlc_wire.h>
#include <common/penalty_base.h>
#include <common/per_peer_state.h>
#include <wire/peer_wire.h>
enum dualopend_wire {
WIRE_DUALOPEND_INIT = 7000,
@ -96,13 +97,13 @@ bool fromwire_dualopend_reinit(const tal_t *ctx, const void *p, const struct cha
/* WIRE: DUALOPEND_GOT_OFFER */
/* dualopend->master: they offered channel */
u8 *towire_dualopend_got_offer(const tal_t *ctx, const struct channel_id *channel_id, struct amount_sat opener_funding, struct amount_sat dust_limit_satoshis, struct amount_msat max_htlc_value_in_flight_msat, struct amount_msat htlc_minimum_msat, u32 feerate_per_kw_funding, u32 feerate_per_kw_commitment, u16 to_self_delay, u16 max_accepted_htlcs, u8 channel_flags, u32 locktime, const u8 *shutdown_scriptpubkey);
bool fromwire_dualopend_got_offer(const tal_t *ctx, const void *p, struct channel_id *channel_id, struct amount_sat *opener_funding, struct amount_sat *dust_limit_satoshis, struct amount_msat *max_htlc_value_in_flight_msat, struct amount_msat *htlc_minimum_msat, u32 *feerate_per_kw_funding, u32 *feerate_per_kw_commitment, u16 *to_self_delay, u16 *max_accepted_htlcs, u8 *channel_flags, u32 *locktime, u8 **shutdown_scriptpubkey);
u8 *towire_dualopend_got_offer(const tal_t *ctx, const struct channel_id *channel_id, struct amount_sat opener_funding, struct amount_sat dust_limit_satoshis, struct amount_msat max_htlc_value_in_flight_msat, struct amount_msat htlc_minimum_msat, u32 feerate_per_kw_funding, u32 feerate_per_kw_commitment, u16 to_self_delay, u16 max_accepted_htlcs, u8 channel_flags, u32 locktime, const u8 *shutdown_scriptpubkey, struct amount_sat requested_amt, u32 lease_blockheight_start);
bool fromwire_dualopend_got_offer(const tal_t *ctx, const void *p, struct channel_id *channel_id, struct amount_sat *opener_funding, struct amount_sat *dust_limit_satoshis, struct amount_msat *max_htlc_value_in_flight_msat, struct amount_msat *htlc_minimum_msat, u32 *feerate_per_kw_funding, u32 *feerate_per_kw_commitment, u16 *to_self_delay, u16 *max_accepted_htlcs, u8 *channel_flags, u32 *locktime, u8 **shutdown_scriptpubkey, struct amount_sat *requested_amt, u32 *lease_blockheight_start);
/* WIRE: DUALOPEND_GOT_OFFER_REPLY */
/* master->dualopend: reply back with our first funding info/contribs */
u8 *towire_dualopend_got_offer_reply(const tal_t *ctx, struct amount_sat accepter_funding, const struct wally_psbt *psbt, const u8 *our_shutdown_scriptpubkey);
bool fromwire_dualopend_got_offer_reply(const tal_t *ctx, const void *p, struct amount_sat *accepter_funding, struct wally_psbt **psbt, u8 **our_shutdown_scriptpubkey);
u8 *towire_dualopend_got_offer_reply(const tal_t *ctx, struct amount_sat accepter_funding, const struct wally_psbt *psbt, const u8 *our_shutdown_scriptpubkey, const struct lease_rates *lease_rates);
bool fromwire_dualopend_got_offer_reply(const tal_t *ctx, const void *p, struct amount_sat *accepter_funding, struct wally_psbt **psbt, u8 **our_shutdown_scriptpubkey, struct lease_rates **lease_rates);
/* WIRE: DUALOPEND_GOT_RBF_OFFER */
/* dualopend->master: they offered a RBF */
@ -152,8 +153,8 @@ bool fromwire_dualopend_fail(const tal_t *ctx, const void *p, wirestring **reaso
/* WIRE: DUALOPEND_OPENER_INIT */
/* master->dualopend: hello */
u8 *towire_dualopend_opener_init(const tal_t *ctx, const struct wally_psbt *psbt, struct amount_sat funding_amount, const u8 *local_shutdown_scriptpubkey, u32 feerate_per_kw, u32 feerate_per_kw_funding, u8 channel_flags);
bool fromwire_dualopend_opener_init(const tal_t *ctx, const void *p, struct wally_psbt **psbt, struct amount_sat *funding_amount, u8 **local_shutdown_scriptpubkey, u32 *feerate_per_kw, u32 *feerate_per_kw_funding, u8 *channel_flags);
u8 *towire_dualopend_opener_init(const tal_t *ctx, const struct wally_psbt *psbt, struct amount_sat funding_amount, const u8 *local_shutdown_scriptpubkey, u32 feerate_per_kw, u32 feerate_per_kw_funding, u8 channel_flags, struct amount_sat requested_sats, u32 blockheight);
bool fromwire_dualopend_opener_init(const tal_t *ctx, const void *p, struct wally_psbt **psbt, struct amount_sat *funding_amount, u8 **local_shutdown_scriptpubkey, u32 *feerate_per_kw, u32 *feerate_per_kw_funding, u8 *channel_flags, struct amount_sat *requested_sats, u32 *blockheight);
/* WIRE: DUALOPEND_FUNDING_SIGS */
/* dualopend->master received tx_sigs from peer */
@ -216,4 +217,4 @@ bool fromwire_dualopend_dev_memleak_reply(const void *p, bool *leak);
#endif /* LIGHTNING_OPENINGD_DUALOPEND_WIREGEN_H */
// SHA256STAMP:2aa38c967abfcd0110b6c65f62b13aa77cefacaf5f036a9217bb5d63220f1e1f
// SHA256STAMP:d8a31a5de292561ccfb5b7050c911b590db44a50209e02469179904708328861