20 KiB
Release Notes
Payments
Support according to the spec has been added for payment metadata in invoices. If metadata is present in the invoice, it is encoded as a tlv record for the receiver.
This functionality unlocks future features such as stateless invoices.
Security
Taproot
The internal on-chain wallet of lnd is now able to create and spend from
Taproot (SegWit v1)
addresses. Using
lncli newaddress p2tr will create a new BIP-0086 keyspend only address and
then watch it on chain. Taproot script spends are also supported through the
signrpc.SignOutputRaw RPC (/v2/signer/signraw in REST).
The walletrpc.SignPsbt RPC now also supports Taproot PSBT
signing to fully support
remote signing with Taproot outputs.
The internal version of the aezeed was bumped to 1 to mark new seeds that
were created after introducing the Taproot key
derivation to simplify
detecting Taproot compatibility of a seed.
NOTE for users running a remote signing setup: A manual account import is
necessary when upgrading from lnd v0.14.x-beta to lnd v0.15.x-beta, see the
remote signing documentation for more
details.
Please upgrade to lnd v0.15.3-beta or later directly!
MuSig2
The signrpc.Signer RPC service now supports EXPERIMENTAL MuSig2
signing.
More information can be found in the MuSig2 documentation. Note that the MuSig2 BIP is not final yet and therefore the MuSig2 API must be considered to be HIGHLY EXPERIMENTAL and subject to change in upcoming releases. Backward compatibility is not guaranteed!
lncli
-
Add auto-generated command-line completions for Fish shell.
-
Add chan_point flag to closechannel command.
-
Add private status to pendingchannels response.
-
Add update node announcement for updating and propagating node information.
-
Add --socksproxy to allow for RPC calls via Tor.
-
Hop hints are now opt in when using
lncli addinvoice. Users now need to explicitly specify the--privateflag. -
A new
constrainmacarooncommand was added that allows caveats/restrictions to be added to an existing macaroon (instead of needing to bake a new one).
Neutrino
Neutrino now suports BIP 155, allowing it to connect to Bitcoin nodes that advertise a Tor v3 onion service address.
A new neutrino sub-server capable of status checks, adding, disconnecting and listing peers, fetching compact filters and block/block headers.
Btcwallet
Bug Fixes
-
Fixed an inactive invoice subscription not removed from invoice registry. When an invoice subscription is created and canceled immediately, it could be left uncleaned due to the cancel signal is processed before the creation. It is now properly handled by moving creation before deletion.
-
When the block height+delta specified by a network message is greater than the gossiper's best height, it will be considered as premature and ignored. These premature messages are now saved into a cache and processed once the height has reached.
-
Fixed failure to limit our number of hop hints in private invoices. When a private invoice is created, and the node had > 20 (our hop hint limit) private channels with inbound > invoice amount, hop hint selection would add too many hop hints. When a node had many channels meeting this criteria, it could result in an "invoice too large" error when creating invoices. Hints are now properly limited to our maximum of 20.
-
Fixed an issue where lnd would end up sending an Error and triggering a force close.
-
Added signature length validation when calling
NewSigFromRawSignature. -
Fixed a bug that would cause lnd to be unable to parse certain PSBT blobs.
-
Use normal TCP resolution, instead of Tor DNS resolution, for addresses using the all-interfaces IP.
-
Fixed race condition resulting in MPP payments sometimes getting stuck in-flight.
-
Fixed incorrect PSBT de-serialization for transactions with no inputs.
-
Fixed a wrong channel status inheritance used in
migration26andmigration27. -
Fixes an issue related to HTLCs on lease enforced channels that can lead to itest flakes
-
Fixes a bug that would cause
SignPsbtto panic w/ an underspecified packet -
Fixes a panic in the graph diameter calculation if the graph is empty.
Routing
- Add a new
time_prefparameter to the QueryRoutes and SendPayment APIs that allows the caller to control the trade-off between payment speed and cost in pathfinding.
Misc
-
An example systemd service file for running lnd alongside a bitcoind service is now provided in
contrib/init/lnd.service. -
Allow disabling migrations if the database backend passed to
channeldbwas opened in read-only mode. -
Disable compiler optimizations when building
lnd-debugandlncli-debug. It helps when stepping through the code with a debugger like Delve. -
A new command
lncli leaseoutputwas added. -
A nightly build of the
lnddocker image is now created automatically. -
Add default values to walletrpc.ListUnspent RPC call.
-
Chain backend healthchecks disabled for --nochainbackend mode
-
The
tlvpackage was refactored into its own Golang submodule. -
The
torpackage was refactored into its own Golang submodule and a new process for changing and tagging submodules was introduced in a series of 3 PRs (#6350, #6355 and #6356). -
Source repository can now be specified for Docker image builds
-
Make etcd leader election session TTL configurable.
-
A new config option,
pending-commit-intervalis added. This value specifies the maximum duration it allows for a remote peer to respond to a locally initiated commitment update. -
macosandappleMakefile tasks have been added.The
macostask usesgomobileto build anXCFrameworkthat can be used to embed lnd to macOS apps, similar to how theiostask builds for iOS.The
appletask usesgomobileto build anXCFrameworkthat can be used to embed lnd to both iOS and macOS apps. -
The CI and build infrastructure for the project has transitioned to using Go 1.18.
-
Announce the keysend feature bit in NodeAnnouncement if
--accept-keysendis set. -
Adds a new config option for adding a specific peer at startup.
-
Add a new method in
tlvto encode an uint64/uint32 field usingBigSizeformat. -
Add new
bitcoind.configandbitcoind.rpccookieoptions to allow specifying non-default paths for the configuration and RPC cookie files. -
Clarify comment on
chainnotifier.RegisterConfirmationsNtfn. -
Some of the invoice update logic has been refactored to be less verbose.
-
Minor fix to how bitcoind.rpccookie and bitocind.config are parsed from config file.
-
Fix a data race found when running unit test for revocation log.
-
A new version of the internal
tormodule was tagged and updated for the main module. -
lndnow packages the latest versions of the btcd libraries, btcwallet, and neutrino -
Refactor simple t.Fatalf test assertions to require.NoError .
RPC Server
-
Add value to the field
remote_balanceinpending_force_closing_channelsunderpendingchannelswhereas before was empty(zero). -
The graph's diameter is calculated and added to the
getnetworkinfooutput. -
Extend the HTLC interceptor API to provide more control over failure messages. With this change, it allows encrypted failure messages to be returned to the sender. Additionally it is possible to signal a malformed htlc.
-
Add an always on mode to the HTLC interceptor API. This enables interception applications where every packet must be intercepted.
-
Add destination output information to the transaction structure returned from the RPC
GetTransactionsand when subscribed withSubscribeTransactions. -
Support for making routes with the legacy onion payload format via
SendToRoutehas been removed. -
Close a gap in the HTLC interceptor API by intercepting htlcs in the on-chain resolution flow too.
-
Expose always on mode of the HTLC interceptor API through GetInfo.
Database
-
Add ForAll implementation for etcd to speed up graph cache at startup
-
Improve validation of a PSBT packet when handling a request to finalize it.
-
Add new Peers subserver with a new endpoint for updating the
NodeAnnouncementdata without having to restart the node. -
Add htlc expiry protection to the htlc interceptor API.
-
In order to safely advance commitment state,
lndsaves the past states and constructs a justice transaction in case of a remote breach. The states can grow very large on disk given a busy operating channel, which is now changed with a space deduction over (at least) 96 percents. -
Aside from the above database optimization, two new fields,
InitialLocalBalanceandInitialRemoteBalancehave been added to each channel to keep track of the push amount. For open channels, these values are taken from reading its past states. For historical(closed) channels, they are patched with empty values as the channels' past states have been deleted during closing. -
Mobile builds now expose main sub-servers by default. All API methods have prefixed the generated methods with the subserver name. This is required to support subservers with name conflicts.
Documentation
-
Improved instructions on how to build lnd for mobile.
-
Add list of build tags to the install instructions.
Monitoring
Code Health
Code cleanup, refactor, typo fixes
-
Refactored itest to better manage contexts inside integration tests.
-
Fix itest not picking up local config file or creating directories in home dir of the user.
-
A refactor of
SelectHopHintsallows code external to lnd to call the function, where previously it would require access to lnd's internals. -
rpc-check fails if it finds any changes including new and deleted files.
-
The
golangci-lintpackage was updated and new linters were enabled. -
The linting process now runs inside a docker container to fix versioning issues between projects.
-
The
whitespacelinter was enabled to make sure multi-lineifconditions and function/method declarations are followed by an empty line to improve readability. Note to developers: please make sure you delete the old version ofgolangci-lintin your$GOPATH/bindirectory.make lintdoes not automatically replace it with the new version if the binary already exists! -
The channel-commit-interval is now clamped to a reasonable timeframe of 1h.
Contributors (Alphabetical Order)
- 3nprob
- Alyssa Hertig
- Andras Banki-Horvath
- Andreas Schjønhaug
- asvdf
- bitromortac
- Bjarne Magnussen
- BTCparadigm
- Carl Dong
- Carla Kirk-Cohen
- Carsten Otto
- Dan Bolser
- Daniel McNally
- Elle Mouton
- ErikEk
- Eugene Siegel
- Evan Kaloudis
- Hampus Sjöberg
- henta
- hieblmi
- Joost Jager
- Jordi Montes
- LightningHelper
- Liviu
- mateuszmp
- Naveen Srinivasan
- Olaoluwa Osuntokun
- randymcmillan
- Rong Ou
- Thebora Kompanioni
- Tommy Volk
- Torkel Rogstad
- Vsevolod Kaganovych
- Yong Yu
- Ziggie