lnd.xprv/README.md

92 lines
6.1 KiB
Markdown
Raw Normal View History

2016-01-16 05:56:57 +03:00
# lnd - Lightning Network Daemon
[![Build Status](https://travis-ci.org/lightningnetwork/lnd.svg?branch=master)](https://travis-ci.org/lightningnetwork/lnd)
2016-01-15 13:40:56 +03:00
This repo is preliminary work on a lightning network peer-to-peer node and wallet.
2016-01-15 13:40:56 +03:00
It's currently being tested on Segnet4, where malleability has been solved with segwit.
2016-01-15 13:40:56 +03:00
This version of Lnd is not yet fully-operational, but a proof of concept on Segnet4 will likely exist soon. The projection is it will be operational before the necessary malleability soft-forks are into bitcoin mainnet (may be significantly before if there are any delays in mainnet malleability fix).
2016-01-16 00:19:13 +03:00
Don't try to port it to mainnet or an altcoin and use it today! No really. Lightning transactions will be fast, but for now, please wait just a little bit.
## Installation
2017-01-06 03:35:49 +03:00
* In order to build form source, the following build dependencies are required:
* **Go 1.5 or 1.6**
2017-01-06 03:35:09 +03: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.
2017-01-06 03:35:09 +03:00
**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**
2017-01-06 03:35:09 +03:00
2017-01-06 03:35:49 +03:00
This project uses `Glide` to manage dependencies as well as to provide *reproducible builds*.
2017-01-06 03:35:09 +03:00
To install `Glide`, execute the following command (assumes you already have Go properly installed):
`$ go get -u github.com/Masterminds/glide`
2017-01-06 03:35:09 +03:00
* **btcd**
This project currently requires `btcd` with segwit support, which is not merged yet. To install,
please see [the installation instructions](docs/INSTALL.md).
2017-01-06 03:35:49 +03:00
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
2017-01-06 03:35:09 +03:00
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/...
```
## Packages and Utilities
2016-01-16 11:22:23 +03:00
### chainntfs
2016-01-17 07:48:11 +03:00
A package centered around a generic interface for receiving transaction/confirmation based notifications concerning the blockchain. Such notifications are required in order for pending payment channels to be notified once the funding transaction gains a specified number of confirmations, and in order to catch a counter-party attempting a non-cooperative close using a past commitment transaction to steal funds.
2016-01-17 07:48:11 +03:00
At the moment, it only has a single concrete implementation: using btcd's websockets notifications. However, more implementations of the interface are planned, such as electrum, polling via JSON-RPC, Bitcoin Core's ZeroMQ notifications, and more.
2016-01-17 07:48:11 +03:00
### channeldb
2016-01-17 07:48:11 +03:00
lnd's primary datastore. It uses a generic interface defined in [walletdb](https://godoc.org/github.com/btcsuite/btcwallet/walletdb) allowing for usage of any storage backend which adheres to the interface. The current concrete implementation used is driven by [bolt](https://github.com/boltdb/bolt). `channeldb` is responsible for storing state such as meta-data concerning the current open channels, closed channels, past routes we used, fee schedules within the network, and information about remote peers (ID, uptime, reputation, etc).
2016-01-16 05:56:57 +03:00
### cmd / lncli
2016-01-16 00:19:13 +03:00
A command line to query and control a running lnd. Similar to bitcoin-cli
2016-01-16 05:56:57 +03:00
### cmd / lnshell
Interactive shell for commands to direct the lnd node. Will probably be merged into lnd soon as a command line option.
### elkrem
2016-01-16 00:19:13 +03:00
Library to send and receive a tree structure of hashes which can be sequentially revealed. If you want to send N secrets, you only need to send N secrets (no penalty there) but the receiver only needs to store log2(N) hashes, and can quickly compute any previous secret from those.
This is useful for the hashed secrets in LN payment channels.
2016-01-16 05:56:57 +03:00
### lndc
2016-01-17 07:48:11 +03:00
Library for authenticated encrypted communication between LN nodes. It uses chacha20_poly1305 for the symmetric cipher, and the secp256k1 curve used in bitcoin for public keys. No signing is used, only two ECDH calculations: first with ephemeral key pairs and second with persistent identifying public keys.
### lnrpc
lnd's RPC interface. Currently [gRPC](http://www.grpc.io/), a high-performance RPC framework is used. gRPC provides features such as a stub-based client interface in several languages, streaming RPCs, payload agnostic request/response handling, and more. In addition to gRPC, lnd will also offer a basic REST-based http RPC interface. For now, connections are not encrypted, or authenticated. For authentication, [macaroons](http://research.google.com/pubs/pub41892.html) will likely be integrated due to their simplicity, flexibility, and expressiveness.
2016-01-16 05:56:57 +03:00
### lnstate
In-progress update which improves current implementation of channel state machine to allow for higher throughput.
2016-01-16 05:56:57 +03:00
### lnwallet
2016-01-16 05:56:57 +03:00
An application specific, yet general Bitcoin wallet which understands all the fancy script, and transaction formats needed to transact on the Lightning Network. The interface, and interaction with the core wallet logic has been designed independent of any peer-to-peer communication. The goal is to make lnwallet self-contained, and easily embeddable within future projects interacting with the Lightning Network. The current state machine for channel updates is blocking, only allowing one pending update at a time. This will soon be replaced in favor of the highly concurrent, non-blocking state machine within `lnstate`.
2016-01-16 05:56:57 +03:00
### lnwire
2016-01-17 07:48:11 +03:00
Library of messages for Lightning Network node to node communications. Messages for opening and closing channels, as well as updating and revoking channel states are described here.
2016-01-16 05:56:57 +03:00
### shachain
2016-01-17 07:43:15 +03:00
An implementation of Rusty Russell's [64-dimensional shachain](https://github.com/rustyrussell/ccan/blob/master/ccan/crypto/shachain/design.txt).
2016-01-16 05:56:57 +03:00
### uspv
Wallet library to connect to bitcoin nodes and build a local SPV and wallet transaction state.