1
0
Fork 0
mirror of https://github.com/ACINQ/eclair.git synced 2025-02-24 14:50:46 +01:00
eclair/docs/CircularRebalancing.md
rorp bdef8337e8
Additional parameters for findroute* API calls (#1969)
Add options to ignore specific channels or nodes for
findRoute* APIs, and an option to specify a flat maximum
fee.

With these new parameters, it's now possible to do circular
rebalancing of your channels.

Co-authored-by: Roman Taranchenko <romantaranchenko@Romans-MacBook-Pro.local>
Co-authored-by: t-bast <bastuc@hotmail.fr>
2021-10-22 09:04:29 +02:00

63 lines
2.9 KiB
Markdown

## How to perform circular rebalancing
Circular rebalancing is a popular tool for managing liquidity between channels. This document describes an approach to
rebalancing using Eclair.
In this example we assume that there are 4 participants in the Lighting Network: `Alice`, `Bob`, `Carol`, and `Diana`.
```
1x1x1
Alice --------> Bob
^ |
4x4x4 | | 2x2x2
| v
Diana <------- Carol
3x3x3
```
`Alice` has two channels `1x1x1` with outbound liquidity of 5M stats, and `4x4x4` with inbound liquidity of 5M sats.
Now `Alice` wants to send some sats from channel `1x1x1` to channel `4x4x4` to be able to receive and forward payments
via both channels.
First, `Alice` creates an invoice for the desired amount (eg. 1M sats):
```shell
eclair-cli createinvoice --description='circular rebalancing from 1x1x1 ro 4x4x4' \
--amountMsat=1000000000
```
Eclair cannot send payments to self using `payinvoice` CLI command. Fortunately, `Alice` can use `sendtoroute` CLI
command to do so.
However, in this case `Alice` should provide a valid route from `1x1x1` to `4x4x4`. It's pretty straightforward to
build a route for our example network: `1x1x1` `->` `2x2x2` `->` `3x3x3` `->` `4x4x4`. `Alice` specifies the route using
`--shortChannelIds` parameter as a comma separated list of short channel IDs.
```shell
eclair-cli sendtoroute --shortChannelIds=1x1x1,2x2x2,3x3x3,4x4x4 \
--amountMsat=1000000000 \
--invoice=<serialized invoice>
```
This command will send 1M sats from channel `1x1x1` to channel `4x4x4`.
In real life its not always easy to find the most economically viable route manually, but Eclair is here to help.
Similarly to `payinvoice`, `findroute` CLI command cannot find routes to self. But `Alice` can use a little trick with
`findroutebetweennodes`, which allows finding routes between arbitrary nodes.
To rebalance channels `1x1x1` and `4x4x4`, `Alice` wants to find a route from `Bob` (as a source node) to `Diana` (as a
target node). In our example there's at least one route from `Bob` to `Diana` via `Alice`, and in real life there can be
many more such routes, bacause `Alice` can have way more than two channels, so `Alice`'s node should be excluded from
path-finding using `--ignoreNodeIds` parameter:
```shell
eclair-cli findroutebetweennodes --sourceNodeId=<Bob`s node ID> \
--targetNodeId=<Diana`s node ID> \
--ignoreNodeIds=<Alice`s node ID`> \
--format=shortChannelId
```
Then `Alice` simply appends the outgoing channel ID to the beginning of the found route and the incoming channel ID to
the end: `1x1x1,<found route>,4x4x4`. In our example the found route is `2x2x2,3x3x3`, so the full route will be
`1x1x1,2x2x2,3x3x3,4x4x4`. `Alice` can use this route with `sendtoroute` command to perform rebalancing.