24 KiB
Release Notes
Peer to Peer Behavior
lnd
will now properly prioritize sending out gossip updates generated
locally to all connected
peers, regardless of their
current gossip sync query status.
There's also a bug fix that might lead to channel updates being missed, causing channel graph being incomplete. Aside from that, a potential announcement messages being sent out of order is also fixed.
lnd
will now attempt to rebroadcast unconfirmed
transactions with each
passing block the transaction hasn't been confirmed. This was already the
default for the neutrino backend. This complements the existing behavior where
all unconfirmed transactions are rebroadcast on start up.
BOLT Specs
-
Warning messages from peers are now recognized and logged by lnd.
-
Decrypt onion failure messages with a length greater than 256 bytes. This moves LND closer to being spec compliant.
-
Channel updates without the maxHTLC message flag set are recognized as invalid and are not relayed.
RPC
-
The
RegisterConfirmationsNtfn
call of thechainnotifier
RPC sub-server now optionally supports returning the entire block that confirmed the transaction. -
Add
macaroon_root_key
field toInitWalletRequest
to allow specifying a root key for macaroons during wallet init rather than having lnd randomly generate one for you. -
A new
SignedInputs
field is added toSignPsbtResponse
that returns the indices of inputs that were signed by our wallet. Prior to this changeSignPsbt
didn't indicate whether the Psbt held any inputs for our wallet to sign. -
Add TrackPayments method to the RPC to allow subscribing to updates from any inflight payment. Similar to TrackPaymentV2, but for any inflight payment.
-
Catch and throw an error during
openchannel
if the local funding amount given is zero. -
Extend the HTLC interceptor server implementation with watchdog functionality to cancel back HTLCs for which an interceptor client does not provide a resolution in time. If an HTLC expires, the counterparty will claim it back on-chain and the receiver will lose it. Therefore the receiver can just as well fail off-chain a few blocks before so that the channel is saved.
-
Make remote channel reserve amount configurable for
openchannel
-
ForwardingHistory
now enriches each forwarding event with inbound and outbound peer alias names if the new flagPeerAliasLookup
inForwardingHistoryRequest
is set to true.lncli fwdinghistory
enables this feature by default but adds a new flagskip_peer_alias_lookup
to skip the lookup. -
Add the possibility to define a change address type for FundPsbt RPC call. If no address type is specified for default/imported accounts, P2WKH will be used. No custom address type should be provided for custom accounts as we will always use the coin selection key scope to generate the change address. This possibility is available in lncli as well.
-
The graph lookups method
DescribeGraph
,GetNodeInfo
andGetChanInfo
now expose tlv data that is broadcast over the gossip network. -
Add new HTLC notifier event and lookup RPC for the final settlement of incoming HTLCs. This allows applications to wait for the HTLC to actually disappear from all valid commitment transactions, rather than assume that it will. With the new extensions, situations can be avoided where the application considers an HTLC settled, but in reality the HTLC has timed out.
Final resolution data will only be available for htlcs that are resolved after upgrading lnd. Once resolved, it's final status can be retrieved via
LookupHtlcResolution
.This feature is opt-in via a config flag. The status of the flag is exposed at run-time through GetInfo.
-
Zero-amount private invoices now provide hop hints, up to
maxHopHints
(20 currently). -
Add chainkit RPC endpoints: GetBlock, GetBestBlock, GetBlockHash. These endpoints provide access to chain block data.
-
Ensure that closing addresses match the node network for
OpenChannel
requests -
The
SendCustomMessage
andSubscribeCustomMessage
APIs can now be used to send and receive custom messages below the custom range if lnd is built with thedev
tag, and configured to opt into overriding a specific message type -
A bug has been fixed within the
SignOutputRaw
call for taproot signatures. TheSignOutputRaw
call will now properly work for taproot signatures with a non-default sighash. -
The experimental MuSig2 RPC in the
signrpc
package was upgraded to the BIP draft versionv1.0.0rc2
. To remain backward compatible with applications that have on-chain funds on keys that were created with the previous version of the MuSig2 BIP draftv0.4.0
(such as Pool accounts) a version flag was added to theMuSig2CombineKeys
andMuSig2CreateSession
RPC calls. That version flag is mandatory, which means software using MuSig2 (such as Pool or Loop) must update in order to use the new versioned RPC and upgrade any on-chain outputs to the new version. -
A bug has been fixed which could cause
lnd
to crash when parsing a malformed HTLC intercept message. -
A bug in the
updatenodeannouncement
peers cli which did not allow setting/ unsetting of feature bits also has been fixed. -
Enrich the
Channel
message with a peers' alias in order to retrieve it inListChannels
. This behavior is opt-in for users of the rpc interface through a new parameter inListChannelsRequest
calledPeerAliasLookup
. For users of lncli this parameter is enabled by default but can be disabled with a new flag--skip_peer_alias_lookup
. -
Assign potential peer alias lookup errors in the
ListChannels
andForwardingHistory
rpcs to the rpc response.
Wallet
-
Allows Taproot public keys and tap scripts to be imported as watch-only addresses into the internal wallet. NOTE that funding PSBTs from imported tap scripts is not currently possible.
-
Fix the issue of ghost UTXOs not being detected as spent if they were created with an external tool.
Build
-
The project has updated to Go 1.19! Go 1.18 is now the minimum version needed to build the project.
-
Use Go's
runtime/debug
package to get information about the build
Invoices
- Define a new InvoiceDB interface to be used in all the packages that need to interact with invoice data.
Misc
-
Fixed a bug where the Switch did not reforward settles or fails for waiting-close channels
-
Fixed a flake in the TestChannelLinkCancelFullCommitment unit test.
-
The macaroon key store implementation was refactored to be more generally usable.
-
Fixed a bug where cookie authentication with Tor would fail if the cookie path contained spaces. With the module updated,
lnd
now parses Tor control port messages correctly. -
Add option to encrypt Tor private key, and update the Tor module to pave the way for this functionality.
-
Stop sending a synchronizing error on the wire when out of sync.
-
Update cert module to allow a way to update the tls certificate without restarting lnd.
-
Fixed a bug where paying an invoice with a malformed route hint triggers a never-ending retry loop
-
Migrated from go-fuzz to Go 1.18's new standard fuzz testing library. Updated build and documentation to reflect this.
-
Updated several tlv stream-decoding callsites to use tlv/v1.1.0 P2P variants for untrusted input.
-
Fixed a failure message parsing bug that caused additional failure message data to be interpreted as being part of a channel update.
-
Code style cleanup in the funding package.
-
Decreased the mutex lock scope inside
ChannelRouter
. -
Add Custom Message to the fuzz testsuite in the lnwire package
-
Remove non-existent Cleanup calls from etcd test code in the
kvdb
package -
A bug has been fixed where a reorg would cause zero-conf channels to be deleted from the graph.
-
Add a flag to allow for the option to encrypt the tls key.
-
Remove unused args from
cert.GenCertPair
. -
Fixup GenCertPair use after updating to cert/v1.2.1.
lncli
-
Add an
insecure
flag to skip tls auth as well as ametadata
string slice flag that allows the caller to specify key-value string pairs that should be appended to the outgoing context. -
Fix command line argument parsing for
lncli sendpayment
. -
Fix mapslice cap out of range error that occurs if the number of profiles is zero.
-
A new config option,
batchwindowduration
has been added tosweeper
to allow customize sweeper batch duration. -
Add
base_fee_msat
andfee_rate_ppm
flags toopenchannel
requests so that the user can specify fees during channel creation time in addition to the default configuration. -
Sleep for 10ms when funding locked message is not received to avoid CPU spike.
-
A new config option,
mailboxdeliverytimeout
has been added tohtlcswitch
. -
Label the openchannel tx first before notifying the channel open event.
-
Add check for
pay_req
argument insendpayment
anddecodepayreq
commands to trim "lightning:" prefix before processing the request. Invoices may be prefixed with "lightning:" on mobile and web apps and it's likely for users to copy the invoice payment request together with the prefix, which throws checksum error when pasting it to the CLI. -
Allow lncli to read binary PSBTs from a file during PSBT channel funding flow to comply with BIP 174
-
Add interface to chainkit RPC. This addition consists of the
chain
subcommand group:getblock
,getblockhash
, andgetbestblock
. These commands provide access to chain block data. -
Fixed a bug that might lead to channel updates being missed, causing channel graph being incomplete.
-
During reconnection, enabling channels might be failed due to the startup of link is falling behind, which is now fixed by retrying the enable request.
-
Allow
--stateless_init
mode to be used for watch-only wallets.
Code Health
-
Fix loop and other temporary variables being accessed in goroutines.
-
CI: update test coverage library go-acc v0.2.6 -> v0.2.8
-
Payment related code has been refactored to allow the usage of new payment statuses.
-
Fixed a test closure issue found in
bitcoindnotify/bitcoind_test.go
. -
Add methods to easily check if an invoice is AMP or Keysend.
Watchtowers
-
Create a towerID-to-sessionID index in the wtclient DB to improve the speed of listing sessions for a particular tower ID. This PR also ensures a closer coupling of Towers and Sessions and ensures that a session cannot be added if the tower it is referring to does not exist. A follow-up migration was added to ensure that entries are added to the new index for all towers in the db, including those for which there are not yet associated sessions.
-
Remove
AckedUpdates
&CommittedUpdates
from theClientSession
struct in order to improve the performance of fetching aClientSession
from the DB.
DB
-
Add a sqlite backend option to the kvdb package, and add it as a backend option to LND. Note that with this upgrade, support for the
dragonfly-amd64
,netbsd-386
,netbsd-arm64
andopenbsd-386
platforms has been dropped. -
Bumped etcd dependencies to 3.5.7 to resolve linking issues with outdated dependencies.
-
Re-add local and remote output amounts to the revocation log and add a new
--db.no-rev-log-amt-data
flag that can be used to explicitly opt out of
storing this extra data. It should be noted that setting this flag is not recommended unless the user is sure that they will never activate their watchtower client (--wtclient.active
) in the future. The new flag can not be set at all if the--wtclient.active
flag has been set.
Pathfinding
- Pathfinding takes capacity of edges into account to improve success probability estimation.
- A new probability model ("bimodal") is added which models channel based liquidities within a probability theory framework.
- The a priori capacity factor is made configurable and its effect is limited.
Configuration
- Note that this pathfinding change
introduces a breaking change in lnd.conf apriori parameters under the routing
section, see sample-lnd.conf for an updated configuration. The behavior of
lncli setmccfg/getmccfg
is altered as well.
Tooling and documentation
-
Tests in
htlcswitch
will now clean up the temporary resources they create. -
Updated the github actions to use
make fmt-check
in its build process. -
Database related code was refactored to allow external tools to use it more easily, in preparation for adding a data migration functionality to
lndinit
. -
golangci-lint
will now check new code using additional linters and was fine-tuned to fit our code style or to disable annoying new linters. -
Update github actions to check commits against the target base branch rather than just using the master branch. And skip the commit check for all non-PR events. The Golang build cache was also optimized to speed up tests and builds.
-
Fixed docker image version used in
tools
and golangci issue where it cannot fetch commits.
Integration test
- The
lntest
has been refactored to provide a better testing suite for writing integration tests. A new defined structure is implemented, please refer to README for more details. Along the way, several PRs(6776, 6822, 7172, 7242, 7245), 6823, 6824, 6825) have been made to refactor the itest for code health and maintenance.
Contributors (Alphabetical Order)
- Alejandro Pedraza
- Alyssa Hertig
- Andras Banki-Horvath
- andreihod
- Antoni Spaanderman
- bitromortac
- Carla Kirk-Cohen
- Carsten Otto
- Chris Geihsler
- Conner Babinchak
- cutiful
- Daniel McNally
- Elle Mouton
- ErikEk
- Eugene Siegel
- Graham Krizek
- hieblmi
- Jesse de Wit
- Joost Jager
- Jordi Montes
- lsunsi
- Matt Morehouse
- Michael Street
- Olaoluwa Osuntokun
- Oliver Gugger
- Pierre Beugnet
- Priyansh Rastogi
- Robyn Ffrancon
- Roei Erez
- Tommy Volk
- Yong Yu
- Yusuke Shimizu
- ziggie1984