This release marks a minor release in the
0.6-beta series. This release contains no major new features, and instead contains a series of bug-fixes, optimizations, and stability improvements.
Verifying the Release
In order to verify the release, you'll need to have
gpg2 installed on your system. Once you've obtained a copy (and hopefully verified that as well), you'll first need to import the keys that have signed this release if you haven't done so already:
curl https://keybase.io/roasbeef/pgp_keys.asc | gpg --import
Once you have his PGP key you can verify the release (assuming
manifest-v0.6.1-beta.txt.sig are in the current directory) with:
gpg --verify manifest-v0.6.1-beta.txt.sig
You should see the following if the verification was successful:
gpg: assuming signed data in 'manifest-v0.6.1-beta.txt' gpg: Signature made Thu May 9 16:31:08 2019 PDT gpg: using RSA key F8037E70C12C7A263C032508CE58F7F8E20FD9A2 gpg: Good signature from "Olaoluwa Osuntokun <email@example.com>" [ultimate]
That will verify the signature on the main manifest page which ensures integrity and authenticity of the binaries you've downloaded locally. Next, depending on your operating system you should then re-calculate the
sha256 sum of the binary, and compare that with the following hashes (which are included in the manifest file):
8fd4bfb26d402a4882f4c89ab700186431c178af0a9f0bf61513bbb48cd497c3 lnd-darwin-386-v0.6.1-beta.tar.gz 02330ede4e7508a37e92bcc4c0dd0ac977f51a8fd42be9f114b1e42e58ff07c9 lnd-darwin-amd64-v0.6.1-beta.tar.gz 60c7aef87789271cc1c55286068ce2e6e94ccae48d85465df0606fe96bbe01cd lnd-dragonfly-amd64-v0.6.1-beta.tar.gz 8f328ef03e2f6fb47aab28af7a8949d3fadaac5769382d45ebbdf2fca7921593 lnd-freebsd-386-v0.6.1-beta.tar.gz f50b91b6c0e95b2a5c0e246fb17e07eddefb77533b10c034bb5454ad4001edcd lnd-freebsd-amd64-v0.6.1-beta.tar.gz 9e2c4b926140aacfc680e53191b1b56a18b0def422b1f8f4cc66536298721115 lnd-freebsd-arm-v0.6.1-beta.tar.gz 00a7cd0ca657bb242b0f3acb5f4e26a13fd789946fab73c252118e3f89c1cf57 lnd-linux-386-v0.6.1-beta.tar.gz c55367edb82955dc942baf9f48f79fadde1eee0e86c1d59d2fe1993140ec1b3f lnd-linux-amd64-v0.6.1-beta.tar.gz d5f7280c324ebc1d322435a0eac4c42dca73ebc6a613878d9e0d33a68276da5c lnd-linux-arm64-v0.6.1-beta.tar.gz 00ff9c61fbd272863aef677db240b04eecdaae0cfb479cf25c713b89ff81d41c lnd-linux-armv6-v0.6.1-beta.tar.gz 5541959c7fde98d76d88cc8070ca626c681ba38c44afcb85bf417a9a677e23c2 lnd-linux-armv7-v0.6.1-beta.tar.gz ed8aa2ef8f4e42651a16c90d5ab2d4485396b4c795bc183fd01ae63b39d4201e lnd-linux-mips64-v0.6.1-beta.tar.gz a97dfc432747f4dcd6deb8f263b18453c68b4882b1cc1ff84d90f25ba2ed5151 lnd-linux-mips64le-v0.6.1-beta.tar.gz 95ff869a1bbcba20b5c6387f09175eaf3a16f2026e5113eff9abb7b595039423 lnd-linux-ppc64-v0.6.1-beta.tar.gz 5efb454850f41f69a397d4a9cd4778f6a251ce21cf796960b60d6799ff128bf1 lnd-netbsd-386-v0.6.1-beta.tar.gz 6059ab2d6d03604d48c69eeaf1f59f2131b1ce76f714629a6e1c2063f4da4788 lnd-netbsd-amd64-v0.6.1-beta.tar.gz 5db4391a3d5646c3adcdaa1f57fbd9a8b9cfb585e38cccc37729bd5fe2bca8e6 lnd-openbsd-386-v0.6.1-beta.tar.gz c5b84fe5982ae4b7745d0f083d123d304f97c5da4e6fe515f84b3272495fb1a2 lnd-openbsd-amd64-v0.6.1-beta.tar.gz 68fcede095d6e4f038ba49c46f24a07ff2d07ea11eab95d2d02d5c1467d4d2fc lnd-source-v0.6.1-beta.tar.gz e2cb484fda567eb03a534f36613771b1bc10c7220b255b3972784f38abdc2342 lnd-windows-386-v0.6.1-beta.zip c370735f280ab2b5f6421dafccbdc0e09ff5cfe5f3a65f87155d5cf1e20b1249 lnd-windows-amd64-v0.6.1-beta.zip afb75c146f03bc4d2af77c49ac4ced88f945a5d3cb9ba32181bc9145149e6af6 vendor.tar.gz
One can use the
shasum -a 256 <file name here> tool in order to re-compute the
sha256 hash of the target binary for your operating system. The produced hash should be compared with the hashes listed above and they should match exactly.
Finally, you can also verify the tag itself with the following command:
git verify-tag v0.6.1-beta
Building the Contained Release
With this new version of
lnd, we've modified our release process to ensure the bundled release is now fully self contained. As a result, with only the attached payload with this release, users will be able to rebuild the target release themselves without having to fetch any of the dependencies. Note that at this stage, binaries aren't yet fully reproducible (even with
go modules). This is due to the fact that by default, Go will include the full directory path where the binary was built in the binary itself. As a result, unless your file system exactly mirrors the machine used to build the binary, you'll get a different binary, as it includes artifacts from your local file system. This will be fixed in
go1.13, and before then we may modify our release system to do this automatically.
In order to re-build from scratch, assuming that
lnd-source-v0.6-beta.tar.gz are in the current directory:
tar -xvzf vendor.tar.gz tar -xvzf lnd-source-v0.6.1-beta.tar.gz GO111MODULE=on go install -v -mod=vendor -ldflags "-X github.com/lightningnetwork/lnd/build.Commit=v0.6.1-beta" ./cmd/lnd GO111MODULE=on go install -v -mod=vendor -ldflags "-X github.com/lightningnetwork/lnd/build.Commit=v0.6.1-beta" ./cmd/lncli
-mod=vendor flag tells the
go build command that it doesn't need to fetch the dependencies, and instead, they're all enclosed in the local vendor directory.
Additionally, it's now possible to use the enclosed
release.sh script to bundle a release for a specific system like so:
LNDBUILDSYS="linux-arm64 darwin-amd64" ./release.sh
release.sh script will now also properly include the commit hash once again, as a regression caused by a change to the internal build system has been fixed.
A bug has been fixed in the minimum version verification for the Tor daemon that
lnd enforces. Before this fix,
lnd would at times fail to connect to a Tor daemon with a version beyond the minimum version we require.
Protocol and Cross Implementation Compatibility Improvements
lnd will now properly handle the conversion from an
UpdateFailMalformedHTLC error to a regular
UpdateFailHTLC error. Before this fix,
lnd would incorrectly send an error that wasn't able to be decrypted by the sender of an the original HTLC.
On-Chain Commitment/HTLC Handling
A series of parameters related to when
lnd will go to chain for an HTLC, and also when it will reject an incoming/outgoing HTLC for being "too close for comfort" have been adjusted. As a result, it's no longer possible for
lnd to accept an HTLC then immediately go to chain for it. Additionally, it's now possible for
lnd to forward an HTLC as the last hop to a destination with a very low final CLTV delta.
lnd will now detect a local force close (self initiated) based on the outputs rather then the old
txid based comparison. This patches an edge case related to SCB restoration where if a user broadcasted a force close then restored their SCB,
lnd would miss this local force close transaction and attempt to redeem using an incorrect path. This bug has never been observed in the wild, but nevertheless warranted patching.
Gossip and P2P Handling
Non Write Pool Blocking Writes
Flushing a message to the socket is no longer blocks the write pool. One result of this change is that we are now we are able to gracefully handle timeout errors and resume partially sent messages. As of #2819, if a message is partially written to the wire due to a timeout error, we will try to write the full message again. In turn, this will produce an authentication error on the remote side (after it is able to read the number of bytes specified in the header) since the middle of the latter ciphertext will not pass as the MAC check.
We resolve this by splitting the Write call into two subroutines, WriteMessage and Flush. WriteMessage encrypts the plaintext and buffers the ciphertext on the underlying connection. A subsequent call to Flush will then attempt to write the bytes out on the wire. If a timeout error is encountered during flush, we can safely resume the byte stream by calling Flush again. In addition to being able to resume partial writes, this also has a yuuuge benefit in not blocking the write pool with network operations. This fully decouples the number of write pool workers from the number of peers, since the blocking operations now take place in each peer.
Synchronous Gossip Response Writes
All replies to gossip query messages are now fully synchronous. This means that if a peer requests a set of channels, then we won't send the next message until after the current message has been flushed to the socket. Node operators should find that start up is now much snappier, and the post start up memory burst to also be much lower.
SyncManager Simplification and Improvements
We've made some improvements to the recently introduced SyncManager. These improvements include:
- Active syncers will no longer attempt to synchronize our graph with remote peers. Instead, we'll now rely on synchronizing our graph with remote peers through the routine historical syncs performed by the
SyncManager. Since active syncers will no longer attempt this synchronization, the
SyncManager's round-robin is no longer needed.
- Handling initial historical sync disconnections: Every time lnd starts up, it attempts an initial historical graph sync with the first peer that connects. If the peer ends up disconnecting, then we wouldn't handle finding a replacement to continue performing the initial historical sync.
- Queueing active syncers until the initial historical sync completes: We do this to ensure we can properly handle any new channel updates at tip. This is required for fresh nodes that are syncing the channel graph for the first time. If we begin accepting updates at tip while the initial historical sync is still ongoing, then we risk not processing certain updates since we've yet to learn of the channels themselves.
RPC Bug Fixes
The route cache has been removed. After updates to the
SendToRoute RPC command, the cache could at times cause an incorrect result from
Networking Bug Fixes
There is no longer a
main package, instead the top-level package within the project is now
lnd. This is a prep for changes to make
lnd easier to embed in mobile applications for iOS and Android.
The full list of changes since
0.6.0-beta can be found here:
Contributors (Alphabetical Order)
Johan T. Halseth