Skip to content

Commit

Permalink
invoice: allow creation of giant invoices.
Browse files Browse the repository at this point in the history
lightning/bolts#877 talks about
removing this restriction (only Electrum actually enforced it on
receive), so start by allowing creation of giant invoices, though
we mark them as requiring mpp.

Changelog-Changed: JSON-RPC: `invoice` now allows creation of giant invoices (>= 2^32 msat)
Signed-off-by: Rusty Russell <[email protected]>
  • Loading branch information
rustyrussell committed Jun 17, 2021
1 parent 75720ad commit 3c68a24
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 11 deletions.
21 changes: 13 additions & 8 deletions lightningd/invoice.c
Original file line number Diff line number Diff line change
Expand Up @@ -834,6 +834,19 @@ invoice_complete(struct invoice_info *info,
info->label->s);
}

/* If this requires a giant HTLC, most implementations cannot
* send that much; will need to split. */
/* BOLT #2:
* ### Adding an HTLC: `update_add_htlc`
*...
* - for channels with `chain_hash` identifying the Bitcoin blockchain:
* - MUST set the four most significant bytes of `amount_msat` to 0.
*/
if (info->b11->msat
&& amount_msat_greater(*info->b11->msat, chainparams->max_payment)) {
warning_mpp = true;
}

/* Get details */
details = wallet_invoice_details(info, wallet, invoice);

Expand Down Expand Up @@ -1135,14 +1148,6 @@ static struct command_result *json_invoice(struct command *cmd,
strlen(desc_val));
}

if (msatoshi_val
&& amount_msat_greater(*msatoshi_val, chainparams->max_payment)) {
return command_fail(cmd, JSONRPC2_INVALID_PARAMS,
"msatoshi cannot exceed %s",
type_to_string(tmpctx, struct amount_msat,
&chainparams->max_payment));
}

if (fallbacks) {
size_t i;
const jsmntok_t *t;
Expand Down
6 changes: 3 additions & 3 deletions tests/test_invoices.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,9 @@ def test_invoice(node_factory, chainparams):
assert 'routes' not in b11
assert 'warning_capacity' in inv

# Make sure no wumbo invoices
with pytest.raises(RpcError, match=r'msatoshi cannot exceed 4294967295msat'):
l2.rpc.invoice(4294967295 + 1, 'inv3', '?')
# Make sure wumbo invoices warn about mpp being needed.
inv = l2.rpc.invoice(4294967295 + 1, 'inv3', '?')
assert 'warning_mpp' in inv
l2.rpc.invoice(4294967295, 'inv3', '?')

# Test cltv option.
Expand Down

0 comments on commit 3c68a24

Please sign in to comment.