More option cleanups.

Because we have too many which are never used and I don't want to document
them.

1. Remove unused anchor_onchain_wait.  When implemented, it should be
   hardcoded to 100 or more.
2. Remove anchor_confirms_max.  10 always reasonable, and we can readd
   an override option should someone need it.
3. max_htlc_expiry should be the same as locktime_max (which increases
   from 3 to 5 days by default): they're both a limit on how long
   funds can be locked up.
4. channel_update_interval should always be a dev option.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Rusty Russell 2018-05-17 14:16:22 +09:30
parent 0aa22741df
commit edf1b3cec9
8 changed files with 23 additions and 64 deletions

View File

@ -20,15 +20,9 @@ struct config {
/* How long do we let them lock up our funds? (blocks) */ /* How long do we let them lock up our funds? (blocks) */
u32 locktime_max; u32 locktime_max;
/* How many blocks before we expect to see anchor?. */
u32 anchor_onchain_wait;
/* How many confirms until we consider an anchor "settled". */ /* How many confirms until we consider an anchor "settled". */
u32 anchor_confirms; u32 anchor_confirms;
/* How long will we accept them waiting? */
u32 anchor_confirms_max;
/* Maximum percent of fee rate we'll accept. */ /* Maximum percent of fee rate we'll accept. */
u32 commitment_fee_max_percent; u32 commitment_fee_max_percent;
@ -44,9 +38,6 @@ struct config {
/* Minimum CLTV if we're the final hop.*/ /* Minimum CLTV if we're the final hop.*/
u32 cltv_final; u32 cltv_final;
/* Maximum time for an expiring HTLC (blocks). */
u32 max_htlc_expiry;
/* Fee rates. */ /* Fee rates. */
u32 fee_base; u32 fee_base;
s32 fee_per_satoshi; s32 fee_per_satoshi;

View File

@ -624,12 +624,10 @@ new_uncommitted_channel(struct lightningd *ld,
static void channel_config(struct lightningd *ld, static void channel_config(struct lightningd *ld,
struct channel_config *ours, struct channel_config *ours,
u32 *max_to_self_delay, u32 *max_to_self_delay,
u32 *max_minimum_depth,
u64 *min_effective_htlc_capacity_msat) u64 *min_effective_htlc_capacity_msat)
{ {
/* FIXME: depend on feerate. */ /* FIXME: depend on feerate. */
*max_to_self_delay = ld->config.locktime_max; *max_to_self_delay = ld->config.locktime_max;
*max_minimum_depth = ld->config.anchor_confirms_max;
/* This is 1c at $1000/BTC */ /* This is 1c at $1000/BTC */
*min_effective_htlc_capacity_msat = 1000000; *min_effective_htlc_capacity_msat = 1000000;
@ -678,7 +676,7 @@ u8 *peer_accept_channel(const tal_t *ctx,
const struct channel_id *channel_id, const struct channel_id *channel_id,
const u8 *open_msg) const u8 *open_msg)
{ {
u32 max_to_self_delay, max_minimum_depth; u32 max_to_self_delay;
u64 min_effective_htlc_capacity_msat; u64 min_effective_htlc_capacity_msat;
u8 *msg; u8 *msg;
struct uncommitted_channel *uc; struct uncommitted_channel *uc;
@ -723,7 +721,7 @@ u8 *peer_accept_channel(const tal_t *ctx,
uc->minimum_depth = ld->config.anchor_confirms; uc->minimum_depth = ld->config.anchor_confirms;
channel_config(ld, &uc->our_config, channel_config(ld, &uc->our_config,
&max_to_self_delay, &max_minimum_depth, &max_to_self_delay,
&min_effective_htlc_capacity_msat); &min_effective_htlc_capacity_msat);
msg = towire_opening_init(uc, get_chainparams(ld)->index, msg = towire_opening_init(uc, get_chainparams(ld)->index,
@ -751,7 +749,7 @@ static void peer_offer_channel(struct lightningd *ld,
int peer_fd, int gossip_fd) int peer_fd, int gossip_fd)
{ {
u8 *msg; u8 *msg;
u32 max_to_self_delay, max_minimum_depth; u32 max_to_self_delay;
u64 min_effective_htlc_capacity_msat; u64 min_effective_htlc_capacity_msat;
/* Remove from list, it's not pending any more. */ /* Remove from list, it's not pending any more. */
@ -793,7 +791,7 @@ static void peer_offer_channel(struct lightningd *ld,
} }
channel_config(ld, &fc->uc->our_config, channel_config(ld, &fc->uc->our_config,
&max_to_self_delay, &max_minimum_depth, &max_to_self_delay,
&min_effective_htlc_capacity_msat); &min_effective_htlc_capacity_msat);
msg = towire_opening_init(fc, msg = towire_opening_init(fc,
@ -807,7 +805,6 @@ static void peer_offer_channel(struct lightningd *ld,
msg = towire_opening_funder(fc, fc->wtx.amount, msg = towire_opening_funder(fc, fc->wtx.amount,
fc->push_msat, fc->push_msat,
get_feerate(ld->topology, FEERATE_NORMAL), get_feerate(ld->topology, FEERATE_NORMAL),
max_minimum_depth,
fc->wtx.change, fc->wtx.change_key_index, fc->wtx.change, fc->wtx.change_key_index,
fc->channel_flags, fc->channel_flags,
fc->wtx.utxos, fc->wtx.utxos,

View File

@ -304,15 +304,9 @@ static void config_register_opts(struct lightningd *ld)
opt_register_arg("--max-locktime-blocks", opt_set_u32, opt_show_u32, opt_register_arg("--max-locktime-blocks", opt_set_u32, opt_show_u32,
&ld->config.locktime_max, &ld->config.locktime_max,
"Maximum blocks a peer can lock up our funds"); "Maximum blocks a peer can lock up our funds");
opt_register_arg("--anchor-onchain", opt_set_u32, opt_show_u32,
&ld->config.anchor_onchain_wait,
"Blocks before we give up on pending anchor transaction");
opt_register_arg("--anchor-confirms", opt_set_u32, opt_show_u32, opt_register_arg("--anchor-confirms", opt_set_u32, opt_show_u32,
&ld->config.anchor_confirms, &ld->config.anchor_confirms,
"Confirmations required for anchor transaction"); "Confirmations required for anchor transaction");
opt_register_arg("--max-anchor-confirms", opt_set_u32, opt_show_u32,
&ld->config.anchor_confirms_max,
"Maximum confirmations other side can wait for anchor transaction");
opt_register_arg("--commit-fee-min=<percent>", opt_set_u32, opt_show_u32, opt_register_arg("--commit-fee-min=<percent>", opt_set_u32, opt_show_u32,
&ld->config.commitment_fee_min_percent, &ld->config.commitment_fee_min_percent,
"Minimum percentage of fee to accept for commitment"); "Minimum percentage of fee to accept for commitment");
@ -331,9 +325,6 @@ static void config_register_opts(struct lightningd *ld)
opt_register_arg("--cltv-final", opt_set_u32, opt_show_u32, opt_register_arg("--cltv-final", opt_set_u32, opt_show_u32,
&ld->config.cltv_final, &ld->config.cltv_final,
"Number of blocks for final ctlv_expiry"); "Number of blocks for final ctlv_expiry");
opt_register_arg("--max-htlc-expiry", opt_set_u32, opt_show_u32,
&ld->config.max_htlc_expiry,
"Maximum number of blocks to accept an HTLC before expiry");
opt_register_arg("--commit-time", opt_set_time, opt_show_time, opt_register_arg("--commit-time", opt_set_time, opt_show_time,
&ld->config.commit_time, &ld->config.commit_time,
"Time after changes before sending out COMMIT"); "Time after changes before sending out COMMIT");
@ -447,6 +438,11 @@ static void dev_register_opts(struct lightningd *ld)
opt_register_arg("--dev-override-fee-rates", opt_set_fee_rates, NULL, opt_register_arg("--dev-override-fee-rates", opt_set_fee_rates, NULL,
ld->topology, ld->topology,
"Force a specific rates (immediate/normal/slow) in satoshis per kw regardless of estimated fees"); "Force a specific rates (immediate/normal/slow) in satoshis per kw regardless of estimated fees");
opt_register_arg(
"--dev-channel-update-interval=<s>", opt_set_u32, opt_show_u32,
&ld->config.channel_update_interval,
"Time in seconds between channel updates for our own channels.");
} }
#endif #endif
@ -454,18 +450,12 @@ static const struct config testnet_config = {
/* 6 blocks to catch cheating attempts. */ /* 6 blocks to catch cheating attempts. */
.locktime_blocks = 6, .locktime_blocks = 6,
/* They can have up to 3 days. */ /* They can have up to 5 days. */
.locktime_max = 3 * 6 * 24, .locktime_max = 5 * 6 * 24,
/* Testnet can have long runs of empty blocks. */
.anchor_onchain_wait = 100,
/* We're fairly trusting, under normal circumstances. */ /* We're fairly trusting, under normal circumstances. */
.anchor_confirms = 1, .anchor_confirms = 1,
/* More than 10 confirms seems overkill. */
.anchor_confirms_max = 10,
/* Testnet fees are crazy, allow infinite feerange. */ /* Testnet fees are crazy, allow infinite feerange. */
.commitment_fee_min_percent = 0, .commitment_fee_min_percent = 0,
.commitment_fee_max_percent = 0, .commitment_fee_max_percent = 0,
@ -477,9 +467,6 @@ static const struct config testnet_config = {
.cltv_expiry_delta = 6, .cltv_expiry_delta = 6,
.cltv_final = 6, .cltv_final = 6,
/* Don't lock up channel for more than 5 days. */
.max_htlc_expiry = 5 * 6 * 24,
/* Send commit 10msec after receiving; almost immediately. */ /* Send commit 10msec after receiving; almost immediately. */
.commit_time = TIME_FROM_MSEC(10), .commit_time = TIME_FROM_MSEC(10),
@ -507,18 +494,12 @@ static const struct config mainnet_config = {
/* ~one day to catch cheating attempts. */ /* ~one day to catch cheating attempts. */
.locktime_blocks = 6 * 24, .locktime_blocks = 6 * 24,
/* They can have up to 3 days. */ /* They can have up to 5 days. */
.locktime_max = 3 * 6 * 24, .locktime_max = 5 * 6 * 24,
/* You should get in within 10 blocks. */
.anchor_onchain_wait = 10,
/* We're fairly trusting, under normal circumstances. */ /* We're fairly trusting, under normal circumstances. */
.anchor_confirms = 3, .anchor_confirms = 3,
/* More than 10 confirms seems overkill. */
.anchor_confirms_max = 10,
/* Insist between 2 and 20 times the 2-block fee. */ /* Insist between 2 and 20 times the 2-block fee. */
.commitment_fee_min_percent = 200, .commitment_fee_min_percent = 200,
.commitment_fee_max_percent = 2000, .commitment_fee_max_percent = 2000,
@ -538,9 +519,6 @@ static const struct config mainnet_config = {
* worst case for the terminal node C lower at `2R+G+S` blocks */ * worst case for the terminal node C lower at `2R+G+S` blocks */
.cltv_final = 8, .cltv_final = 8,
/* Don't lock up channel for more than 5 days. */
.max_htlc_expiry = 5 * 6 * 24,
/* Send commit 10msec after receiving; almost immediately. */ /* Send commit 10msec after receiving; almost immediately. */
.commit_time = TIME_FROM_MSEC(10), .commit_time = TIME_FROM_MSEC(10),
@ -739,11 +717,6 @@ void register_opts(struct lightningd *ld)
&ld->pidfile, &ld->pidfile,
"Specify pid file"); "Specify pid file");
opt_register_arg(
"--channel-update-interval=<s>", opt_set_u32, opt_show_u32,
&ld->config.channel_update_interval,
"Time in seconds between channel updates for our own channels.");
opt_register_logging(ld); opt_register_logging(ld);
opt_register_version(); opt_register_version();

View File

@ -490,12 +490,12 @@ static void forward_htlc(struct htlc_in *hin,
* 1. type: 21 (`expiry_too_far`) * 1. type: 21 (`expiry_too_far`)
*/ */
if (get_block_height(ld->topology) if (get_block_height(ld->topology)
+ ld->config.max_htlc_expiry < outgoing_cltv_value) { + ld->config.locktime_max < outgoing_cltv_value) {
log_debug(hin->key.channel->log, log_debug(hin->key.channel->log,
"Expiry cltv %u too far from current %u + max %u", "Expiry cltv %u too far from current %u + max %u",
outgoing_cltv_value, outgoing_cltv_value,
get_block_height(ld->topology), get_block_height(ld->topology),
ld->config.max_htlc_expiry); ld->config.locktime_max);
failcode = WIRE_EXPIRY_TOO_FAR; failcode = WIRE_EXPIRY_TOO_FAR;
goto fail; goto fail;
} }

View File

@ -242,7 +242,6 @@ static u8 *opening_read_peer_msg(struct state *state)
static u8 *funder_channel(struct state *state, static u8 *funder_channel(struct state *state,
const struct pubkey *our_funding_pubkey, const struct pubkey *our_funding_pubkey,
const struct basepoints *ours, const struct basepoints *ours,
u32 max_minimum_depth,
u64 change_satoshis, u32 change_keyindex, u64 change_satoshis, u32 change_keyindex,
u8 channel_flags, u8 channel_flags,
struct utxo **utxos, struct utxo **utxos,
@ -352,10 +351,10 @@ static u8 *funder_channel(struct state *state,
* Other fields have the same requirements as their counterparts in * Other fields have the same requirements as their counterparts in
* `open_channel`. * `open_channel`.
*/ */
if (minimum_depth > max_minimum_depth) if (minimum_depth > 10)
negotiation_failed(state, negotiation_failed(state,
"minimum_depth %u larger than %u", "minimum_depth %u larger than %u",
minimum_depth, max_minimum_depth); minimum_depth, 10);
/* BOLT #2: /* BOLT #2:
* *
@ -800,7 +799,7 @@ int main(int argc, char *argv[])
struct privkey seed; struct privkey seed;
struct basepoints our_points; struct basepoints our_points;
struct pubkey our_funding_pubkey; struct pubkey our_funding_pubkey;
u32 minimum_depth, max_minimum_depth; u32 minimum_depth;
u32 min_feerate, max_feerate; u32 min_feerate, max_feerate;
u64 change_satoshis; u64 change_satoshis;
u32 change_keyindex; u32 change_keyindex;
@ -849,11 +848,11 @@ int main(int argc, char *argv[])
if (fromwire_opening_funder(state, msg, if (fromwire_opening_funder(state, msg,
&state->funding_satoshis, &state->funding_satoshis,
&state->push_msat, &state->push_msat,
&state->feerate_per_kw, &max_minimum_depth, &state->feerate_per_kw,
&change_satoshis, &change_keyindex, &change_satoshis, &change_keyindex,
&channel_flags, &utxos, &bip32_base)) { &channel_flags, &utxos, &bip32_base)) {
msg = funder_channel(state, &our_funding_pubkey, &our_points, msg = funder_channel(state, &our_funding_pubkey, &our_points,
max_minimum_depth, change_satoshis, change_satoshis,
change_keyindex, channel_flags, change_keyindex, channel_flags,
utxos, &bip32_base); utxos, &bip32_base);
peer_billboard(false, peer_billboard(false,

View File

@ -19,7 +19,6 @@ opening_funder,6001
opening_funder,,funding_satoshis,u64 opening_funder,,funding_satoshis,u64
opening_funder,,push_msat,u64 opening_funder,,push_msat,u64
opening_funder,,feerate_per_kw,u32 opening_funder,,feerate_per_kw,u32
opening_funder,,max_minimum_depth,u32
opening_funder,,change_satoshis,u64 opening_funder,,change_satoshis,u64
opening_funder,,change_keyindex,u32 opening_funder,,change_keyindex,u32
opening_funder,,channel_flags,u8 opening_funder,,channel_flags,u8

1 #include <common/cryptomsg.h>
19 opening_funder,,push_msat,u64
20 opening_funder,,feerate_per_kw,u32
21 opening_funder,,max_minimum_depth,u32 opening_funder,,change_satoshis,u64
opening_funder,,change_satoshis,u64
22 opening_funder,,change_keyindex,u32
23 opening_funder,,channel_flags,u8
24 #include <common/utxo.h>

View File

@ -9,11 +9,11 @@ import unittest
DEVELOPER = os.getenv("DEVELOPER", "0") == "1" DEVELOPER = os.getenv("DEVELOPER", "0") == "1"
@unittest.skipIf(not DEVELOPER, "needs DEVELOPER=1 for --dev-broadcast-interval") @unittest.skipIf(not DEVELOPER, "needs --dev-broadcast-interval, --dev-channelupdate-interval")
def test_gossip_pruning(node_factory, bitcoind): def test_gossip_pruning(node_factory, bitcoind):
""" Create channel and see it being updated in time before pruning """ Create channel and see it being updated in time before pruning
""" """
opts = {'channel-update-interval': 5} opts = {'dev-channel-update-interval': 5}
l1, l2, l3 = node_factory.get_nodes(3, opts) l1, l2, l3 = node_factory.get_nodes(3, opts)
l1.rpc.connect(l2.info['id'], 'localhost', l2.port) l1.rpc.connect(l2.info['id'], 'localhost', l2.port)

View File

@ -3623,7 +3623,7 @@ class LightningDTests(BaseLightningDTests):
"""Add some funds, fund a channel without enough funds""" """Add some funds, fund a channel without enough funds"""
# Previous runs with same bitcoind can leave funds! # Previous runs with same bitcoind can leave funds!
l1 = self.node_factory.get_node(random_hsm=True) l1 = self.node_factory.get_node(random_hsm=True)
max_locktime = 3 * 6 * 24 max_locktime = 5 * 6 * 24
l2 = self.node_factory.get_node(options={'locktime-blocks': max_locktime + 1}) l2 = self.node_factory.get_node(options={'locktime-blocks': max_locktime + 1})
l1.rpc.connect(l2.info['id'], 'localhost', l2.port) l1.rpc.connect(l2.info['id'], 'localhost', l2.port)