<div>Good morning list,<br></div><div><br></div><div>For extra bikeshedding opportunities, I present below, a proposal for explicit management of commitment transaction and mutual close transaction fees.<br></div><div><br></div><div>By this thought, "explicit management", I want to convey, that the parties have more control over fees.<br></div><div><br></div><div>### Additional Variables<br></div><div><br></div><div>Nodes will now additionally track for each channel:<br></div><div><br></div><div>* `from_local_fee_msat` - 64-bit unsigned integer. The amount of fees contributed by this node.<br></div><div>* `from_remote_fee_msat` - 64-bit unsigned integer. The amount of fees contributed by this node<br></div><div><br></div><div>If the node is the initiator of the channel, its `from_local_fee_msat` contains the fee decided during channel opening, and its `from_remote_fee_msat` is 0.&nbsp; If it is not the initiator, then the reverse is true.<br></div><div><br></div><div>#### Rationale<br></div><div><br></div><div>Although onchain fees are measured in satoshi, the above variables are in millisatoshi in order to allow finer proportional deductions when reducing fees.<br></div><div><br></div><div>### Additional channel state updates<br></div><div><br></div><div>These update messages behave similarly to `offer_htlc`.&nbsp; Multiple of these messages may be sent, and then `commitment_signed` puts them into effect for the commitment transaction.<br></div><div><br></div><div>#### The `add_fees` message<br></div><div><br></div><div>1. type - TBD<br></div><div>2. data:<br></div><div>&nbsp;&nbsp;&nbsp; * [`8`: `short_channel_id`]<br></div><div>&nbsp;&nbsp;&nbsp; * [`8` : `additional_donated_fee_sat`]</div><div><br></div><div>`additional_donated_fee_sat` is the amount of fees that the sending node proposes to donate as fees, in order for the commitment transaction to be confirmed in a timely manner.<br></div><div>The donated fee is deducted from the sender funds of the channel.<br></div><div><br></div><div>Multiple `add_fees` message add up their effects.<br></div><div><br></div><div>The sender:<br></div><div><br></div><div>* MUST NOT offer a fee donation that would put their balance below the channel reserve.<br></div><div>* MAY donate their entire balance, minus the channel reserve.<br></div><div><br></div><div>Both nodes:<br></div><div><br></div><div>* MUST convert the satoshi units in this message to millisatoshis before updating the `from_local_fee_msat` and `from_remote_fee_msat` when a commitment is signed.<br></div><div><br></div><div>#### The `propose_deduct_fees` message<br></div><div><br></div><div>1. type - TBD<br></div><div>2. data:<br></div><div>&nbsp;&nbsp;&nbsp; * [`8`: `short_channel_id`]<br></div><div>&nbsp;&nbsp;&nbsp; * [`8` : `proposed_deducted_fee_sat`]<br></div><div><br></div><div>`proposed_deducted_fee_sat` is the amount by which the total fees will be deducted.<br></div><div><div><br></div></div><div>This message starts a sub-protocol, where other channel state update messages for the channel are disallowed and will trigger an `error` message with code `TBD`.<br></div><div><br></div><div>The sub-protocol involves `propose_deduct_fees` messages, and is ended once both sides send `accept_deduct_fees`.<br></div><div><br></div><div>The lowest `proposed_deducted_fee_sat` before the `accept_deduct_fees` is selected.<br></div><div>Thus each node has the ability to veto a deduction by simply sending a 0 `proposed_deducted_fee_sat`.<br></div><div><br></div><div>#### The `accept_deduct_fees` message<br></div><div><br></div><div>1. type - TBD<br></div><div>2. data:<br></div><div>&nbsp;&nbsp;&nbsp; * [`8`: `short_channel_id`]<br></div><div>&nbsp;&nbsp;&nbsp; * [`8` : `min_proposed_deducted_fee_sat`]<br></div><div><br></div><div>Once both nodes have sent this `accept_deduct_fees` for a channel with the same `min_proposed_deducted_fee_sat`, then both nodes have come to an agreement on how much to deduct as fees.<br></div><div><br></div><div>The deduction is split between the two nodes in proportion to how much each one donated to the fees.<br></div><div>Thus, to compute how much will be deducted from `from_local_fee_msat`, the division below is rounded down:<br></div><div><br></div><div>&nbsp;&nbsp;&nbsp; deduct_from_local_fee_msat = 1000 * min_proposed_deducted_fee_sat * from_local_fee_msat / (from_local_fee_msat + from_remote_fee_msat)<br></div><div><br></div><div>The receiver:<br></div><div>* SHOULD send `propose_deduct_fees` with the lowest deducted fee, if the `min_proposed_deducted_fee_sat` does not match what it believes to have seen as the lowest.<br></div><div>&nbsp;&nbsp;&nbsp; * this may occur if messages get sent at about the same time.<br></div><div><div>&nbsp;&nbsp;&nbsp; * MAY fail the channel if this occurs too often.<br></div><div>* MAY fail the channel if it considers the fee deduction to be too low to be reasonable.<br></div><div><br></div><div>Regards,<br></div><div>ZmnSCPxj<br></div><div><div><br></div></div></div><div><br></div>