2017-05-09 15:33:42 +02:00
# c-lightning: A specification compliant Lightning Network implementation in C
2015-06-24 16:18:07 +09:30
2017-05-09 15:33:42 +02:00
c-lightning is a [standard compliant ](https://github.com/lightningnetwork/lightning-rfc ) implementation of the Lightning Network protocol.
2018-01-17 22:22:56 -05:00
The Lightning Network is a scalability solution for Bitcoin, enabling secure and instant transfer of funds between any two parties for any amount.
2015-06-24 16:18:07 +09:30
2017-05-09 15:33:42 +02:00
For more information about the Lightning Network please refer to http://lightning.network.
## Project Status
2018-02-03 14:21:08 +01:00
[](https://travis-ci.org/ElementsProject/lightning)
[](http://makeapullrequest.com)
[](https://webchat.freenode.net/?channels=c-lightning)
2018-01-17 22:22:56 -05:00
This implementation is still very much a work in progress. It can be used for testing, but __it should not be used for real funds __ .
We do our best to identify and fix problems, and implement missing features.
2017-05-09 15:33:42 +02:00
Any help testing the implementation, reporting bugs, or helping with outstanding issues is very welcome.
2018-02-23 15:45:38 +08:00
Don't hesitate to reach out to us on IRC at [#lightning-dev @ freenode.net ](http://webchat.freenode.net/?channels=%23lightning-dev ), [#c-lightning @ freenode.net ](http://webchat.freenode.net/?channels=%23c-lightning ),
or on the implementation-specific mailing list [c-lightning@lists.ozlabs.org ](https://lists.ozlabs.org/listinfo/c-lightning ),
or on the Lightning Network-wide mailing list [lightning-dev@lists.linuxfoundation.org ](https://lists.linuxfoundation.org/mailman/listinfo/lightning-dev ).
2017-05-09 15:33:42 +02:00
## Getting Started
2018-02-09 09:11:51 -05:00
c-lightning currently only works on Linux (and possibly Mac OS with some tweaking), and requires a locally running `bitcoind` (version 0.15 or above) that is fully caught up with the network you're testing on. Pruning (prune=n option in bitcoin.conf) is not currently supported.
2017-05-09 15:33:42 +02:00
### Installation
2017-08-29 14:45:39 +09:30
Please refer to the [installation documentation ](doc/INSTALL.md ) for detailed instructions.
2017-05-09 15:33:42 +02:00
For the impatient here's the gist of it for Ubuntu and Debian:
```
2018-02-12 10:30:25 +10:00
sudo apt-get update
2018-02-04 18:33:04 +01:00
sudo apt-get install -y autoconf automake build-essential git libtool libgmp-dev libsqlite3-dev python python3 net-tools libsodium-dev
2017-05-09 15:33:42 +02:00
git clone https://github.com/ElementsProject/lightning.git
cd lightning
make
```
Or if you like to throw `docker` into the mix:
```
sudo docker run \
-v $HOME/.lightning:/root/.lightning \
-v $HOME/.bitcoin:/root/.bitcoin \
-p 9735:9735 \
2017-11-03 23:46:51 +00:00
cdecker/lightningd:latest
2017-05-09 15:33:42 +02:00
```
### Starting `lightningd`
In order to start `lightningd` you will need to have a local `bitcoind` node running in either testnet or regtest mode:
```
bitcoind -daemon -testnet
```
2017-12-10 13:41:10 +01:00
Wait until `bitcoind` has synchronized with the testnet network. In case you use regtest, make sure you generate at least 432 blocks to activate SegWit.
2017-08-22 15:55:28 +02:00
2018-01-03 16:59:14 -08:00
Make sure that you do not have `walletbroadcast=0` in your
2018-01-26 13:18:23 +01:00
`~/.bitcoin/bitcoin.conf` , or you may run into trouble. Notice that
currently pruned nodes are not supported and may result in
`lightningd` being unable to synchronize with the blockchain.
2018-01-03 16:59:14 -08: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
```
2017-08-22 15:55:28 +02:00
lightningd/lightningd --network=testnet --log-level=debug
2017-05-09 15:33:42 +02:00
```
2018-01-19 11:09:54 +01:00
### Listing all commands:
2018-01-21 00:41:39 +01:00
`cli/lightning-cli help` will print a table of the API and lists the following commands
2018-01-19 11:09:54 +01:00
2017-05-09 15:33:42 +02:00
### Opening a channel on the Bitcoin testnet
First you need to transfer some funds to `lightningd` so that it can open a channel:
```
# Returns an address <address>
2017-12-10 13:41:10 +01:00
cli/lightning-cli newaddr
2017-05-09 15:33:42 +02:00
# Returns a transaction id <txid>
2018-02-19 19:41:00 +01:00
bitcoin-cli -testnet sendtoaddress <address> <amount_in_bitcoins>
2018-01-12 23:18:43 +00:00
```
2017-05-09 15:33:42 +02:00
2018-01-12 23:18:43 +00:00
`lightningd` will register the funds once the transaction is
confirmed.
2017-05-09 15:33:42 +02:00
2018-01-12 23:18:43 +00:00
If you don't have any testcoins you can get a few from a faucet
such as [TPs' testnet faucet ](http://tpfaucet.appspot.com/ ) or
[Kiwi's testnet faucet ](https://testnet.manu.backend.hamburg/faucet ).
You can send it directly to the `lightningd` address.
Confirm `lightningd` got funds by:
2017-05-09 15:33:42 +02:00
2018-01-12 23:18:43 +00:00
```
# Returns an array of on-chain funds.
cli/lightning-cli listfunds
```
2017-05-09 15:33:42 +02:00
2018-01-12 23:18:43 +00: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
```
2017-12-04 19:42:22 +10:30
cli/lightning-cli connect <node_id> <ip> [<port>]
2018-02-19 19:41:00 +01:00
cli/lightning-cli fundchannel <node_id> <amount_in_satoshis>
2017-05-09 15:33:42 +02:00
```
This opens a connection and, on top of that connection, then opens a channel.
2018-01-04 10:21:21 +10:30
The funding transaction needs 1 confirmations in order for the channel to be usable, and 6 to be broadcast for others to use.
2018-02-09 09:12:13 -05:00
You can check the status of the channel using `cli/lightning-cli listpeers` , which after 3 confirmations (1 on testnet) should say that `state` is `CHANNELD_NORMAL` ; after 6 confirmations you can use `cli/lightning-cli listchannels` to verify that the `public` field is now `true` .
2018-01-28 17:04:28 +01:00
### Different states
2018-02-23 16:53:51 +10:30
* `GOSSIPING` means that you are connected to a peer but there is no
payment channel yet.
* `OPENINGD` means that `lightning_openingd` is negotiating channel opening.
* `CHANNELD_AWAITING_LOCKIN` means that `lightning_channeld` is waiting until
the minimum number of confirmation on the channel funding transaction.
* `CHANNELD_NORMAL` means your channel is operating normally.
* `CHANNELD_SHUTTING_DOWN` means one or both sides have asked to shut down the
channel, and we're waiting for existing HTLCs to clear.
* `CLOSINGD_SIGEXCHANGE` means we're trying to negotiate the fee for the mutual close transaction.
* `CLOSINGD_COMPLETE` means we've broadcast our mutual close
transaction (which spends the funding transaction) , but haven't seen it in a block yet.
* `FUNDING_SPEND_SEEN` means we've seen the funding transaction spent.
* `ONCHAIN` means that the `lightning_onchaind` is tracking the onchain closing of the channel.
All these states have more information about what's going on in the
`status` field in `listpeers` .
2017-05-09 15:33:42 +02:00
2018-01-20 13:13:23 +01:00
### Sending and receiving payments
2017-05-09 15:33:42 +02:00
Payments in Lightning are invoice based.
2018-01-13 21:44:36 +10:30
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
```
2017-11-13 10:03:12 +00:00
cli/lightning-cli invoice <amount> <label> <description>
2017-05-09 15:33:42 +02:00
```
2018-01-16 23:58:04 -08:00
This returns some internal details, and a standard invoice string called `bolt11` (named after the [BOLT #11 lightning spec ](https://github.com/lightningnetwork/lightning-rfc/blob/master/11-payment-encoding.md )).
2017-05-09 15:33:42 +02:00
2018-01-13 21:44:36 +10:30
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
```
2018-01-13 21:44:36 +10:30
cli/lightning-cli pay <bolt11>
2017-05-09 15:33:42 +02:00
```
2018-01-13 21:44:36 +10:30
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-02 21:59:27 -08:00
## Configuration File
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.
To use a configuration file, create a file named "config" within your ".lightning" directory. Usually this will be ~/.lightning/config
Configuration options are set using a key=value pair on each line of the file, for example:
```
alias=SLEEPYDRAGON
rgb=008000
port=9735
network=testnet
```
For a full list of possible lightningd configuration options, run:
```
lightningd/lightningd --help
```
2017-05-09 15:33:42 +02:00
## Further information
2016-03-15 17:08:38 +10:30
2016-09-06 16:47:41 +09:30
JSON-RPC interface is documented in the following manual pages:
2017-05-09 15:33:42 +02:00
2016-09-06 16:47:41 +09:30
* [invoice ](doc/lightning-invoice.7.txt )
2018-01-21 19:35:37 +00:00
* [listinvoices ](doc/lightning-listinvoices.7.txt )
2016-09-06 16:47:41 +09:30
* [waitinvoice ](doc/lightning-waitinvoice.7.txt )
2017-12-13 13:39:15 +00:00
* [waitanyinvoice ](doc/lightning-waitanyinvoice.7.txt )
2016-09-06 16:47:41 +09:30
* [delinvoice ](doc/lightning-delinvoice.7.txt )
* [getroute ](doc/lightning-getroute.7.txt )
* [sendpay ](doc/lightning-sendpay.7.txt )
2018-01-21 19:35:37 +00:00
* [pay ](doc/lightning-pay.7.txt )
* [listpayments ](doc/lightning-listpayments.7.txt )
* [decodepay ](doc/lightning-decodepay.7.txt )
2015-07-03 14:03:45 +09:30
2017-08-29 01:34:01 +09:30
For simple access to the JSON-RPC interface you can use the `cli/lightning-cli` tool, or the [python API client ](contrib/pylightning ).