-
Notifications
You must be signed in to change notification settings - Fork 913
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
doc: Start an FAQ #3551
doc: Start an FAQ #3551
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,173 @@ | ||||||
# FAQ | ||||||
|
||||||
## Table of contents | ||||||
- [General questions](#general-questions) | ||||||
- [Loss of {funds / data}](#loss) | ||||||
|
||||||
|
||||||
## General questions | ||||||
|
||||||
### I don't know where to start, help me ! | ||||||
|
||||||
There is a C-lightning plugin specifically for this purpose, it's called | ||||||
[`helpme`](https://github.com/lightningd/plugins/tree/master/helpme). | ||||||
|
||||||
Assuming you have followed the [installation steps](INSTALL.md), have `lightningd` | ||||||
up and running, and `lightning-cli` in your `$PATH` you can start the plugin like so: | ||||||
|
||||||
``` | ||||||
# Clone the plugins repository | ||||||
git clone https://github.com/lightningd/plugins | ||||||
# Make sure the helpme plugin is executable (git should have already handled this) | ||||||
chmod +x plugins/helpme/helpme.py | ||||||
# Install its dependencies (there is only one actually) | ||||||
pip3 install --user -r plugins/helpme/requirements.txt | ||||||
# Then just start it :) | ||||||
lightning-cli plugin start $PWD/plugins/helpme/helpme.py | ||||||
``` | ||||||
|
||||||
The plugin registers a new command `helpme` which will guide you through the main | ||||||
components of C-lightning: | ||||||
|
||||||
``` | ||||||
lightning-cli helpme | ||||||
``` | ||||||
|
||||||
### How to get the balance of each channel ? | ||||||
|
||||||
You can use the `listfunds` command and take a ratio of `our_amount_msat` over | ||||||
`amount_msat`. Note that this doesn't account for the [channel reserve](https://github.com/lightningnetwork/lightning-rfc/blob/master/02-peer-protocol.md#rationale). | ||||||
|
||||||
A better option is to use the [`summary` plugin](https://github.com/lightningd/plugins/tree/master/summary) | ||||||
which nicely displays channel balances, along with other useful channel informations. | ||||||
|
||||||
### My channel which only tries the passed in route is in state `STATE`, what does that mean ? | ||||||
|
||||||
See the [listpeers command manpage](https://lightning.readthedocs.io/lightning-listpeers.7.html#return-value). | ||||||
|
||||||
### My payment is failing / all my payments are failing, why ? | ||||||
|
||||||
There are many reasons for a payment failure. The most common one is a | ||||||
[failure](https://github.com/lightningnetwork/lightning-rfc/blob/master/04-onion-routing.md#failure-messages) | ||||||
along the route from you to the payee. | ||||||
The best (and most common) solution to a route failure problem is to open more channels, | ||||||
which should increase the available routes to the recipient and lower the probability of a failure. | ||||||
|
||||||
Hint: use the [`pay`](lightning-pay.7.md) command which is will iterate through trying all possible routes, | ||||||
instead of the low-level `sendpay` command which only tries the passed in route. | ||||||
|
||||||
### How can I receive payments ? | ||||||
|
||||||
In order to receive payments you need inbound liquidity. You get inbound liquidity when | ||||||
another node opens a channel to you or by successfully completing a payment out through a channel you opened. | ||||||
|
||||||
If you need a lot of inbound liquidity, you can use a service that trustlessly swaps on-chain Bitcoin | ||||||
for Lightning channel capacity. | ||||||
There are a few online service providers that will create channels to you. | ||||||
A few of them charge fees for this service. | ||||||
Note that if you already have a channel open to them, you'll need to close it before requesting another channel. | ||||||
|
||||||
### Are there any issues if my node changes its IP address? What happens to the channels if it does? | ||||||
|
||||||
There is no risk to your channels if your IP address changes. | ||||||
However, be sure to change your announced address (or [setup a TOR hidden service](TOR.md)) | ||||||
in your config so that others can establish connections at your new address ! | ||||||
|
||||||
### Can I have two hosts with the same public key and different IP addresses, both online and operating at the same time? | ||||||
|
||||||
No. | ||||||
darosior marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||
|
||||||
### Are there any issues if my node changes its IP address? What happens to the channels if it does? | ||||||
|
||||||
There is no risk to your channels if your IP address changes. | ||||||
However, be sure to change your announced address (or [setup a TOR hidden service](TOR.md)) | ||||||
in your config so that others can establish connections at your new address ! | ||||||
|
||||||
### Can I have two hosts with the same public key and different IP addresses, both online and operating at the same time? | ||||||
|
||||||
No. | ||||||
|
||||||
### Can I use a single `bitcoind` for multiple `lightningd` ? | ||||||
|
||||||
Yes. All `bitcoind` calls are handled by the bundled `bcli` plugin. `lightningd` does not use | ||||||
`bitcoind`'s wallet. While on the topic, `lightningd` does not require the `-txindex` option on `bitcoind`. | ||||||
|
||||||
If you use a single `bitcoind` for multiple `lightningd`'s, be sure to raise the `bitcoind` | ||||||
max RPC thread limit (`-rpcthreads`), each `lightningd` can use up to 4 threads, which is | ||||||
the default `bitcoind` max. | ||||||
|
||||||
### Can I use C-lightning on mobile ? | ||||||
|
||||||
#### Remote control | ||||||
|
||||||
[Spark-wallet](https://github.com/shesek/spark-wallet/) is the most popular remote control | ||||||
HTTP server for `lightningd`. | ||||||
**Use it [behind tor](https://github.com/shesek/spark-wallet/blob/master/doc/onion.md)**. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. why? what does this give you if you use it behind tor? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Your node IP is likely public and your node likely easily bindable to your identity : a 0-day against spark would likely be tried on all nodes running C-lightning (or persons known to be running spark). In addition to that I've read somewhere that self-signed certs were no longer supported for new versions, or something like that. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I forget not everyone proxies their node through a decoy :P imo this rationale for "why tor" is worth adding to the FAQ. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. :)
Just checked the link and it points to a list of the benefit, maybe the link is enough ? |
||||||
|
||||||
#### `lightningd` on Android | ||||||
|
||||||
Effort has been made to get `lightningd` running on Android, | ||||||
[see issue #3484](https://github.com/ElementsProject/lightning/issues/3484). Currently unusable. | ||||||
|
||||||
### How to "backup my wallet" ? | ||||||
|
||||||
As a Bitcoin user, one may be familiar with a file or a seed (or some mnemonics) from which | ||||||
it can recover all its funds. | ||||||
|
||||||
C-lightning has an internal bitcoin wallet, which you can use to make "on-chain" | ||||||
transactions, (see [withdraw](https://lightning.readthedocs.io/lightning-withdraw.7.html). | ||||||
These on-chain funds are backed up via the HD wallet seed, stored in byte-form in `hsm_secret`. | ||||||
|
||||||
and which you can backup thanks to a seed stored in the `hsm_secret`. | ||||||
`lightningd` also stores information for funds locked in Lightning Network channels, which are stored | ||||||
in a database. This database is required for on-going channel updates as well as channel closure. | ||||||
There is no single-seed backup for funds locked in channels. | ||||||
|
||||||
While crucial for node operation, snapshot-style backups of the `lightningd` database is **discouraged**, | ||||||
as _any_ loss of state may result in permanent loss of funds. | ||||||
See the [penalty mechanism](https://github.com/lightningnetwork/lightning-rfc/blob/master/05-onchain.md#revoked-transaction-close-handling) | ||||||
for more information on why any amount of state-loss results in fund loss. | ||||||
|
||||||
Real-time database replication is the recommended approach to backing up node data. | ||||||
Tools for replication are currently in active development, using the `db_write` | ||||||
[plugin hook](https://lightning.readthedocs.io/PLUGINS.html#db-write). | ||||||
|
||||||
|
||||||
## Loss | ||||||
|
||||||
### Rescanning the block chain for lost utxos | ||||||
|
||||||
There are 3 types of 'rescans' you can make: | ||||||
- `rescanblockchain`: A `bitcoind` RPC call which rescans the blockchain | ||||||
starting at the given height. This does not have an effect on c-lightning | ||||||
as `lightningd` tracks all block and wallet data independently. | ||||||
- `--rescan=depth`: A `lightningd` configuration flag. This flag is read at node startup | ||||||
and tells lightningd at what depth from current blockheight to rebuild its internal state. | ||||||
(You can specify an exact block to start scanning from, instead of depth from current height, | ||||||
by using a negative number.) | ||||||
- `dev-rescan-outputs`: A `lightningd` RPC call. Only available if your node has been | ||||||
configured and built in DEVELOPER mode (i.e. `./configure --enable-developer`) This | ||||||
will sync the state for known UTXOs in the `lightningd` wallet with `bitcoind`. | ||||||
As it only operates on outputs already seen on chain by the `lightningd` internal | ||||||
wallet, this will not find missing wallet funds. | ||||||
|
||||||
|
||||||
### Database corruption / channel state lost | ||||||
|
||||||
If you lose data (likely corrupted `lightningd.sqlite3`) about a channel __with `option_static_remotekey` enabled__, | ||||||
you can wait for your peer to unilateraly close the channel, then use `tools/hsmtool` with the | ||||||
`guesstoremote` command to attempt to recover your funds from the peer's published unilateral close transaction. | ||||||
|
||||||
If `option_static_remotekey` was not enabled, you're probably out of luck. The keys for your funds in your peer's | ||||||
unilateral close transaction are derived from information you lost. Fortunately, since version `0.7.3` channels | ||||||
are created with `option_static_remotekey` by default if your peer supports it. | ||||||
Which is to say that channels created after block [598000](https://blockstream.info/block/0000000000000000000dd93b8fb5c622b9c903bf6f921ef48e266f0ead7faedb) | ||||||
(short channel id starting with > 598000) have a high chance of supporting `option_static_remotekey`. | ||||||
|
||||||
You can verify it using the `features` field from the [`listpeers` command](https://lightning.readthedocs.io/lightning-listpeers.7.html)'s result. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
We need to give instructions on how to derive a feature flag from the feature's field here. Didn't you have a nifty python script to do this @darosior ? We should include that here. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hmm no I usually just pop up a Python interpreter, but I've thought of adding decoded feature names to There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. (Otherwise I can copy/paste the Python one-liner) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think copy/pasting the Python one-liner is the most benefit. It gives readers a quick way to check + it 'educates' the curious as to how feature bits work. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I added this as an example with a >>> bool(0x02aaa2 & ((1 << 12) | (1 << 13)))
True |
||||||
|
||||||
Here is an example in Python checking if [one of the `option_static_remotekey` bits](https://github.com/lightningnetwork/lightning-rfc/blob/master/09-features.md) is set in the negotiated features corresponding to `0x02aaa2`: | ||||||
```python | ||||||
>>> bool(0x02aaa2 & ((1 << 12) | (1 << 13))) | ||||||
True | ||||||
``` |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,6 +7,7 @@ c-lightning Documentation | |
|
||
INSTALL.md | ||
TOR.md | ||
FAQ <FAQ.md> | ||
|
||
.. toctree:: | ||
:maxdepth: 2 | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For example, you can use a service that exchanges Lightning Bitcoins for onchain Bitcoins (so that you do not lose your Bitcoins, or be forced to exchange it for other assets) in order to get incoming liquidity. There also exist services that will, for a fee or for free, create channels to you.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yep i know about them but i was not sure about promoting them in our faq
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No need to name names (specific ones may not be around forever anyway, so ---), at least it gives a hint to the user to search for such services by themselves.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, you are right.