Make the base fee configurable in ChannelConfig
[rust-lightning] / lightning / src / util / config.rs
index 4a9f300638a4c4c3b2ad7d243b58c2f569557841..f3fd0ce70793451fbe6e58ce3e2efc81ca84b3b5 100644 (file)
@@ -98,22 +98,6 @@ pub struct ChannelHandshakeLimits {
        ///
        /// Default value: 0.
        pub min_max_accepted_htlcs: u16,
-       /// Outputs below a certain value will not be added to on-chain transactions. The dust value is
-       /// required to always be higher than this value so this only applies to HTLC outputs (and
-       /// potentially to-self outputs before any payments have been made).
-       /// Thus, HTLCs below this amount plus HTLC transaction fees are not enforceable on-chain.
-       /// This setting allows you to set a minimum dust limit for their commitment transactions,
-       /// reflecting the reality that tiny outputs are not considered standard transactions and will
-       /// not propagate through the Bitcoin network.
-       ///
-       /// Default value: 546, the current dust limit on the Bitcoin network.
-       pub min_dust_limit_satoshis: u64,
-       /// Maximum allowed threshold above which outputs will not be generated in their commitment
-       /// transactions.
-       /// HTLCs below this amount plus HTLC transaction fees are not enforceable on-chain.
-       ///
-       /// Default value: u64::max_value.
-       pub max_dust_limit_satoshis: u64,
        /// Before a channel is usable the funding transaction will need to be confirmed by at least a
        /// certain number of blocks, specified by the node which is not the funder (as the funder can
        /// assume they aren't going to double-spend themselves).
@@ -145,8 +129,6 @@ impl Default for ChannelHandshakeLimits {
                        min_max_htlc_value_in_flight_msat: 0,
                        max_channel_reserve_satoshis: <u64>::max_value(),
                        min_max_accepted_htlcs: 0,
-                       min_dust_limit_satoshis: 546,
-                       max_dust_limit_satoshis: <u64>::max_value(),
                        max_minimum_depth: 144,
                        force_announced_channel_preference: true,
                        their_to_self_delay: MAX_LOCAL_BREAKDOWN_TIMEOUT,
@@ -158,12 +140,26 @@ impl Default for ChannelHandshakeLimits {
 /// with our counterparty.
 #[derive(Copy, Clone, Debug)]
 pub struct ChannelConfig {
-       /// Amount (in millionths of a satoshi) the channel will charge per transferred satoshi.
+       /// Amount (in millionths of a satoshi) charged per satoshi for payments forwarded outbound
+       /// over the channel.
        /// This may be allowed to change at runtime in a later update, however doing so must result in
        /// update messages sent to notify all nodes of our updated relay fee.
        ///
        /// Default value: 0.
-       pub fee_proportional_millionths: u32,
+       pub forwarding_fee_proportional_millionths: u32,
+       /// Amount (in milli-satoshi) charged for payments forwarded outbound over the channel, in
+       /// excess of [`forwarding_fee_proportional_millionths`].
+       /// This may be allowed to change at runtime in a later update, however doing so must result in
+       /// update messages sent to notify all nodes of our updated relay fee.
+       ///
+       /// The default value of a single satoshi roughly matches the market rate on many routing nodes
+       /// as of July 2021. Adjusting it upwards or downwards may change whether nodes route through
+       /// this node.
+       ///
+       /// Default value: 1000.
+       ///
+       /// [`forwarding_fee_proportional_millionths`]: ChannelConfig::forwarding_fee_proportional_millionths
+       pub forwarding_fee_base_msat: u32,
        /// The difference in the CLTV value between incoming HTLCs and an outbound HTLC forwarded over
        /// the channel this config applies to.
        ///
@@ -214,7 +210,8 @@ impl Default for ChannelConfig {
        /// Provides sane defaults for most configurations (but with zero relay fees!).
        fn default() -> Self {
                ChannelConfig {
-                       fee_proportional_millionths: 0,
+                       forwarding_fee_proportional_millionths: 0,
+                       forwarding_fee_base_msat: 1000,
                        cltv_expiry_delta: 6 * 12, // 6 blocks/hour * 12 hours
                        announced_channel: false,
                        commit_upfront_shutdown_pubkey: true,
@@ -222,12 +219,12 @@ impl Default for ChannelConfig {
        }
 }
 
-//Add write and readable traits to channelconfig
-impl_writeable!(ChannelConfig, 8+2+1+1, {
-       fee_proportional_millionths,
-       cltv_expiry_delta,
-       announced_channel,
-       commit_upfront_shutdown_pubkey
+impl_writeable_tlv_based!(ChannelConfig, {
+       (0, forwarding_fee_proportional_millionths, required),
+       (2, cltv_expiry_delta, required),
+       (4, announced_channel, required),
+       (6, commit_upfront_shutdown_pubkey, required),
+       (8, forwarding_fee_base_msat, required),
 });
 
 /// Top-level config which holds ChannelHandshakeLimits and ChannelConfig.