Поскольку в сети появились транзакции, я начал использовать балансировщик каналов "Balance of Satoshis" от автора Alex Bosworth.
Балансировка нужна для того, чтобы привести каналы к состоянию примерно 50/50, когда входная мощность канала становиться равной выходной. Например, моя нода 1 открыла канал к ноде 2, а нод 3 открыла канал к моей ноде 1, в этом случае возможны транзитные платежи через мою ноду только в одном направлении, от ноды 3 к ноде 2. Если я выполню балансирующий платёж, построив маршрут от ноды 2 к ноде 3, то транзитные платежи через мою ноду 1 будут возможны не только в направлении от ноды 2 к ноде 3, но и в обратном направлении, от ноды 3 к ноде 2. Конечно, максимальный размер разового платежа так же снизится на размер балансирующей транзакции, но изначально предполагается, что размер канала на порядок или два больше, чем средний размер транзакции.
Хочу написать обзор c примерами и свои впечатления от использования.
Устанавливается довольно просто (в одну команду) в соответствии с инструкцией
https://github.com/alexbosworth/balanceofsatoshisНо у меня при установке возникли ошибки, пришлось обновлять nodejs до необходимой версии.
Решение имеет вполне неплохую гуйню (пользовательский интерфейс), несмотря на то, что всё рисуется в командной строке.
Для того, чтобы понять какие каналы следует перебалансировать, есть команда:
bos forwards
...и результат её исполнения:
┌────────────────────────────────┬────────────┬────────────┬────────────┬────────────┬────────────────────────────────────────────────────────────────────┐
│ Alias │ Earned In │ Earned Out │ Inbound │ Outbound │ Public Key │
├────────────────────────────────┼────────────┼────────────┼────────────┼────────────┼────────────────────────────────────────────────────────────────────┤
│ CoinGate │ 0.00000001 │ │ 0.00008211 │ 0.00490984 │ 0242a4ae0c5bef18048fbecf995094b74bfb0f7391418d71ed394784373f41e4f3 │
├────────────────────────────────┼────────────┼────────────┼────────────┼────────────┼────────────────────────────────────────────────────────────────────┤
│ node02.fulmo.org │ 0.00000129 │ │ 0.00018547 │ 0.01000844 │ 02b6dabd436275044399002241195b82b7fed517b226d0a109b1d07a39d7b4a91a │
├────────────────────────────────┼────────────┼────────────┼────────────┼────────────┼────────────────────────────────────────────────────────────────────┤
│ Leapfrog │ 0.00000004 │ │ 0.01193782 │ 0.01305413 │ 02aa6d04033505013665f96f31c097233947e7cc294558f32036a2f9988567c3e1 │
├────────────────────────────────┼────────────┼────────────┼────────────┼────────────┼────────────────────────────────────────────────────────────────────┤
│ lightning-poker.com │ 0.00000003 │ │ 0.00176004 │ 0.00823191 │ 03ad156742a9a9d0e82e0022f264d6857addfd534955d5e97de4a695bf8dd12af0 │
├────────────────────────────────┼────────────┼────────────┼────────────┼────────────┼────────────────────────────────────────────────────────────────────┤
│ ln.nicehash.com [Nicehash] │ 0.00000004 │ │ 0.00038047 │ 0.00461148 │ 037659a0ac8eb3b8d0a720114efc861d3a940382dcfa1403746b4f8f6b2e8810ba │
├────────────────────────────────┼────────────┼────────────┼────────────┼────────────┼────────────────────────────────────────────────────────────────────┤
│ mainnet.lightningconductor.net │ 0.00000005 │ │ 0.00036024 │ 0.00963134 │ 03c436af41160a355fc1ed230a64f6a64bcbd2ae50f12171d1318f9782602be601 │
├────────────────────────────────┼────────────┼────────────┼────────────┼────────────┼────────────────────────────────────────────────────────────────────┤
│ 038e611daccc4f5c5762 │ 0.00000001 │ │ 0.00099261 │ 0.00100011 │ 038e611daccc4f5c576205b732171b0bf445c96b80311da269c2b5a4a5a5daf814 │
├────────────────────────────────┼────────────┼────────────┼────────────┼────────────┼────────────────────────────────────────────────────────────────────┤
│ rkfg │ 0.00000039 │ 0.00000005 │ 0.00148598 │ 0.00838910 │ 021c3ec6432d2b9b5abcb01dd64b3a8f2afe3ba7d8c021f63ffd0a994cd3bc9b88 │
├────────────────────────────────┼────────────┼────────────┼────────────┼────────────┼────────────────────────────────────────────────────────────────────┤
│ BOLLWERK │ 0.00000005 │ │ 0.00286602 │ 0.00212593 │ 028e953ff239e6801d2d95ba093c6b25a4d1236f86303e9cd8919d25b9ef4b733e │
├────────────────────────────────┼────────────┼────────────┼────────────┼────────────┼────────────────────────────────────────────────────────────────────┤
│ southxchange.com │ 0.00000007 │ │ 0.00020894 │ 0.00378301 │ 0260fab633066ed7b1d9b9b8a0fac87e1579d1709e874d28a0d171a1f5c43bb877 │
├────────────────────────────────┼────────────┼────────────┼────────────┼────────────┼────────────────────────────────────────────────────────────────────┤
│ bfx-lnd1 │ │ 0.00000193 │ 0.03514160 │ 0.00483931 │ 03cde60a6323f7122d5178255766e38114b4722ede08f7c9e0c5df9b912cc201d6 │
└────────────────────────────────┴────────────┴────────────┴────────────┴────────────┴────────────────────────────────────────────────────────────────────┘
Избыточная ликвидность подсвечена зелёным цветом, очень удобно.
Из представленного примера видно, что требует балансировки каналы от ноды node02.fulmo.org (in 0.00018547/out
0.01000844) к ноде bfx-lnd1 (in
0.03514160/out 0.00483931).
Сам ребалансировщик запускается командой:
bos rebalance --amount 40000 --in 03cde60a6323f7122d5178255766e38114b4722ede08f7c9e0c5df9b912cc201d6 --out 02b6dabd436275044399002241195b82b7fed517b226d0a109b1d07a39d7b4a91a --max-fee 1 --max-fee-rate 1
При первом запуске рекомендуется установить
--max-fee 1 --max-fee-rate 1
для того, чтобы при нахождении подходящего маршрута перед началом балансировки оценить стоимость транзакции.
После запуска, балансировщик начинает искать подходящие маршруты:
outgoing_peer_to_increase_inbound: node02.fulmo.org 02b6dabd436275044399002241195b82b7fed517b226d0a109b1d07a39d7b4a91a
incoming_peer_to_decrease_inbound: bfx-lnd1 03cde60a6323f7122d5178255766e38114b4722ede08f7c9e0c5df9b912cc201d6
rebalance_target_amount: 0.00500000
circular_rebalance_for: LENINGRAD[LND] 0338f87cb05016c9427de7872192615f9313d622db1a88f6c2594625ffd0b2d270
evaluating:
- 573082x183x1 ★ ★ ★ ☆
- node02.fulmo.org 02b6dabd436275044399002241195b82b7fed517b226d0a109b1d07a39d7b4a91a. Fee rate: 0.00% (0)
- 693879x531x0
- SimpleCoin 03bec0f5799c4ae2d0fa8943f089324bddd6cbbbb6178f7ac2f2588696280e6587. Fee rate: 0.05% (534)
- 694093x2191x7
- okex 0294ac3e099def03c12a37e30fe5364b1223fd60069869142ef96580c8439c2e0a. Fee rate: 0.05% (499)
- 693477x2186x1
- bfx-lnd1 03cde60a6323f7122d5178255766e38114b4722ede08f7c9e0c5df9b912cc201d6. Fee rate: 0.00% (4)
- 695696x533x0
evaluating_amount: 244725
evaluating_amount: 367087
evaluating_amount: 305906
evaluating_amount: 336496
err:
- 400
- RebalanceTotalFeeTooHigh
-
needed_max_fee: 317
Видим, что предлагаемая комиссия (317sat) найденного маршрута "заградительная", поэтому убираем ноды с высокой комиссией из кандидатов на поиск (параметр --avoid), и продолжаем:
bos rebalance --amount 500000 --in 03cde60a6323f7122d5178255766e38114b4722ede08f7c9e0c5df9b912cc201d6 --out 02b6dabd436275044399002241195b82b7fed517b226d0a109b1d07a39d7b4a91a --max-fee 1 --max-fee-rate 1 --avoid 0294ac3e099def03c12a37e30fe5364b1223fd60069869142ef96580c8439c2e0a --avoid 03bec0f5799c4ae2d0fa8943f089324bddd6cbbbb6178f7ac2f2588696280e6587
и получаем следующую картину:
outgoing_peer_to_increase_inbound: node02.fulmo.org 02b6dabd436275044399002241195b82b7fed517b226d0a109b1d07a39d7b4a91a
incoming_peer_to_decrease_inbound: bfx-lnd1 03cde60a6323f7122d5178255766e38114b4722ede08f7c9e0c5df9b912cc201d6
rebalance_target_amount: 0.00500000
circular_rebalance_for: LENINGRAD[LND] 0338f87cb05016c9427de7872192615f9313d622db1a88f6c2594625ffd0b2d270
evaluating:
- 573082x183x1 ★ ★ ☆ ☆
- node02.fulmo.org 02b6dabd436275044399002241195b82b7fed517b226d0a109b1d07a39d7b4a91a. Fee rate: 0.00% (0)
- 691303x319x1
- bfx-lnd0 033d8656219478701227199cbd6f670335c8d408a92ae88b962c49d4dc0e83e025. Fee rate: 0.01% (99)
- 686735x1188x1
- bfx-lnd1 03cde60a6323f7122d5178255766e38114b4722ede08f7c9e0c5df9b912cc201d6. Fee rate: 0.00% (3)
- 695696x533x0
failure: TemporaryChannelFailure at 691303x319x1 from node02.fulmo.org
evaluating:
- 573082x183x1 ★ ★ ★ ★
- node02.fulmo.org 02b6dabd436275044399002241195b82b7fed517b226d0a109b1d07a39d7b4a91a. Fee rate: 0.01% (99)
- 691162x622x1
- mjolnir 02d4b432058ec31e38f6f35d22a487b7db04c4bf70f201f601b66f7b4358242b03. Fee rate: 0.04% (449)
- 672802x1037x1
- bfx-lnd1 03cde60a6323f7122d5178255766e38114b4722ede08f7c9e0c5df9b912cc201d6. Fee rate: 0.00% (4)
- 695696x533x0
evaluating_amount: 241429
evaluating_amount: 362143
evaluating_amount: 422500
evaluating_amount: 452679
err:
- 400
- RebalanceTotalFeeTooHigh
-
needed_max_fee: 250
Здесь комиссия уже лучше - 250sat. При этом, если на маршруте выдаёт ошибку "failure: TemporaryChannelFailure", это означает, что в указанном канале не достаточно исходящей ёмкости.
И так перебираем до тех пор, пока комиссия нас не устроит, выставляем в параметре запроса
--max-fee
и повторяем последний, устроивший нас запрос запрос.
Дополнительно нужно сообщить, что при запуске балансировщика можно не указывать параметры
--in
или
--out
, тогда будет самостоятельно выбран исходящий и входящий канал.
И ещё, в чате с разработчиком (
https://t.me/balanceofsatoshis), я выяснил, что звёздочки(★ ★ ☆ ☆) рядом с маршрутом означают предсказание системы, на сколько маршрут является хорошим.
Есть так же множество дополнительных полезных команд, например:
bos peers
или
bos fees
А мои впечатления такие: отбалансировать каналы за малую комисиию очень не просто. Приходится перелопачивать множество вариантов. Управление нодой становится похожим на игру в тамагочи - требуется регулярное внимание. И это ещё не раскрыта тема управлением комиссиями. Возможно, в будущем, при накоплении опыта можно будет как-то автоматизировать эти процессы.