lnd/docs/release-notes/release-notes-0.18.0.md
Oliver Gugger e509657fac
Merge pull request #8620 from twofaktor/patch-1
[FIX] Small parenthesis error on v0.18 release notes
2024-04-04 10:21:19 +00:00

20 KiB

Release Notes

Bug Fixes

  • Fix a bug where sendcoins command with --sweepall flag would not show the correct amount.

  • Fixed a potential case that when sweeping inputs with locktime, an unexpected lower fee rate is applied.

  • LND will now enforce pong responses from its peers.

  • Fixed a possible unintended RBF attempt when sweeping new inputs with retried ones.

  • Fixed a case where lnd might panic due to empty witness data found in a transaction. More details can be found here.

  • Fixed a case where it's possible a failed payment might be stuck in pending.

  • Ensure that a valid SCID is used when marking a zombie edge as live.

  • Remove sweep transactions of the same exclusive group. When using neutrino as a backend unconfirmed transactions have to be removed from the wallet when a conflicting tx is confirmed. For other backends these unconfirmed transactions are already removed. In addition, a new walletrpc endpoint RemoveTransaction is introduced which let one easily remove unconfirmed transaction manually.

  • Fixed a case where lnd might dip below its channel reserve when HTLCs are added concurrently. A fee buffer (additional balance) is now always kept on the local side ONLY if the channel was opened locally. This is in accordance with the BOLT 02 specification and protects against sharp fee changes because there is always this buffer which can be used to increase the commitment fee, and it also protects against the case where HTLCs are added asynchronously resulting in stuck channels.

  • Fixed a watchtower client test flake that prevented new tasks from overflowing to disk.

  • Properly handle un-acked updates for exhausted watchtower sessions.

  • Allow shutdowns while HTLCs are in-flight. This change fixes an issue where we would force-close channels when receiving a shutdown message if there were currently HTLCs on the channel. After this change, the shutdown procedure should be compliant with BOLT2 requirements.

  • If HTLCs are in-flight at the same time that a shutdown is sent and then a re-connect happens before the coop-close is completed we now ensure that we re-init the shutdown exchange.

  • The AMP struct in payment hops will now be populated when the AMP TLV is set.

  • Add Taproot witness types to rpc.

  • Fixed the payload size calculation in our pathfinder because blinded hops introduced new tlv records.

  • Fixed a timestamp precision issue when querying payments and invoices using the start and end date filters.

  • Fixed an issue where locked_balance is not updated in WalletBalanceResponse when outputs are reserved for OpenChannel by using non-volatile leases instead of volatile locks.

  • Fixed a case where lnd might propose a low fee rate for the channel (when initiator) due to the mempool not having enough data yet or the channel might be drained locally which with the default fee allocation in place will eventually lead to the downsizing to the fee floor (1 sat/vByte) in the worst case.

  • Removed some unreachable code

Fixed fixed a function call where arguments were swapped.

New Features

Functional Enhancements

  • Experimental support for inbound routing fees is added. This allows node operators to require senders to pay an inbound fee for forwards and payments. It is recommended to only use negative fees (an inbound "discount") initially to keep the channels open for senders that do not recognize inbound fees. Send support is implemented as well.

  • A new config value, sweeper.maxfeerate, is added so users can specify the max allowed fee rate when sweeping on-chain funds. The default value is 1000 sat/vb. Setting this value below 100 sat/vb is not allowed, as low fee rate can cause transactions not confirming in time, which could result in fund loss. Please note that the actual fee rate to be used is determined by the fee estimator used(for instance bitcoind), and this value is a cap on the max allowed value. So it's expected that this cap is rarely hit unless there's mempool congestion.

  • Support for pathfinding and payment to blinded paths has been added via the QueryRoutes (and SendToRouteV2) APIs. This functionality is surfaced in lncli queryroutes where the required flags are tagged with (blinded paths). Updates to mission control to handle pathfinding errors for blinded paths are also included.

  • A new config value, http-header-timeout, is added so users can specify the amount of time the http server will wait for a request to complete before closing the connection. The default value is 5 seconds.

  • Update watchtowers to be Taproot ready.

  • routerrpc.usestatusinitiated is introduced to signal that the new payment status Payment_INITIATED should be used for payment-related RPCs. It's recommended to use it to provide granular controls over payments.

  • A helper command (lncli encryptdebugpackage) for collecting and encrypting useful debug information was added. This allows a user to collect the most relevant information about their node with a single command and securely encrypt it to the public key of a developer or support person. That way the person supporting the user with their issue has an eas way to get all the information they usually require without the user needing to publicly give away a lot of privacy-sensitive data.

  • When publishing transactions in lnd, all the transactions will now go through mempool acceptance check before being broadcast. This means when a transaction has failed the testmempoolaccept check by bitcoind or btcd, the broadcast won't be attempted. This check will be performed if the version of the chain backend supports it - for bitcoind it's v22.0.0 and above, for btcd it's v0.24.1 and above. Otherwise, the check will be skipped.

  • The coin-selection-strategy config option now also applies to channel funding operations and the new PsbtCoinSelect option of the FundPsbt RPC.

  • Environment variables can now be used in lnd.conf for the rpcuser and rpcpass fields to better protect the secrets.

  • When computing a minimum fee for transaction construction, lnd now takes our bitcoin peers' feefilter values into account.

  • Preparatory work for forwarding of blinded routes was added, along with support for forwarding blinded payments. Forwarding of blinded payments is disabled by default, and the feature is not yet advertised to the network.

