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
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.
2017-12-10 13:41:10 +01:00
The Lightning Network is a scalability solution for Bitcoin, enabling secure and instant transfer of funds between any two party for any amount.
2015-06-24 08:48:07 +02:00
2017-05-09 15:33:42 +02:00
For more information about the Lightning Network please refer to http://lightning.network.
## Project Status
This implementation is still very much work in progress, and, although it can be used for testing, __it should not be used for real funds__ .
We do our best to identify and fix problems, and implement missing feature.
Any help testing the implementation, reporting bugs, or helping with outstanding issues is very welcome.
2017-08-29 07:15:39 +02: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 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
2017-12-04 06:50:39 +01: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.
2017-05-09 15:33:42 +02:00
### Installation
2017-08-29 07:15:39 +02:00
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-01-05 17:11:03 +01:00
sudo apt-get install -y autoconf build-essential git libtool libgmp-dev libsqlite3-dev python3 net-tools
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-04 00:46:51 +01: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-04 01:59:14 +01:00
Make sure that you do not have `walletbroadcast=0` in your
`~/.bitcoin/bitcoin.conf` , or you may run into trouble.
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
```
### 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>
bitcoin-cli -testnet sendtoaddress < address > < amount >
# Retrieves the raw transaction <rawtx>
bitcoin-cli -testnet getrawtransaction < txid >
# Notifies `lightningd` that there are now funds available:
2017-09-09 19:22:01 +02:00
cli/lightning-cli addfunds < rawtx >
2017-05-09 15:33:42 +02:00
```
Eventually `lightningd` will include its own wallet making this transfer easier, but for now this is how it gets its funds.
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 ).
Once `lightningd` has funds, we can connect to a node and open a channel.
2017-12-04 10:12:22 +01:00
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 10:12:22 +01:00
cli/lightning-cli connect < node_id > < ip > [< port > ]
2017-08-28 18:04:01 +02:00
cli/lightning-cli fundchannel < node_id > < amount >
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 00:51:21 +01:00
The funding transaction needs 1 confirmations in order for the channel to be usable, and 6 to be broadcast for others to use.
You can check the status of the channel using `cli/lightning-cli getpeers` , which after 1 confirmation should say that `state` is `CHANNELD_NORMAL` ; after 6 confirmations you can use `cli/lightning-cli getchannels` to verify that the `public` field is now `true` .
2017-05-09 15:33:42 +02:00
### Receiving and receiving payments
Payments in Lightning are invoice based.
2017-11-13 11:03:12 +01:00
The recipient creates an invoice with the expected `<amount>` in millisatoshi, a `<label>` and a `<description>` :
2017-05-09 15:33:42 +02:00
```
2017-11-13 11:03:12 +01:00
cli/lightning-cli invoice < amount > < label > < description >
2017-05-09 15:33:42 +02:00
```
This returns a random value called `rhash` that is part of the invoice.
The recipient needs to communicate its ID `<recipient_id>` , `<rhash>` and the desired `<amount>` to the sender.
2017-08-12 12:08:11 +02:00
The sender needs to compute a route to the recipient, and use that route to actually send the payment.
2017-12-07 23:59:39 +01:00
The route contains the path that the payment will take through the Lightning Network and the respective funds that each node will forward.
2017-05-09 15:33:42 +02:00
```
2017-08-28 18:04:01 +02:00
route=$(cli/lightning-cli getroute < recipient_id > < amount > 1 | jq --raw-output .route -)
2017-11-04 00:46:51 +01:00
cli/lightning-cli sendpay "$route" < rhash >
2017-05-09 15:33:42 +02:00
```
Notice that in the first step we stored the route in a variable and reused it in the second step.
`lightning-cli` should return a preimage that serves as a receipt, confirming that the payment was successful.
This low-level interface is still experimental and will eventually be complemented with a higher level interface that is easier to use.
## Further information
2016-03-15 07:38:38 +01:00
2016-09-06 09:17:41 +02:00
JSON-RPC interface is documented in the following manual pages:
2017-05-09 15:33:42 +02:00
2016-09-06 09:17:41 +02:00
* [invoice ](doc/lightning-invoice.7.txt )
* [listinvoice ](doc/lightning-listinvoice.7.txt )
* [waitinvoice ](doc/lightning-waitinvoice.7.txt )
2017-12-13 14:39:15 +01:00
* [waitanyinvoice ](doc/lightning-waitanyinvoice.7.txt )
2016-09-06 09:17:41 +02:00
* [delinvoice ](doc/lightning-delinvoice.7.txt )
* [getroute ](doc/lightning-getroute.7.txt )
* [sendpay ](doc/lightning-sendpay.7.txt )
2015-07-03 06:33:45 +02:00
2017-08-28 18:04:01 +02:00
For simple access to the JSON-RPC interface you can use the `cli/lightning-cli` tool, or the [python API client ](contrib/pylightning ).