mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-19 23:24:27 +01:00
invoice: add ctlv option.
This is required if we want to create a "bouncer" plugin (in my copious free time!) Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Changelog-Added: JSON-RPC: `invoice` now takes an optional `cltv` parameter.
This commit is contained in:
committed by
Christian Decker
parent
4b2efd69d7
commit
1a8978100e
@@ -872,7 +872,7 @@ class LightningRpc(UnixDomainSocketRpc):
|
|||||||
}
|
}
|
||||||
return self.call("help", payload)
|
return self.call("help", payload)
|
||||||
|
|
||||||
def invoice(self, msatoshi, label, description, expiry=None, fallbacks=None, preimage=None, exposeprivatechannels=None):
|
def invoice(self, msatoshi, label, description, expiry=None, fallbacks=None, preimage=None, exposeprivatechannels=None, cltv=None):
|
||||||
"""
|
"""
|
||||||
Create an invoice for {msatoshi} with {label} and {description} with
|
Create an invoice for {msatoshi} with {label} and {description} with
|
||||||
optional {expiry} seconds (default 1 week).
|
optional {expiry} seconds (default 1 week).
|
||||||
@@ -884,7 +884,8 @@ class LightningRpc(UnixDomainSocketRpc):
|
|||||||
"expiry": expiry,
|
"expiry": expiry,
|
||||||
"fallbacks": fallbacks,
|
"fallbacks": fallbacks,
|
||||||
"preimage": preimage,
|
"preimage": preimage,
|
||||||
"exposeprivatechannels": exposeprivatechannels
|
"exposeprivatechannels": exposeprivatechannels,
|
||||||
|
"cltv": cltv,
|
||||||
}
|
}
|
||||||
return self.call("invoice", payload)
|
return self.call("invoice", payload)
|
||||||
|
|
||||||
|
|||||||
8
doc/lightning-invoice.7
generated
8
doc/lightning-invoice.7
generated
@@ -4,7 +4,7 @@ lightning-invoice - Command for accepting payments
|
|||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
|
|
||||||
\fBinvoice\fR \fImsatoshi\fR \fIlabel\fR \fIdescription\fR [\fIexpiry\fR]
|
\fBinvoice\fR \fImsatoshi\fR \fIlabel\fR \fIdescription\fR [\fIexpiry\fR]
|
||||||
[\fIfallbacks\fR] [\fIpreimage\fR] [\fIexposeprivatechannels\fR]
|
[\fIfallbacks\fR] [\fIpreimage\fR] [\fIexposeprivatechannels\fR] [\fIcltv\fR]
|
||||||
|
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
|
|
||||||
@@ -71,6 +71,10 @@ other public channel)\. The selection uses some randomness to prevent
|
|||||||
probing, but favors channels that become more balanced after the
|
probing, but favors channels that become more balanced after the
|
||||||
payment\.
|
payment\.
|
||||||
|
|
||||||
|
|
||||||
|
If specified, \fIcltv\fR sets the \fImin_final_cltv_expiry\fR for the invoice\.
|
||||||
|
Otherwise, it's set to the parameter \fBcltv-final\fR\.
|
||||||
|
|
||||||
.SH RETURN VALUE
|
.SH RETURN VALUE
|
||||||
|
|
||||||
On success, a hash is returned as \fIpayment_hash\fR to be given to the
|
On success, a hash is returned as \fIpayment_hash\fR to be given to the
|
||||||
@@ -124,4 +128,4 @@ Rusty Russell \fI<rusty@rustcorp.com.au\fR> is mainly responsible\.
|
|||||||
|
|
||||||
Main web site: \fIhttps://github.com/ElementsProject/lightning\fR
|
Main web site: \fIhttps://github.com/ElementsProject/lightning\fR
|
||||||
|
|
||||||
\" SHA256STAMP:9a361884baa1bdceffb9861839ce4728cf38eaf5d08b3437ad4b3f5b9b42d8db
|
\" SHA256STAMP:5a7792cb739f34adf7db346f3bd615816915230fcb8343af1b742336a677dbc2
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ SYNOPSIS
|
|||||||
--------
|
--------
|
||||||
|
|
||||||
**invoice** *msatoshi* *label* *description* \[*expiry*\]
|
**invoice** *msatoshi* *label* *description* \[*expiry*\]
|
||||||
\[*fallbacks*\] \[*preimage*\] \[*exposeprivatechannels*\]
|
\[*fallbacks*\] \[*preimage*\] \[*exposeprivatechannels*\] \[*cltv*\]
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
-----------
|
-----------
|
||||||
@@ -65,6 +65,9 @@ other public channel). The selection uses some randomness to prevent
|
|||||||
probing, but favors channels that become more balanced after the
|
probing, but favors channels that become more balanced after the
|
||||||
payment.
|
payment.
|
||||||
|
|
||||||
|
If specified, *cltv* sets the *min_final_cltv_expiry* for the invoice.
|
||||||
|
Otherwise, it's set to the parameter **cltv-final**.
|
||||||
|
|
||||||
RETURN VALUE
|
RETURN VALUE
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
|||||||
@@ -1006,6 +1006,7 @@ static struct command_result *json_invoice(struct command *cmd,
|
|||||||
struct sha256 rhash;
|
struct sha256 rhash;
|
||||||
struct secret payment_secret;
|
struct secret payment_secret;
|
||||||
struct preimage *preimage;
|
struct preimage *preimage;
|
||||||
|
u32 *cltv;
|
||||||
#if DEVELOPER
|
#if DEVELOPER
|
||||||
const jsmntok_t *routes;
|
const jsmntok_t *routes;
|
||||||
#endif
|
#endif
|
||||||
@@ -1022,6 +1023,8 @@ static struct command_result *json_invoice(struct command *cmd,
|
|||||||
p_opt("preimage", param_preimage, &preimage),
|
p_opt("preimage", param_preimage, &preimage),
|
||||||
p_opt("exposeprivatechannels", param_chanhints,
|
p_opt("exposeprivatechannels", param_chanhints,
|
||||||
&info->chanhints),
|
&info->chanhints),
|
||||||
|
p_opt_def("cltv", param_number, &cltv,
|
||||||
|
cmd->ld->config.cltv_final),
|
||||||
#if DEVELOPER
|
#if DEVELOPER
|
||||||
p_opt("dev-routes", param_array, &routes),
|
p_opt("dev-routes", param_array, &routes),
|
||||||
#endif
|
#endif
|
||||||
@@ -1081,7 +1084,7 @@ static struct command_result *json_invoice(struct command *cmd,
|
|||||||
info->b11->timestamp = time_now().ts.tv_sec;
|
info->b11->timestamp = time_now().ts.tv_sec;
|
||||||
info->b11->payment_hash = rhash;
|
info->b11->payment_hash = rhash;
|
||||||
info->b11->receiver_id = cmd->ld->id;
|
info->b11->receiver_id = cmd->ld->id;
|
||||||
info->b11->min_final_cltv_expiry = cmd->ld->config.cltv_final;
|
info->b11->min_final_cltv_expiry = *cltv;
|
||||||
info->b11->expiry = *expiry;
|
info->b11->expiry = *expiry;
|
||||||
info->b11->description = tal_steal(info->b11, desc_val);
|
info->b11->description = tal_steal(info->b11, desc_val);
|
||||||
info->b11->description_hash = NULL;
|
info->b11->description_hash = NULL;
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ def test_invoice(node_factory, chainparams):
|
|||||||
assert b11['fallbacks'][0]['type'] == 'P2WPKH'
|
assert b11['fallbacks'][0]['type'] == 'P2WPKH'
|
||||||
assert b11['fallbacks'][1]['addr'] == addr2
|
assert b11['fallbacks'][1]['addr'] == addr2
|
||||||
assert b11['fallbacks'][1]['type'] == 'P2SH'
|
assert b11['fallbacks'][1]['type'] == 'P2SH'
|
||||||
|
assert b11['min_final_cltv_expiry'] == 5
|
||||||
# There's no incoming channel, so no routeboost
|
# There's no incoming channel, so no routeboost
|
||||||
assert 'routes' not in b11
|
assert 'routes' not in b11
|
||||||
assert 'warning_capacity' in inv
|
assert 'warning_capacity' in inv
|
||||||
@@ -58,6 +59,11 @@ def test_invoice(node_factory, chainparams):
|
|||||||
l2.rpc.invoice(4294967295 + 1, 'inv3', '?')
|
l2.rpc.invoice(4294967295 + 1, 'inv3', '?')
|
||||||
l2.rpc.invoice(4294967295, 'inv3', '?')
|
l2.rpc.invoice(4294967295, 'inv3', '?')
|
||||||
|
|
||||||
|
# Test cltv option.
|
||||||
|
inv = l1.rpc.invoice(123000, 'label3', 'description', '3700', cltv=99)
|
||||||
|
b11 = l1.rpc.decodepay(inv['bolt11'])
|
||||||
|
assert b11['min_final_cltv_expiry'] == 99
|
||||||
|
|
||||||
|
|
||||||
def test_invoice_zeroval(node_factory):
|
def test_invoice_zeroval(node_factory):
|
||||||
"""A zero value invoice is unpayable, did you mean 'any'?"""
|
"""A zero value invoice is unpayable, did you mean 'any'?"""
|
||||||
|
|||||||
Reference in New Issue
Block a user