lnd/README.md
2017-01-10 12:23:56 -08:00

101 lines
4.4 KiB
Markdown

# `lnd` - the Lightning Network Daemon
[![Build Status](https://travis-ci.org/lightningnetwork/lnd.svg?branch=master)](https://travis-ci.org/lightningnetwork/lnd)
`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
## Installation
* In order to build form source, the following build dependencies are required:
* **Go 1.5 or 1.6**
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.
* **Glide**
This project uses `Glide` to manage dependencies as well as to provide *reproducible builds*.
To install `Glide`, execute the following command (assumes you already have Go properly installed):
`$ go get -u github.com/Masterminds/glide`
* **btcd**
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).
With the preliminary steps completed, to install `lnd`, `lncli`, and all
related dependencies run the following commands:
```
$ 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
To update your version of `lnd` to the latest version run the following
commands:
```
$ cd $GOPATH/src/github.com/lightningnetwork/lnd
$ git pull && glide install
$ go install . ./cmd/...
```
## IRC
* irc.freenode.net
* channel #lnd
* [webchat](https://webchat.freenode.net/?channels=lnd)
## License
`lnd` is licensed under the [MIT license](https://github.com/lightningnetwork/lnd/blob/master/LICENSE).