Как платить через Lightning Network: каналы, ликвидность и комиссии
Пошагово про Lightning Network: как открыть канал, принять платёж без входящей ликвидности, посчитать комиссию и не потерять деньги.
Пошагово про Lightning Network: как открыть канал, принять платёж без входящей ликвидности, посчитать комиссию и не потерять деньги.
В тот вечер я переводила знакомому 150 000 сатоши за ремонт ноутбука. Ончейн-комиссия вышла 4 200 сатоши, а подтверждение пришло через 18 минут. Через неделю тот же платёж я провела по Lightning: две секунды, 151 сатоши комиссии. Разница не в «скорости технологии», а в том, что в одном случае мы писали в блокчейн, а в другом — перекладывали баланс внутри канала. Ниже — как это устроено на практике и где люди теряют деньги.
Сначала ответьте себе на один вопрос: вы собираетесь платить, принимать или и то и другое. От этого зависит тип кошелька.
Платить проще всего. Подойдёт любой некастодиальный кошелёк с автоматическими каналами — Phoenix, Breez, Alby. Вы ставите приложение, записываете seed-фразу на бумагу, пополняете ончейн-баланс, и кошелёк сам открывает канал при первой трате. Никаких настроек, но за входящую ликвидность такая схема берёт свою плату — обычно 0,5–1% от суммы первого пополнения.
Принимать платежи сложнее: нужен входящий баланс в канале, то есть деньги должны лежать не у вас, а на удалённой стороне. Об этом отдельный раздел ниже.
Полный контроль даёт свой узел: LND, Core Lightning или Alby Hub на домашнем сервере. Там вы сами решаете, с кем открывать каналы и какую комиссию брать за маршрутизацию. Для первых шагов это перебор — начните с 50 000–100 000 сатоши в обычном кошельке и посмотрите, как механика ведёт себя на практике.
Канал — это мультисиг-адрес на два участника, открытый одной ончейн-транзакцией. Внутри него лежит ёмкость: скажем, 1 000 000 сатоши. Часть этой суммы — ваш локальный баланс, часть — удалённый. Платежи внутри канала не попадают в блокчейн: вы просто перераспределяете баланс и подписываете новое состояние.
Отсюда главное ограничение: отправить можно только то, что лежит на вашей стороне. Если в канале 1 000 000 сатоши, а локальный баланс 300 000, больше 300 000 вы не отправите, даже если ёмкость позволяет. И ещё нюанс: примерно 1% ёмкости биржа-протокол держит в резерве, поэтому реально доступно чуть меньше.
lnbc. Внутри зашиты сумма, хеш платежа и срок действия. По умолчанию инвойс живёт час, потом становится недействительным.Самая частая жалоба: «канал открыл, а принять оплату не могу». Причина в том, что открытый вами канал даёт исходящую ликвидность. Чтобы принимать, нужен баланс на противоположной стороне канала — его кто-то должен вам предоставить.
Рабочих вариантов четыре.
Маршрутизация стоит из двух частей: базовая ставка (обычно 1 сатоши, иногда 0) плюс процент, который задаётся в ppm — миллионных долях. 100 ppm — это 0,01%.
Считаем платёж на 150 000 сатоши по маршруту из двух узлов со ставкой 100 ppm и базой 1 сатоши на каждом: 150 000 × 0,0001 = 15 сатоши на узел, итого 30 плюс 2 базовых — 32 сатоши. Это 0,021% от суммы. В моём примере в начале статьи маршрут был дороже, около 0,1%, потому что узлы на пути держали более высокую ставку.
Отдельно стоит открытие канала — это обычная ончейн-транзакция. При ставке 15 сатоши за виртуальный байт и размере 141 vB выходит 2 115 сатоши. Закрытие по договорённости стоит примерно столько же, а принудительное (force close) дороже и добавляет задержку около 144 блоков, то есть примерно сутки, пока деньги не станут доступны.
Отсюда простое правило: для сумм до 10 000 сатоши Lightning дешевле всегда, для 1 000 000 сатоши счёт уже сопоставим (0,1% — это 1 000 сатоши против фиксированных 2 115 ончейн), а для 10 000 000 сатоши один ончейн-перевод обойдётся дешевле маршрута.
Ошибка «no route» значит, что кошелёк не нашёл путь с достаточной ликвидностью. Лечится не повтором, а сменой маршрута: подождать пару минут, уменьшить сумму или разбить платёж на части (MPP поддерживают почти все современные кошельки).
«Insufficient local balance» — на вашей стороне канала не хватает средств. Пополнить канал можно только ончейн-транзакцией, мгновенного способа нет.
Просроченный инвойс — самая обидная ошибка, потому что деньги уже списаны не были, а получатель ждёт. Проверяйте срок до оплаты, а не после.
Если статус платежа «в пути», не отправляйте его повторно по новому инвойсу: сначала дождитесь финального статуса. Атомарность защищает от двойного списания внутри одного платежа, но два разных платежа — это два разных перевода.
Одной seed-фразы для Lightning мало. Каналы хранят состояние вне блокчейна, и при восстановлении из seed без резервной копии каналов вы рискуете потерять деньги: пир может предъявить старое состояние, и оно будет считаться действительным. Поэтому некастодиальные кошельки делают static channel backup — файл, который нужно хранить отдельно от устройства.
Проверьте в своём кошельке три вещи: включён ли автоматический бэкап каналов, куда он сохраняется и как выглядит процедура восстановления. Если ответа нет — это повод сменить кошелёк до того, как на балансе появится заметная сумма.
И не держите крупные суммы в кастодиальном кошельке вроде Wallet of Satoshi: там ключи не у вас, а «мгновенно и без комиссий» — не то же самое, что «безопасно». Для ежедневных трат такой кошелёк удобен, для сбережений — нет.