2017-01-10 21:14:37 +01:00
|
|
|
# `lnd` - the Lightning Network Daemon
|
2016-07-28 20:27:18 +02:00
|
|
|
[![Build Status](https://travis-ci.org/lightningnetwork/lnd.svg?branch=master)](https://travis-ci.org/lightningnetwork/lnd)
|
2016-01-15 11:40:56 +01:00
|
|
|
|
|
|
|
|
2017-01-10 21:14:37 +01:00
|
|
|
`lnd` is a complete implementation of a node on the [Lightning
|
|
|
|
Network](lightning.network). `lnd` is currently deployed on the Bitcoin Test
|
|
|
|
Network (testnet4) and utilizes an upcoming upgrade to Bitcoin: Segregated
|
|
|
|
Witness. The project's codebase uses the
|
|
|
|
[btcsuite](https://github.com/btcsuite/) set of Bitcoin libraries, and is
|
|
|
|
currently dependant on [btcd](https://github.com/btcsuite/btcd).
|
|
|
|
|
|
|
|
The Lightning Network Daemon (`lnd`) is capable of: creating channels, closing
|
|
|
|
channels, completely managing all channel states (including the exceptional
|
|
|
|
ones!), maintaining a fully authenticated+validated channel graph, performing
|
|
|
|
path finding within the network, passively forwarding incoming payments, and
|
|
|
|
sending outgoing [onion-encrypted
|
|
|
|
payments](https://github.com/lightningnetwork/lightning-onion) through the
|
|
|
|
network.
|
|
|
|
|
|
|
|
## Lightning Network Specification Compliance
|
|
|
|
|
|
|
|
`lnd` doesn't yet _fully_ conform to the [Lightning Network specification
|
|
|
|
(BOLT's)](https://github.com/lightningnetwork/lightning-rfc). BOLT stands for:
|
|
|
|
Basic of Lightning Technologies. The specifications are currently being drafted
|
|
|
|
by several groups of implementers based around the world including the
|
|
|
|
developers of `lnd`. The set of specification documents as well as our
|
|
|
|
implementation of the specification are still a work-in-progress. With that
|
|
|
|
said, `lnd` the current status of `lnd`'s BOLT compliance is:
|
|
|
|
|
|
|
|
- [ ] BOLT 1: Base Protocol
|
|
|
|
* `lnd` currently utilizes a distinct wire format which was created before
|
|
|
|
the emgergence of the current draft of BOLT specifications. We don't
|
|
|
|
have an `init` message, but we do have analogues to all the other
|
|
|
|
defined message types.
|
|
|
|
- [ ] BOLT 2: Peer Protocol for Channel Management
|
|
|
|
* `lnd` implements all the functionality defined within the document,
|
|
|
|
however we currently use a different set of wire messages. Additionally,
|
|
|
|
`lnd` uses a distinct commitment update state-machine and doesn't yet
|
|
|
|
support dynamically updating commitment fees.
|
|
|
|
- [ ] BOLT 3: Bitcoin Transaction and Script Formats
|
|
|
|
* `lnd` currently uses a commitment design from a prior iteration of the
|
|
|
|
protocol. Revocation secret generation is handled by `elkrem` and our
|
|
|
|
scripts are slightly different.
|
|
|
|
- [X] BOLT 4: Onion Routing Protocol
|
|
|
|
- [X] BOLT 5: Recommendations for On-chain Transaction Handling
|
|
|
|
- [X] BOLT 7: P2P Node and Channel Discovery
|
|
|
|
- [X] BOLT 8: Encrypted and Authenticated Transport
|
2016-01-16 09:13:11 +01:00
|
|
|
|
2016-01-18 04:53:50 +01:00
|
|
|
## Installation
|
|
|
|
|
2017-01-06 01:35:49 +01:00
|
|
|
* In order to build form source, the following build dependencies are required:
|
2016-07-24 01:11:17 +02:00
|
|
|
* **Go 1.5 or 1.6**
|
2017-01-06 01:35:09 +01:00
|
|
|
|
2017-01-10 21:14:37 +01:00
|
|
|
Installation instructions can be found here: http://golang.org/doc/install.
|
|
|
|
It is recommended to add `$GOPATH/bin` to your `PATH` at this point.
|
|
|
|
**Note:** If you are building with Go 1.5, then you'll need to enable the
|
|
|
|
vendor experiment by setting the `GO15VENDOREXPERIMENT` environment
|
|
|
|
variable to `1`. If you're using Go 1.6 or later, then it is safe to skip
|
|
|
|
this step.
|
|
|
|
|
2016-07-24 01:11:17 +02:00
|
|
|
* **Glide**
|
2017-01-06 01:35:09 +01:00
|
|
|
|
2017-01-06 01:35:49 +01:00
|
|
|
This project uses `Glide` to manage dependencies as well as to provide *reproducible builds*.
|
2017-01-06 01:35:09 +01:00
|
|
|
To install `Glide`, execute the following command (assumes you already have Go properly installed):
|
|
|
|
|
2016-07-24 01:11:17 +02:00
|
|
|
`$ go get -u github.com/Masterminds/glide`
|
2017-01-06 01:35:09 +01:00
|
|
|
* **btcd**
|
|
|
|
|
2017-01-10 21:14:37 +01:00
|
|
|
This project currently requires `btcd` with segwit support, which is not
|
|
|
|
yet merged into the master branch. Instead,
|
|
|
|
[roasbeef](https://github.com/roasbeef/btcd) maintains a fork with his
|
|
|
|
segwit implementation applied. To install, please see [the installation
|
|
|
|
instructions](docs/INSTALL.md).
|
2016-07-24 01:11:17 +02:00
|
|
|
|
2017-01-10 21:14:37 +01:00
|
|
|
With the preliminary steps completed, to install `lnd`, `lncli`, and all
|
|
|
|
related dependencies run the following commands:
|
2016-01-18 04:53:50 +01:00
|
|
|
|
|
|
|
```
|
2016-07-24 01:11:17 +02:00
|
|
|
$ git clone https://github.com/lightningnetwork/lnd $GOPATH/src/github.com/lightningnetwork/lnd
|
|
|
|
$ cd $GOPATH/src/github.com/lightningnetwork/lnd
|
|
|
|
$ glide install
|
|
|
|
$ go install . ./cmd/...
|
|
|
|
```
|
|
|
|
|
|
|
|
## Updating
|
2017-01-10 21:14:37 +01:00
|
|
|
To update your version of `lnd` to the latest version run the following
|
|
|
|
commands:
|
2016-07-24 01:11:17 +02:00
|
|
|
```
|
|
|
|
$ cd $GOPATH/src/github.com/lightningnetwork/lnd
|
|
|
|
$ git pull && glide install
|
|
|
|
$ go install . ./cmd/...
|
2016-01-18 04:53:50 +01:00
|
|
|
```
|
|
|
|
|
2017-01-10 21:14:37 +01:00
|
|
|
## IRC
|
|
|
|
* irc.freenode.net
|
|
|
|
* channel #lnd
|
|
|
|
* [webchat](https://webchat.freenode.net/?channels=lnd)
|
2016-01-16 03:24:38 +01:00
|
|
|
|
2017-01-10 21:14:37 +01:00
|
|
|
## License
|
|
|
|
`lnd` is licensed under the [MIT license](https://github.com/lightningnetwork/lnd/blob/master/LICENSE).
|