Глоссарий / Lightning и layer 2
Максимальная стоимость HTLC в полете
- Что такое максимальная стоимость HTLC в полете?
- Максимальная стоимость HTLC в полете означает предел, который каждый участник Lightning устанавливает для суммарной стоимости платежей, которые другая сторона может держать в ожидании одновременно.
Предел задается одним полем max_htlc_value_in_flight_msat, которое согласуется при открытии канала и применяется к каждому последующему платежу. Eclair по умолчанию предлагает 5 000 000 000 миллисатоши или 45 % емкости канала, в зависимости от того, что меньше, поэтому канал на 60 mBTC получает 27 mBTC. Ваш крупный платеж Lightning может не пройти по каналу, в котором, как видно, достаточно средств, и часто причина именно в этом.
Как это работает
Максимальная стоимость HTLC в полете обсуждается, а не навязывается: каждая сторона объявляет потолок, который хочет видеть соблюдаемым другой стороной.
Это поле передается в open_channel (тип сообщения 32) и возвращается в accept_channel (тип 33); каналы с двойным финансированием несут его в open_channel2 (64) и accept_channel2 (65). BOLT 2 описывает его как "a cap on total value of outstanding HTLCs offered by the remote node, which allows the local node to limit its exposure to HTLCs". Обратите внимание на направление: число, которое вы отправляете, ограничивает вашего контрагента, а не вас, поэтому в канале действуют два предела, которые не обязаны совпадать.
Применение прямолинейно с обеих сторон. Отправляющий узел не должен добавлять платеж, если суммарная стоимость уже предложенного им вместе с новым платежом превысит предел удаленной стороны, а принимающему узлу, чей контрагент нарушает правило, предписано предупредить и разорвать соединение либо сразу завершить канал с ошибкой. Его родственное поле max_accepted_htlcs считает ожидающие платежи вместо измерения их стоимости, и спецификация жестко ограничивает его значением 483, которое снижается до 114, когда канал использует обязательства с нулевой комиссией. У предела стоимости нет аналогичного потолка: это исключительно политика узла, и единственная гарантия спецификации состоит в том, что принимающая сторона может отказаться от канала, если его значение кажется слишком малым.
Средства в покое это не затрагивает. Канал может держать урегулированный баланс, многократно превышающий предел, потому что ограничение считает только платежи в движении, те, которые пришлось бы распутывать ончейн, если бы канал закрылся неправильно.
Где это видно
Максимальная стоимость HTLC в полете никогда не появляется в публичном графе Lightning, поэтому ни один обозреватель каналов вам ее не покажет.
Она раскрывается одним конкретным способом. BOLT 7 требует, чтобы узел, публикующий channel_update, задал htlc_maximum_msat, наибольший одиночный платеж, который он будет пересылать, не выше значения max_htlc_value_in_flight_msat, полученного от его контрагента. Так приватное число ставит жесткий потолок для публичного: осторожный контрагент заставляет снизить объявленное значение, хотя узел вправе объявить меньше, чем позволяет контрагент.
Значения по умолчанию у разных реализаций различаются настолько, что это имеет значение. Эталонная конфигурация Eclair задает max-htlc-value-in-flight-msat равным 5 000 000 000, а max-htlc-value-in-flight-percent равным 45, применяет меньшее из них и отмечает, что настройка действует для каждого направления отдельно, поэтому вместе оба направления могут достичь удвоенного значения. Eclair также задает max-accepted-htlcs равным 30, тогда как пример конфигурации LND задает default-remote-max-htlcs равным 483, максимуму спецификации. Два оператора с нетронутыми настройками по умолчанию могут расходиться в шестнадцать раз уже по одному счету.
Для покупателя симптомом является платеж, который не проходит без объяснения. Разбиение суммы на части не спасает, когда части идут по одному и тому же каналу, потому что предел их суммирует. ACINQ, публикующая эти значения по умолчанию eclair, также выпускает Phoenix, кошелек для смартфона, обзор которого есть на этом сайте; любой кошелек, открывающий каналы за вас, выбирает эти числа от вашего имени.
Максимальная стоимость HTLC в полете vs емкость канала
Емкость канала представляет собой сумму, заблокированную в финансирующем выходе канала, тогда как максимальная стоимость HTLC в полете определяет, какая часть этой суммы может находиться в процессе платежа в любой момент.
Емкость является публичным фактом, зафиксированным финансирующей транзакцией и объявленным всей сети. Предел в полете является приватным, обменивается только между двумя контрагентами, устанавливается отдельно для каждого направления и выбирается политикой, а не арифметикой. Процентное значение по умолчанию в Eclair делает разрыв наглядным: 45 % применяются к каждому направлению по отдельности, поэтому более половины емкости не может двигаться в одну сторону за раз. Канал, который показывает много свободного места на вашей стороне, все равно может отклонить платеж, и значение, которое его отклонило, вы не можете посмотреть.