RPC Additions

  • Deprecated StatusUnknown from the payment's rpc response in its status and added a new status, StatusInitiated, to explicitly report its current state. Before running this new version, please make sure to upgrade your client application to include this new status so it can understand the RPC response properly.

  • Adds a new RPC endpoint GetTransaction to the walletrpc sub-server to fetch transaction details.

  • The new GetDebugInfo RPC method was added that returns the full runtime configuration of the node as well as the complete log file. The corresponding lncli getdebuginfo command was also added.

  • Add a new flag to the CloseChannel RPC method that instructs the client to not wait for the closing transaction to be negotiated. This should be used if you don't care about the TXID and don't want the calling code to block while the channel drains the active HTLCs.

  • New watchtower client DeactivateTower and TerminateSession commands have been added. The DeactivateTower command can be used to mark a tower as inactive so that its sessions are not loaded on startup and so that the tower is not considered for session negotiation. TerminateSession can be used to mark a specific session as terminal so that that specific is never used again.

  • The FundPsbt RPC method now has a third option for specifying a template to fund. This new option will instruct the wallet to perform coin selection even if some inputs are already specified in the template (which wasn't the case with the previous options). Also, users have the option to specify whether a new change output should be added or an existing output should be used for the change. And the fee estimation is correct even if no change output is required.

lncli Additions

Improvements

Functional Updates

Tlv

Misc

  • Added full validation for blinded path payloads to allow fuzzing before LND fully supports blinded payment relay.

  • Allow healthcheck package users to provide custom callbacks which will execute whenever a healthcheck succeeds/fails.

  • PublishTransaction now returns the error types defined in btcd/rpcclient.

Logging

  • Add the htlc amount to contract court logs in case of timed-out HTLCs in order to easily spot dust outputs.

  • Add warning logs during startup when deprecated config options are used.

RPC Updates

  • Deprecated StatusUnknown from the payment's rpc response in its status and replaced it with StatusInitiated to explicitly report its current state.

  • Add an option to sign/verify a tagged hash to the signer.SignMessage/signer.VerifyMessage RPCs.

  • sendtoroute will return an error when it's called using the flag --skip_temp_err on a payment that's not an MPP. This is needed as a temp error is defined as a routing error found in one of an MPP's HTLC attempts. If, however, there's only one HTLC attempt, when it's failed, this payment is considered failed, thus there's no such thing as temp error for a non-MPP.

  • Support for MinConf(minimum number of confirmations) has been added to the WalletBalance RPC call.

  • EstimateRouteFee extends the graph based estimation by a payment probe approach which can lead to more accurate estimates. The new estimation method manually incorporates fees of destinations that lie hidden behind lightning service providers.

  • PendingChannels now optionally returns the raw hex of the closing tx in waiting_close_channels.

  • Allow callers of ListSweeps to specify the start height.

  • Coin Selection Strategy add coin selection strategy option to the following on-chain RPC calls EstimateFee, SendMany, SendCoins, BatchOpenChannel, SendOutputs, and FundPsbt.

lncli Updates

Code Health

Breaking Changes

Performance Improvements

Technical and Architectural Updates

BOLT Spec Updates

  • Add Dynamic Commitment Wire Types. This change begins the development of Dynamic Commitments allowing for the negotiation of new channel parameters and the upgrading of channel types.

  • Start using the timestamps query option in the query_channel_range message. This will allow us to know if our peer has a newer update for a channel that we have marked as a zombie. This addition can be switched off using the new protocol.no-timestamp-query-option config option.

  • Update min_final_cltv_expiry_delta. This only affects external invoices which do not supply the min_final_cltv_expiry parameter. LND has NOT allowed the creation of invoices with a lower min_final_cltv_expiry_delta value than 18 blocks since LND v0.11.0.

  • Make Legacy Features Compulsory. This change implements changes codified in bolts#1092 and makes TLV Onions, Static Remote Keys, Gossip Queries, compulsory features for LND's peers. Data Loss Protection has been compulsory for years.

Testing

Database

Code Health

Tooling and Documentation

Contributors (Alphabetical Order)

  • Alex Akselrod
  • Amin Bashiri
  • Andras Banki-Horvath
  • BitcoinerCoderBob
  • Carla Kirk-Cohen
  • Elle Mouton
  • ErikEk
  • Jesse de Wit
  • Joost Jager
  • Keagan McClelland
  • Marcos Fernandez Perez
  • Matt Morehouse
  • Mohamed Awnallah
  • Ononiwu Maureen Chiamaka
  • Slyghtning
  • Tee8z
  • Turtle
  • Hao Wang
  • w3irdrobot
  • Yong Yu
  • Ziggie