Browse Source

bitcoin/chainparams: use amount_sat / amount_msat

Simple changes, but ripples through the code.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
confirmed-only
Rusty Russell 6 years ago
parent
commit
85b8b25749
  1. 30
      bitcoin/chainparams.c
  2. 7
      bitcoin/chainparams.h
  3. 4
      channeld/channeld.c
  4. 2
      channeld/full_channel.c
  5. 4
      common/wallet_tx.c
  6. 4
      gossipd/routing.c
  7. 8
      lightningd/invoice.c
  8. 2
      lightningd/opening_control.c
  9. 3
      lightningd/test/run-invoice-select-inchan.c
  10. 9
      openingd/openingd.c
  11. 2
      tests/test_invoices.py

30
bitcoin/chainparams.c

@ -10,15 +10,15 @@ const struct chainparams networks[] = {
.rpc_port = 8332, .rpc_port = 8332,
.cli = "bitcoin-cli", .cli = "bitcoin-cli",
.cli_args = NULL, .cli_args = NULL,
.dust_limit = 546, .dust_limit = { 546 },
/* BOLT #2: /* BOLT #2:
* *
* The sending node: * The sending node:
*... *...
* - MUST set `funding_satoshis` to less than 2^24 satoshi. * - MUST set `funding_satoshis` to less than 2^24 satoshi.
*/ */
.max_funding_satoshi = (1 << 24) - 1, .max_funding = AMOUNT_SAT((1 << 24) - 1),
.max_payment_msat = 0xFFFFFFFFULL, .max_payment = AMOUNT_MSAT(0xFFFFFFFFULL),
/* "Lightning Charge Powers Developers & Blockstream Store" */ /* "Lightning Charge Powers Developers & Blockstream Store" */
.when_lightning_became_cool = 504500, .when_lightning_became_cool = 504500,
.testnet = false}, .testnet = false},
@ -28,9 +28,9 @@ const struct chainparams networks[] = {
.rpc_port = 18332, .rpc_port = 18332,
.cli = "bitcoin-cli", .cli = "bitcoin-cli",
.cli_args = "-regtest", .cli_args = "-regtest",
.dust_limit = 546, .dust_limit = { 546 },
.max_funding_satoshi = (1 << 24) - 1, .max_funding = AMOUNT_SAT((1 << 24) - 1),
.max_payment_msat = 0xFFFFFFFFULL, .max_payment = AMOUNT_MSAT(0xFFFFFFFFULL),
.when_lightning_became_cool = 1, .when_lightning_became_cool = 1,
.testnet = true}, .testnet = true},
{.network_name = "testnet", {.network_name = "testnet",
@ -39,9 +39,9 @@ const struct chainparams networks[] = {
.rpc_port = 18332, .rpc_port = 18332,
.cli = "bitcoin-cli", .cli = "bitcoin-cli",
.cli_args = "-testnet", .cli_args = "-testnet",
.dust_limit = 546, .dust_limit = { 546 },
.max_funding_satoshi = (1 << 24) - 1, .max_funding = AMOUNT_SAT((1 << 24) - 1),
.max_payment_msat = 0xFFFFFFFFULL, .max_payment = AMOUNT_MSAT(0xFFFFFFFFULL),
.testnet = true}, .testnet = true},
{.network_name = "litecoin", {.network_name = "litecoin",
.bip173_name = "ltc", .bip173_name = "ltc",
@ -49,9 +49,9 @@ const struct chainparams networks[] = {
.rpc_port = 9332, .rpc_port = 9332,
.cli = "litecoin-cli", .cli = "litecoin-cli",
.cli_args = NULL, .cli_args = NULL,
.dust_limit = 100000, .dust_limit = { 100000 },
.max_funding_satoshi = 60 * ((1 << 24) - 1), .max_funding = AMOUNT_SAT(60 * ((1 << 24) - 1)),
.max_payment_msat = 60 * 0xFFFFFFFFULL, .max_payment = AMOUNT_MSAT(60 * 0xFFFFFFFFULL),
.when_lightning_became_cool = 1320000, .when_lightning_became_cool = 1320000,
.testnet = false}, .testnet = false},
{.network_name = "litecoin-testnet", {.network_name = "litecoin-testnet",
@ -60,9 +60,9 @@ const struct chainparams networks[] = {
.rpc_port = 19332, .rpc_port = 19332,
.cli = "litecoin-cli", .cli = "litecoin-cli",
.cli_args = "-testnet", .cli_args = "-testnet",
.dust_limit = 100000, .dust_limit = { 100000 },
.max_funding_satoshi = 60 * ((1 << 24) - 1), .max_funding = AMOUNT_SAT(60 * ((1 << 24) - 1)),
.max_payment_msat = 60 * 0xFFFFFFFFULL, .max_payment = AMOUNT_MSAT(60 * 0xFFFFFFFFULL),
.when_lightning_became_cool = 1, .when_lightning_became_cool = 1,
.testnet = true} .testnet = true}
}; };

7
bitcoin/chainparams.h

@ -4,6 +4,7 @@
#include "config.h" #include "config.h"
#include <bitcoin/block.h> #include <bitcoin/block.h>
#include <ccan/short_types/short_types.h> #include <ccan/short_types/short_types.h>
#include <common/amount.h>
#include <stdbool.h> #include <stdbool.h>
struct chainparams { struct chainparams {
@ -13,9 +14,9 @@ struct chainparams {
const int rpc_port; const int rpc_port;
const char *cli; const char *cli;
const char *cli_args; const char *cli_args;
const u64 dust_limit; const struct amount_sat dust_limit;
const u64 max_funding_satoshi; const struct amount_sat max_funding;
const u64 max_payment_msat; const struct amount_msat max_payment;
const u32 when_lightning_became_cool; const u32 when_lightning_became_cool;
/* Whether this is a test network or not */ /* Whether this is a test network or not */

4
channeld/channeld.c

@ -245,8 +245,8 @@ static u64 advertised_htlc_max(const struct channel *channel)
if (channel->funding_msat - cumulative_reserve_msat < lower_bound) if (channel->funding_msat - cumulative_reserve_msat < lower_bound)
lower_bound = channel->funding_msat - cumulative_reserve_msat; lower_bound = channel->funding_msat - cumulative_reserve_msat;
/* FIXME BOLT QUOTE: https://github.com/lightningnetwork/lightning-rfc/pull/512 once merged */ /* FIXME BOLT QUOTE: https://github.com/lightningnetwork/lightning-rfc/pull/512 once merged */
if (channel->chainparams->max_payment_msat < lower_bound) if (channel->chainparams->max_payment.millisatoshis < lower_bound)
lower_bound = channel->chainparams->max_payment_msat; lower_bound = channel->chainparams->max_payment.millisatoshis;
return lower_bound; return lower_bound;
} }

2
channeld/full_channel.c

@ -357,7 +357,7 @@ static enum channel_add_err add_htlc(struct channel *channel,
* - for channels with `chain_hash` identifying the Bitcoin blockchain: * - for channels with `chain_hash` identifying the Bitcoin blockchain:
* - MUST set the four most significant bytes of `amount_msat` to 0. * - MUST set the four most significant bytes of `amount_msat` to 0.
*/ */
if (htlc->msatoshi > channel->chainparams->max_payment_msat) { if (htlc->msatoshi > channel->chainparams->max_payment.millisatoshis) {
return CHANNEL_ERR_MAX_HTLC_VALUE_EXCEEDED; return CHANNEL_ERR_MAX_HTLC_VALUE_EXCEEDED;
} }

4
common/wallet_tx.c

@ -46,7 +46,7 @@ static struct command_result *check_amount(const struct wallet_tx *wtx,
return command_fail(wtx->cmd, FUND_CANNOT_AFFORD, return command_fail(wtx->cmd, FUND_CANNOT_AFFORD,
"Cannot afford transaction"); "Cannot afford transaction");
} }
if (amount.satoshis < get_chainparams(wtx->cmd->ld)->dust_limit) { if (amount_sat_less(amount, get_chainparams(wtx->cmd->ld)->dust_limit)) {
return command_fail(wtx->cmd, FUND_OUTPUT_IS_DUST, return command_fail(wtx->cmd, FUND_OUTPUT_IS_DUST,
"Output %s would be dust", "Output %s would be dust",
type_to_string(tmpctx, struct amount_sat, type_to_string(tmpctx, struct amount_sat,
@ -93,7 +93,7 @@ struct command_result *wtx_select_utxos(struct wallet_tx *tx,
if (res) if (res)
return res; return res;
if (tx->change.satoshis < get_chainparams(tx->cmd->ld)->dust_limit) { if (amount_sat_less(tx->change, get_chainparams(tx->cmd->ld)->dust_limit)) {
tx->change = AMOUNT_SAT(0); tx->change = AMOUNT_SAT(0);
tx->change_key_index = 0; tx->change_key_index = 0;
} else { } else {

4
gossipd/routing.c

@ -1105,8 +1105,8 @@ bool routing_add_channel_update(struct routing_state *rstate,
/* FIXME: https://github.com/lightningnetwork/lightning-rfc/pull/512 /* FIXME: https://github.com/lightningnetwork/lightning-rfc/pull/512
* says we MUST NOT exceed 2^32-1, but c-lightning did, so just trim * says we MUST NOT exceed 2^32-1, but c-lightning did, so just trim
* rather than rejecting. */ * rather than rejecting. */
if (htlc_maximum_msat > rstate->chainparams->max_payment_msat) if (htlc_maximum_msat > rstate->chainparams->max_payment.millisatoshis)
htlc_maximum_msat = rstate->chainparams->max_payment_msat; htlc_maximum_msat = rstate->chainparams->max_payment.millisatoshis;
direction = channel_flags & 0x1; direction = channel_flags & 0x1;
set_connection_values(chan, direction, fee_base_msat, set_connection_values(chan, direction, fee_base_msat,

8
lightningd/invoice.c

@ -435,11 +435,11 @@ static struct command_result *json_invoice(struct command *cmd,
chainparams = get_chainparams(cmd->ld); chainparams = get_chainparams(cmd->ld);
if (msatoshi_val if (msatoshi_val
&& msatoshi_val->millisatoshis > chainparams->max_payment_msat) { && amount_msat_greater(*msatoshi_val, chainparams->max_payment)) {
return command_fail(cmd, JSONRPC2_INVALID_PARAMS, return command_fail(cmd, JSONRPC2_INVALID_PARAMS,
"msatoshi cannot exceed %"PRIu64 "msatoshi cannot exceed %s",
" millisatoshis", type_to_string(tmpctx, struct amount_msat,
chainparams->max_payment_msat); &chainparams->max_payment));
} }
if (fallbacks) { if (fallbacks) {

2
lightningd/opening_control.c

@ -825,7 +825,7 @@ static struct command_result *json_fund_channel(struct command *cmd,
u8 *msg; u8 *msg;
struct amount_sat max_funding_satoshi; struct amount_sat max_funding_satoshi;
max_funding_satoshi.satoshis = get_chainparams(cmd->ld)->max_funding_satoshi; max_funding_satoshi = get_chainparams(cmd->ld)->max_funding;
fc->cmd = cmd; fc->cmd = cmd;
fc->uc = NULL; fc->uc = NULL;

3
lightningd/test/run-invoice-select-inchan.c

@ -6,6 +6,9 @@
bool deprecated_apis = false; bool deprecated_apis = false;
/* AUTOGENERATED MOCKS START */ /* AUTOGENERATED MOCKS START */
/* Generated stub for amount_msat_greater */
bool amount_msat_greater(struct amount_msat a UNNEEDED, struct amount_msat b UNNEEDED)
{ fprintf(stderr, "amount_msat_greater called!\n"); abort(); }
/* Generated stub for amount_msat_sub_sat */ /* Generated stub for amount_msat_sub_sat */
bool amount_msat_sub_sat(struct amount_msat *val UNNEEDED, bool amount_msat_sub_sat(struct amount_msat *val UNNEEDED,
struct amount_msat a UNNEEDED, struct amount_msat a UNNEEDED,

9
openingd/openingd.c

@ -449,10 +449,11 @@ static u8 *funder_channel(struct state *state,
*... *...
* - MUST set `funding_satoshis` to less than 2^24 satoshi. * - MUST set `funding_satoshis` to less than 2^24 satoshi.
*/ */
if (state->funding_satoshis > state->chainparams->max_funding_satoshi) if (state->funding_satoshis > state->chainparams->max_funding.satoshis)
status_failed(STATUS_FAIL_MASTER_IO, status_failed(STATUS_FAIL_MASTER_IO,
"funding_satoshis must be < %"PRIu64", not %"PRIu64, "funding_satoshis must be < %s, not %"PRIu64,
state->chainparams->max_funding_satoshi, type_to_string(tmpctx, struct amount_sat,
&state->chainparams->max_funding),
state->funding_satoshis); state->funding_satoshis);
/* BOLT #2: /* BOLT #2:
@ -884,7 +885,7 @@ static u8 *fundee_channel(struct state *state, const u8 *open_channel_msg)
* *
* The receiving node ... MUST fail the channel if `funding-satoshis` * The receiving node ... MUST fail the channel if `funding-satoshis`
* is greater than or equal to 2^24 */ * is greater than or equal to 2^24 */
if (state->funding_satoshis > state->chainparams->max_funding_satoshi) { if (state->funding_satoshis > state->chainparams->max_funding.satoshis) {
negotiation_failed(state, false, negotiation_failed(state, false,
"funding_satoshis %"PRIu64" too large", "funding_satoshis %"PRIu64" too large",
state->funding_satoshis); state->funding_satoshis);

2
tests/test_invoices.py

@ -53,7 +53,7 @@ def test_invoice(node_factory):
assert 'warning_capacity' in inv assert 'warning_capacity' in inv
# Make sure no wumbo invoices # Make sure no wumbo invoices
with pytest.raises(RpcError, match=r'msatoshi cannot exceed 4294967295 millisatoshis'): with pytest.raises(RpcError, match=r'msatoshi cannot exceed 4294967295msat'):
l2.rpc.invoice(4294967295 + 1, 'inv3', '?') l2.rpc.invoice(4294967295 + 1, 'inv3', '?')
l2.rpc.invoice(4294967295, 'inv3', '?') l2.rpc.invoice(4294967295, 'inv3', '?')

Loading…
Cancel
Save