Глоссарий / Lightning и layer 2
HTLC с пылью
- Что такое HTLC с пылью?
- HTLC с пылью представляет собой платеж Lightning, слишком малый, чтобы получить собственный выход в транзакции обязательства, поэтому при принудительном закрытии он достается майнерам, а не одной из сторон канала.
Каналы Lightning отказываются создавать выход для любого платежа в пути, стоимость которого меньше предела пыли плюс комиссия за его спасение, и эта сумма становится комиссией для майнеров. При пределе пыли 546 сатоши и ставке 5000 за киловес все, что меньше 3861 сатоши, отсекается. Деньги теряются только в том случае, если канал принудительно закрывается, пока этот платеж еще в движении.
Как это работает
HTLC с пылью определяется арифметикой, а не суждением: предел пыли, который выбрал владелец канала, плюс то, во что обошлось бы востребование платежа ончейн.
BOLT 3 называет отброшенный выход отсеченным (trimmed). Для платежа, который вы предлагаете, канал проверяет сумму минус комиссия транзакции HTLC-timeout; для платежа, который вы получаете, сумму минус комиссия транзакции HTLC-success. Эти две транзакции весят 663 и 703 единицы веса в канале без якорных выходов, поэтому при feerate_per_kw, равной 5000, они стоят 3315 и 3515 сатоши. При пределе пыли 546 сатоши порог для предлагаемых платежей составляет 3861 сатоши, а для получаемых 4061.
Разобранный пример в BOLT 3 показывает потерю. При такой ставке в пути находятся четыре платежа: предлагаемые HTLC на 5000 и 1000 сатоши и получаемые HTLC на 7000 и 800. Платежи на 5000 и 7000 каждый получают выход. Платежи на 1000 и 800 отсекаются, и комиссия транзакции обязательства растет с базовых 5340 сатоши до 7140. Эти дополнительные 1800 сатоши представляют собой ровно два исчезнувших платежа, выплаченные тому, кто намайнит закрытие.
Каждая сторона выбирает собственное значение dust_limit_satoshis, поэтому две транзакции обязательства одного канала могут расходиться в том, какие платежи считаются пылью. BOLT 2 заставляет узел завершить канал с ошибкой, если его пир предлагает значение ниже 354 сатоши, и позволяет ему отклонить значение, которое он считает слишком большим, поскольку пир с высоким пределом может опубликовать обязательство, набитое отсеченными платежами.
Якорные каналы изменили арифметику. При option_anchors или zero_fee_commitments транзакции HTLC второй стадии не несут комиссии, поэтому они перестают участвовать в расчете, и порог падает до чистого предела пыли. BOLT 3 предписывает узлам в таком случае намеренно повышать dust_limit_satoshis, поскольку выход, который проходит предел, но не может быть снят при реальных ставках, только засоряет набор UTXO.
BOLT 2 также ограничивает общую сумму, а не каждый платеж. Сверх значения max_dust_htlc_exposure_msat узла, которое само является вопросом политики, узел должен отклонить входящий HTLC после того, как тот зафиксирован в обязательстве, и не должен раскрывать прообраз, превращая возможную потерю в чистое отклонение.
Где это встречается
HTLC с пылью проявляются в модели хранения кошелька, а не в его интерфейсе, и 41 обзор кошельков на этом сайте четко разделяется по этому признаку.
Phoenix запускает настоящий некастодиальный узел Lightning на вашем смартфоне, поэтому каналы принадлежат вам, и этот риск тоже; ACINQ берет 0,4 % плюс 4 сатоши за отправку, и каждая такая отправка представляет собой HTLC, до которого может добраться отсечение. Сторона Lightning в BlueWallet представляет собой счет на сервере LNDHub, поэтому каналы держит оператор: вы никогда не несете отсеченный платеж, а несете вместо этого того оператора.
Отсечение снова проявляется при закрытии. BOLT 2 допускает переговоры о закрытии только тогда, когда ни в одной из двух транзакций обязательства не осталось HTLC, включая HTLC с пылью, поэтому платеж на 300 сатоши, которого не видит ни один ончейн-наблюдатель, все еще не дает завершить совместное закрытие.
HTLC с пылью vs лимит пыли
Лимит пыли является числом, которое выбирает узел; HTLC с пылью представляет собой платеж, проигравший сравнение с этим числом плюс комиссия.
Предел является параметром канала, задается в open_channel и accept_channel и не передается ни одним последующим сообщением. Отсечение представляет собой результат, который меняется: без якорных выходов порог следует за feerate_per_kw, поэтому один и тот же платеж на 2500 сатоши является реальным выходом при спокойном мемпуле и отсекается при загруженном.
Кроме того, эти два понятия действуют на разных этапах. Пороги Bitcoin Core, 546 сатоши для устаревшего выхода (legacy) и 330 для pay-to-witness-script-hash, относятся к политике ретрансляции транзакций, которые существуют. Отсеченный HTLC никогда не доходит до этой проверки, потому что его выход никогда не записывается.