Перейти к содержимому
buybitcoinsmart

Глоссарий / 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 никогда не доходит до этой проверки, потому что его выход никогда не записывается.

Не путать с

Часто задаваемые вопросы

Может ли HTLC с пылью действительно привести к потере денег?

Да, но только отсеченной суммы и только в том случае, если канал принудительно закрывается, пока этот платеж еще в пути. Платеж, который исполняется или не проходит обычным образом, не затрагивается, потому что отсечение определяет лишь то, как выглядела бы транзакция обязательства, если бы кто-то ее опубликовал.

Почему мой узел Lightning отклонил крошечный платеж?

Одна из причин состоит в потолке максимальной подверженности HTLC с пылью. BOLT 2 предписывает узлу отклонить такой HTLC после того, как тот зафиксирован в обязательстве, и не раскрывать прообраз, когда его принятие вывело бы общий отсеченный баланс канала за предел, установленный оператором.

Устраняют ли якорные каналы HTLC с пылью?

Нет. Якорные каналы исключают из расчета комиссию HTLC второй стадии, поэтому порог возвращается к обычному пределу пыли, и именно поэтому BOLT 3 говорит, что имеет смысл поднять dust_limit_satoshis, чтобы покрыть эту стоимость второй стадии, и поэтому узел должен разрешать своему пиру лимит выше значений самого Bitcoin Core, которые составляют от 240 до 546 сатоши.

Читайте далее

Связанные термины

Еще в разделе «Lightning и layer 2»

Читать эту страницу на английском