2017-05-09 15:33:42 +02:00
# c-lightning: A specification compliant Lightning Network implementation in C
2015-06-24 08:48:07 +02:00
2020-01-29 03:44:24 +01:00
c-lightning is a lightweight, highly customizable and [standard compliant][std] implementation of the Lightning Network protocol.
2015-06-24 08:48:07 +02:00
2019-08-10 12:04:07 +02:00
* [Getting Started ](#getting-started )
* [Installation ](#installation )
* [Starting lightningd ](#starting-lightningd )
* [Using the JSON-RPC Interface ](#using-the-json-rpc-interface )
* [Care And Feeding Of Your New Lightning Node ](#care-and-feeding-of-your-new-lightning-node )
* [Opening A Channel ](#opening-a-channel )
* [Sending and Receiving Payments ](#sending-and-receiving-payments )
* [Configuration File ](#configuration-file )
* [Further Information ](#further-information )
2020-02-26 16:54:30 +01:00
* [FAQ ](doc/FAQ.md )
2019-08-10 12:04:07 +02:00
* [Pruning ](#pruning )
2019-10-22 12:40:48 +02:00
* [HD wallet encryption ](#hd-wallet-encryption )
2019-08-10 12:04:07 +02:00
* [Developers ](#developers )
2021-01-16 20:04:15 +01:00
* [Documentation ](https://lightning.readthedocs.io/ )
2018-02-03 14:21:08 +01:00
2018-01-29 16:25:43 +01:00
## Project Status
2017-05-09 15:33:42 +02:00
2018-01-29 16:25:43 +01:00
[![Build Status][travis-ci]][travis-ci-link]
[![Pull Requests Welcome][prs]][prs-link]
[![Irc][IRC]][IRC-link]
2019-08-09 08:44:01 +02:00
[![Documentation Status ](https://readthedocs.org/projects/lightning/badge/?version=docs )][docs]
2018-01-29 16:25:43 +01:00
2019-08-09 08:44:01 +02:00
This implementation has been in production use on the Bitcoin mainnet since early 2018, with the launch of the [Blockstream Store][blockstream-store-blog].
2019-08-10 12:04:07 +02:00
We recommend getting started by experimenting on `testnet` (or `regtest` ), but the implementation is considered stable and can be safely used on mainnet.
2018-01-29 16:25:43 +01:00
2019-08-09 08:44:01 +02:00
Any help testing the implementation, reporting bugs, or helping with outstanding issues is very welcome.
Don't hesitate to reach out to us on IRC at [#lightning-dev @ freenode.net][irc1], [#c-lightning @ freenode.net][irc2], or on the implementation-specific mailing list [c-lightning@lists.ozlabs.org][ml1], or on the Lightning Network-wide mailing list [lightning-dev@lists.linuxfoundation.org][ml2].
2017-05-09 15:33:42 +02:00
## Getting Started
2020-07-29 16:24:33 +02:00
c-lightning only works on Linux and Mac OS, and requires a locally (or remotely) running `bitcoind` (version 0.16 or above) that is fully caught up with the network you're running on, and relays transactions (ie with `blocksonly=0` ).
2019-08-09 08:44:01 +02:00
Pruning (`prune=n` option in `bitcoin.conf` ) is partially supported, see [here ](#pruning ) for more details.
2017-05-09 15:33:42 +02:00
### Installation
2019-08-09 08:44:01 +02:00
There are 4 supported installation options:
2017-05-09 15:33:42 +02:00
2020-10-17 07:54:04 +02:00
- Installation from the [Ubuntu PPA][ppa].
- Installation of a pre-compiled binary from the [release page][releases] on Github.
- Using one of the [provided docker images][dockerhub] on the Docker Hub.
2019-08-10 12:04:07 +02:00
- Compiling the source code yourself as described in the [installation documentation ](doc/INSTALL.md ).
2018-06-21 17:42:52 +02:00
2019-08-09 08:44:01 +02:00
For the impatient here's the gist of it for Ubuntu:
2018-06-21 17:42:52 +02:00
2019-08-09 08:44:01 +02:00
```bash
sudo apt-get install -y software-properties-common
sudo add-apt-repository -u ppa:bitcoin/bitcoin
sudo add-apt-repository -u ppa:lightningnetwork/ppa
sudo apt-get install bitcoind lightningd
2018-06-21 17:42:52 +02:00
```
2018-01-29 16:25:43 +01:00
2017-05-09 15:33:42 +02:00
### Starting `lightningd`
2019-08-10 12:04:07 +02:00
If you want to experiment with `lightningd` , there's a script to set
up a `bitcoind` regtest test network of two local lightning nodes,
which provides a convenient `start_ln` helper:
```bash
. contrib/startup_regtest.sh
```
To test with real bitcoin, you will need to have a local `bitcoind` node running:
2017-05-09 15:33:42 +02:00
2019-08-09 08:44:01 +02:00
```bash
2019-09-13 18:20:09 +02:00
bitcoind -daemon
2019-08-09 08:44:01 +02:00
```
2017-05-09 15:33:42 +02:00
2019-08-10 12:04:07 +02:00
Wait until `bitcoind` has synchronized with the network.
2017-08-22 15:55:28 +02:00
2019-08-09 08:44:01 +02:00
Make sure that you do not have `walletbroadcast=0` in your `~/.bitcoin/bitcoin.conf` , or you may run into trouble.
Notice that running `lightningd` against a pruned node may cause some issues if not managed carefully, see [below ](#pruning ) for more information.
2018-01-04 01:59:14 +01:00
2017-08-22 15:55:28 +02:00
You can start `lightningd` with the following command:
2017-05-09 15:33:42 +02:00
2019-08-09 08:44:01 +02:00
```bash
2019-08-10 12:04:07 +02:00
lightningd --network=bitcoin --log-level=debug
2019-08-09 08:44:01 +02:00
```
2019-10-07 23:43:01 +02:00
This creates a `.lightning/` subdirectory in your home directory: see `man -l doc/lightningd.8` (or https://lightning.readthedocs.io/) for more runtime options.
2019-08-10 12:04:07 +02:00
### Using The JSON-RPC Interface
c-lightning exposes a [JSON-RPC 2.0][jsonrpcspec] interface over a Unix Domain socket; the `lightning-cli` tool can be used to access it, or there is a [python client library ](contrib/pylightning ).
You can use `lightning-cli help` to print a table of RPC methods; `lightning-cli help <command>`
will offer specific information on that command.
Useful commands:
2019-08-29 18:05:14 +02:00
* [newaddr ](doc/lightning-newaddr.7.md ): get a bitcoin address to deposit funds into your lightning node.
* [listfunds ](doc/lightning-listfunds.7.md ): see where your funds are.
* [connect ](doc/lightning-connect.7.md ): connect to another lightning node.
* [fundchannel ](doc/lightning-fundchannel.7.md ): create a channel to another connected node.
* [invoice ](doc/lightning-invoice.7.md ): create an invoice to get paid by another node.
* [pay ](doc/lightning-pay.7.md ): pay someone else's invoice.
* [plugin ](doc/lightning-plugin.7.md ): commands to control extensions.
2019-08-10 12:04:07 +02:00
### Care And Feeding Of Your New Lightning Node
2019-08-09 08:44:01 +02:00
2019-08-10 12:04:07 +02:00
Once you've started for the first time, there's a script called
`contrib/bootstrap-node.sh` which will connect you to other nodes on
the lightning network.
2017-05-09 15:33:42 +02:00
2019-08-10 12:04:07 +02:00
There are also numerous plugins available for c-lightning which add
capabilities: in particular there's a collection at:
2019-08-09 08:44:01 +02:00
2019-08-10 12:04:07 +02:00
https://github.com/lightningd/plugins
2019-08-09 08:44:01 +02:00
2019-08-10 12:04:07 +02:00
Including [helpme][helpme-github] which guides you through setting up
your first channels and customizing your node.
2019-08-09 08:44:01 +02:00
2019-10-22 12:40:48 +02:00
For a less reckless experience, you can encrypt the HD wallet seed:
see [HD wallet encryption ](#hd-wallet-encryption ).
2019-08-10 12:04:07 +02:00
You can also chat to other users at [#c-lightning @ freenode.net][irc2];
we are always happy to help you get started!
2018-01-19 11:09:54 +01:00
2019-08-10 12:04:07 +02:00
### Opening A Channel
2017-05-09 15:33:42 +02:00
2018-01-29 16:25:43 +01:00
First you need to transfer some funds to `lightningd` so that it can
open a channel:
2017-05-09 15:33:42 +02:00
2019-08-09 08:44:01 +02:00
```bash
# Returns an address <address>
lightning-cli newaddr
```
2017-05-09 15:33:42 +02:00
2018-01-29 16:25:43 +01:00
`lightningd` will register the funds once the transaction is confirmed.
2017-05-09 15:33:42 +02:00
2019-08-09 08:44:01 +02:00
You may need to generate a p2sh-segwit address if the faucet does not support bech32:
2018-01-13 00:18:43 +01:00
2019-08-09 08:44:01 +02:00
```bash
# Return a p2sh-segwit address
lightning-cli newaddr p2sh-segwit
```
2018-01-29 16:25:43 +01:00
2018-01-13 00:18:43 +01:00
Confirm `lightningd` got funds by:
2017-05-09 15:33:42 +02:00
2019-08-09 08:44:01 +02:00
```bash
# Returns an array of on-chain funds.
lightning-cli listfunds
```
2017-05-09 15:33:42 +02:00
2018-01-29 16:25:43 +01:00
Once `lightningd` has funds, we can connect to a node and open a channel.
Let's assume the **remote** node is accepting connections at `<ip>`
(and optional `<port>` , if not 9735) and has the node ID `<node_id>` :
2017-05-09 15:33:42 +02:00
2019-08-09 08:44:01 +02:00
```bash
lightning-cli connect < node_id > < ip > [< port > ]
lightning-cli fundchannel < node_id > < amount_in_satoshis >
2017-05-09 15:33:42 +02:00
```
2020-10-17 07:54:04 +02:00
This opens a connection and, on top of that connection, then opens a channel.
2019-08-09 08:44:01 +02:00
The funding transaction needs 3 confirmation in order for the channel to be usable, and 6 to be announced for others to use.
You can check the status of the channel using `lightning-cli listpeers` , which after 3 confirmations (1 on testnet) should say that `state` is `CHANNELD_NORMAL` ; after 6 confirmations you can use `lightning-cli listchannels` to verify that the `public` field is now `true` .
2017-05-09 15:33:42 +02:00
2019-08-10 12:04:07 +02:00
### Sending and Receiving Payments
2017-05-09 15:33:42 +02:00
Payments in Lightning are invoice based.
2018-01-29 16:25:43 +01:00
The recipient creates an invoice with the expected `<amount>` in
millisatoshi (or `"any"` for a donation), a unique `<label>` and a
`<description>` the payer will see:
2017-05-09 15:33:42 +02:00
2019-08-09 08:44:01 +02:00
```bash
lightning-cli invoice < amount > < label > < description >
2017-05-09 15:33:42 +02:00
```
2019-08-09 08:44:01 +02:00
This returns some internal details, and a standard invoice string called `bolt11` (named after the [BOLT #11 lightning spec][BOLT11]).
2018-01-29 16:25:43 +01:00
[BOLT11]: https://github.com/lightningnetwork/lightning-rfc/blob/master/11-payment-encoding.md
2017-05-09 15:33:42 +02:00
2019-08-09 08:44:01 +02:00
The sender can feed this `bolt11` string to the `decodepay` command to see what it is, and pay it simply using the `pay` command:
2017-05-09 15:33:42 +02:00
2019-08-09 08:44:01 +02:00
```bash
lightning-cli pay < bolt11 >
2017-05-09 15:33:42 +02:00
```
2018-01-29 16:25:43 +01:00
Note that there are lower-level interfaces (and more options to these
interfaces) for more sophisticated use.
2017-05-09 15:33:42 +02:00
2018-02-03 06:59:27 +01:00
## Configuration File
2018-01-29 16:25:43 +01:00
2019-08-09 08:44:01 +02:00
`lightningd` can be configured either by passing options via the command line, or via a configuration file.
Command line options will always override the values in the configuration file.
2018-02-03 06:59:27 +01:00
2019-11-23 02:46:40 +01:00
To use a configuration file, create a file named `config` within your top-level lightning directory or network subdirectory
(eg. `~/.lightning/config` or `~/.lightning/bitcoin/config` ). See `man -l doc/lightningd-config.5` .
2018-02-03 06:59:27 +01:00
2017-05-09 15:33:42 +02:00
## Further information
2016-03-15 07:38:38 +01:00
2019-08-09 08:44:01 +02:00
### Pruning
2018-11-13 09:13:40 +01:00
2019-08-09 08:44:01 +02:00
c-lightning requires JSON-RPC access to a fully synchronized `bitcoind` in order to synchronize with the Bitcoin network.
Access to ZeroMQ is not required and `bitcoind` does not need to be run with `txindex` like other implementations.
The lightning daemon will poll `bitcoind` for new blocks that it hasn't processed yet, thus synchronizing itself with `bitcoind` .
If `bitcoind` prunes a block that c-lightning has not processed yet, e.g., c-lightning was not running for a prolonged period, then `bitcoind` will not be able to serve the missing blocks, hence c-lightning will not be able to synchronize anymore and will be stuck.
In order to avoid this situation you should be monitoring the gap between c-lightning's blockheight using `lightning-cli getinfo` and `bitcoind` 's blockheight using `bitcoin-cli getblockchaininfo` .
If the two blockheights drift apart it might be necessary to intervene.
2018-11-13 09:13:40 +01:00
2019-10-22 12:40:48 +02:00
### HD wallet encryption
You can encrypt the `hsm_secret` content (which is used to derive the HD wallet's master key) by passing the `--encrypted-hsm` startup argument, or by using the `hsmtool` (which you can find in the `tool/` directory at the root of this repo) with the `encrypt` method. You can unencrypt an encrypted `hsm_secret` using the `hsmtool` with the `decrypt` method.
If you encrypt your `hsm_secret` , you will have to pass the `--encrypted-hsm` startup option to `lightningd` . Once your `hsm_secret` is encrypted, you __will not__ be able to access your funds without your password, so please beware with your password management. Also beware of not feeling too safe with an encrypted `hsm_secret` : unlike for `bitcoind` where the wallet encryption can restrict the usage of some RPC command, `lightningd` always need to access keys from the wallet which is thus __not locked__ (yet), even with an encrypted BIP32 master seed.
2019-08-09 08:44:01 +02:00
### Developers
2017-05-09 15:33:42 +02:00
2019-08-10 12:04:07 +02:00
Developers wishing to contribute should start with the developer guide [here ](doc/HACKING.md ).
You should also configure with `--enable-developer` to get additional checks and options.
2015-07-03 06:33:45 +02:00
2019-08-09 08:44:01 +02:00
[blockstream-store-blog]: https://blockstream.com/2018/01/16/en-lightning-charge/
[std]: https://github.com/lightningnetwork/lightning-rfc
[travis-ci]: https://travis-ci.org/ElementsProject/lightning.svg?branch=master
[travis-ci-link]: https://travis-ci.org/ElementsProject/lightning
[prs]: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat
[prs-link]: http://makeapullrequest.com
[IRC]: https://img.shields.io/badge/chat-on%20freenode-brightgreen.svg
[IRC-link]: https://webchat.freenode.net/?channels=c-lightning
[irc1]: http://webchat.freenode.net/?channels=%23lightning-dev
[irc2]: http://webchat.freenode.net/?channels=%23c-lightning
[ml1]: https://lists.ozlabs.org/listinfo/c-lightning
[ml2]: https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev
[docs]: https://lightning.readthedocs.org
[ppa]: https://launchpad.net/~lightningnetwork/+archive/ubuntu/ppa
[releases]: https://github.com/ElementsProject/lightning/releases
[dockerhub]: https://hub.docker.com/r/elementsproject/lightningd/
[jsonrpcspec]: https://www.jsonrpc.org/specification
2019-08-10 12:04:07 +02:00
[helpme-github]: https://github.com/lightningd/plugins/tree/master/helpme