mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-02-24 23:08:36 +01:00
Reduce the maximum allowed counterparty dust limit to 546 sat/vbyte
546 sat/vbyte is the current default dust limit on most implementations, matching the network dust limit for P2SH outputs. Implementations don't currently appear to send any larger dust limits, and allowing a larger dust limit implies higher payment failure risk, so we'd like to be as tight as we can here.
This commit is contained in:
parent
8fad498900
commit
c43db96062
2 changed files with 15 additions and 15 deletions
|
@ -555,15 +555,15 @@ pub const ANCHOR_OUTPUT_VALUE_SATOSHI: u64 = 330;
|
|||
/// it's 2^24.
|
||||
pub const MAX_FUNDING_SATOSHIS: u64 = 1 << 24;
|
||||
|
||||
/// Maximum counterparty `dust_limit_satoshis` allowed. 2 * standard dust threshold on p2wsh output
|
||||
/// Scales up on Bitcoin Core's proceeding policy with dust outputs. A typical p2wsh output is 43
|
||||
/// bytes to which Core's `GetDustThreshold()` sums up a minimal spend of 67 bytes (even if
|
||||
/// a p2wsh witnessScript might be *effectively* smaller), `dustRelayFee` is set to 3000sat/kb, thus
|
||||
/// 110 * 3000 / 1000 = 330. Per-protocol rules, all time-sensitive outputs are p2wsh, a value of
|
||||
/// 330 sats is the lower bound desired to ensure good propagation of transactions. We give a bit
|
||||
/// of margin to our counterparty and pick up 660 satoshis as an accepted `dust_limit_satoshis`
|
||||
/// upper bound to avoid negotiation conflicts with other implementations.
|
||||
pub const MAX_DUST_LIMIT_SATOSHIS: u64 = 2 * 330;
|
||||
/// The maximum network dust limit for standard script formats. This currently represents the
|
||||
/// minimum output value for a P2SH output before Bitcoin Core 22 considers the entire
|
||||
/// transaction non-standard and thus refuses to relay it.
|
||||
/// We also use this as the maximum counterparty `dust_limit_satoshis` allowed, given many
|
||||
/// implementations use this value for their dust limit today.
|
||||
pub const MAX_STD_OUTPUT_DUST_LIMIT_SATOSHIS: u64 = 546;
|
||||
|
||||
/// The maximum channel dust limit we will accept from our counterparty.
|
||||
pub const MAX_CHAN_DUST_LIMIT_SATOSHIS: u64 = MAX_STD_OUTPUT_DUST_LIMIT_SATOSHIS;
|
||||
|
||||
/// The dust limit is used for both the commitment transaction outputs as well as the closing
|
||||
/// transactions. For cooperative closing transactions, we require segwit outputs, though accept
|
||||
|
@ -847,8 +847,8 @@ impl<Signer: Sign> Channel<Signer> {
|
|||
if msg.dust_limit_satoshis < MIN_DUST_LIMIT_SATOSHIS {
|
||||
return Err(ChannelError::Close(format!("dust_limit_satoshis ({}) is less than the implementation limit ({})", msg.dust_limit_satoshis, MIN_DUST_LIMIT_SATOSHIS)));
|
||||
}
|
||||
if msg.dust_limit_satoshis > MAX_DUST_LIMIT_SATOSHIS {
|
||||
return Err(ChannelError::Close(format!("dust_limit_satoshis ({}) is greater than the implementation limit ({})", msg.dust_limit_satoshis, MAX_DUST_LIMIT_SATOSHIS)));
|
||||
if msg.dust_limit_satoshis > MAX_CHAN_DUST_LIMIT_SATOSHIS {
|
||||
return Err(ChannelError::Close(format!("dust_limit_satoshis ({}) is greater than the implementation limit ({})", msg.dust_limit_satoshis, MAX_CHAN_DUST_LIMIT_SATOSHIS)));
|
||||
}
|
||||
|
||||
// Convert things into internal flags and prep our state:
|
||||
|
@ -1621,8 +1621,8 @@ impl<Signer: Sign> Channel<Signer> {
|
|||
if msg.dust_limit_satoshis < MIN_DUST_LIMIT_SATOSHIS {
|
||||
return Err(ChannelError::Close(format!("dust_limit_satoshis ({}) is less than the implementation limit ({})", msg.dust_limit_satoshis, MIN_DUST_LIMIT_SATOSHIS)));
|
||||
}
|
||||
if msg.dust_limit_satoshis > MAX_DUST_LIMIT_SATOSHIS {
|
||||
return Err(ChannelError::Close(format!("dust_limit_satoshis ({}) is greater than the implementation limit ({})", msg.dust_limit_satoshis, MAX_DUST_LIMIT_SATOSHIS)));
|
||||
if msg.dust_limit_satoshis > MAX_CHAN_DUST_LIMIT_SATOSHIS {
|
||||
return Err(ChannelError::Close(format!("dust_limit_satoshis ({}) is greater than the implementation limit ({})", msg.dust_limit_satoshis, MAX_CHAN_DUST_LIMIT_SATOSHIS)));
|
||||
}
|
||||
if msg.minimum_depth > config.peer_channel_config_limits.max_minimum_depth {
|
||||
return Err(ChannelError::Close(format!("We consider the minimum depth to be unreasonably large. Expected minimum: ({}). Actual: ({})", config.peer_channel_config_limits.max_minimum_depth, msg.minimum_depth)));
|
||||
|
|
|
@ -5830,7 +5830,7 @@ fn bolt2_open_channel_sane_dust_limit() {
|
|||
let push_msat=10001;
|
||||
nodes[0].node.create_channel(nodes[1].node.get_our_node_id(), channel_value_satoshis, push_msat, 42, None).unwrap();
|
||||
let mut node0_to_1_send_open_channel = get_event_msg!(nodes[0], MessageSendEvent::SendOpenChannel, nodes[1].node.get_our_node_id());
|
||||
node0_to_1_send_open_channel.dust_limit_satoshis = 661;
|
||||
node0_to_1_send_open_channel.dust_limit_satoshis = 547;
|
||||
node0_to_1_send_open_channel.channel_reserve_satoshis = 100001;
|
||||
|
||||
nodes[1].node.handle_open_channel(&nodes[0].node.get_our_node_id(), InitFeatures::known(), &node0_to_1_send_open_channel);
|
||||
|
@ -5841,7 +5841,7 @@ fn bolt2_open_channel_sane_dust_limit() {
|
|||
},
|
||||
_ => panic!("Unexpected event"),
|
||||
};
|
||||
assert_eq!(err_msg.data, "dust_limit_satoshis (661) is greater than the implementation limit (660)");
|
||||
assert_eq!(err_msg.data, "dust_limit_satoshis (547) is greater than the implementation limit (546)");
|
||||
}
|
||||
|
||||
// Test that if we fail to send an HTLC that is being freed from the holding cell, and the HTLC
|
||||
|
|
Loading…
Add table
Reference in a new issue