Глоссарий / Lightning и layer 2
HTLC
Другие названия: Контракт с хешем и блокировкой по времени.
- Что такое HTLC?
- HTLC представляет собой платеж, который выплачивается только в обмен на секрет и возвращает средства отправителю, если этот секрет так и не появится до высоты блока, согласованной обеими сторонами.
Контракты с хешем и блокировкой по времени обеспечивают безопасную передачу многоскачкового платежа Lightning. Каждый скачок блокирует свои деньги на одном и том же хеше SHA-256, а канал может одновременно нести не более 483 таких контракта в каждом направлении. Для вас это означает, что платеж Lightning либо рассчитывается полностью, либо полностью не проходит и никогда не оставляет деньги застрявшими на полпути.
Как это работает
Деньги в HTLC защищены двумя условиями, и в итоге сбудется ровно одно из них.
Получатель придумывает случайный секрет размером 32 байта, называемый прообразом (preimage), вычисляет его хеш с помощью SHA-256 и помещает результат в счет. Затем каждый узел на маршруте предлагает следующему узлу выход, который можно потратить двумя способами: сразу любым, кто сможет показать прообраз, или после согласованной высоты блока узлом, который его предложил. Поскольку все скачки используют один хеш, в момент, когда получатель забирает свои деньги, раскрывая прообраз, каждый предыдущий скачок узнает его и забирает свое. Никто никогда не остается в положении, когда он заплатил вперед, не получив возмещения, и именно на этом свойстве построена Lightning.
Высоты блоков уменьшаются по маршруту. Каждый канал объявляет значение cltv_expiry_delta, и плательщик суммирует эти дельты так, чтобы скачок, ближайший к получателю, истекал первым, а у каждого скачка выше по цепочке оставался запас безопасности. BOLT 11 предписывает плательщику предусматривать не менее 18 блоков для последнего скачка, если в счете не указано иное. Эта накопленная задержка является реальной ценой HTLC: если платеж застрял, деньги не теряются, но могут быть заморожены на часы, пока не истекут все тайм-ауты.
В ончейне эти контракты превращаются в реальные транзакции. В якорном канале транзакция HTLC-timeout весит 666 единиц веса, а транзакция HTLC-success весит 706, и принудительное закрытие канала с несколькими платежами в пути означает трансляцию одной такой транзакции на каждый из них. Суммы, слишком малые, чтобы заслуживать отдельного выхода, его не получают; вместо этого они добавляются к комиссии за майнинг, поэтому крошечный платеж может исчезнуть в комиссиях, если канал закрывается в неподходящий момент.
Где это видно
HTLC видны в те секунды между нажатием кнопки оплаты и тем, как счет становится зеленым, и снова видны в расчете комиссий при ончейн-обмене.
Сервисы, ориентированные в первую очередь на Lightning, такие как Strike, переводят деньги так при каждом платеже, а маршрутизирующие узлы Lightning показывают число ожидающих HTLC как операционную метрику, потому что канал, забитый застрявшими контрактами, не может ничего переслать. Эта же конструкция работает и вне Lightning: подводный обмен обменивает ончейн-HTLC на платеж Lightning, заблокированный на том же хеше, а кросс-чейн атомарный обмен делает то же самое между двумя реестрами. В каждом случае хеш является общим арбитром, а тайм-аут служит возвратом.
Ограничение важнее, чем кажется. Транзакция обязательства должна оставаться действительной транзакцией биткоина, поэтому BOLT 2 запрещает более 483 принятых контракта на направление, а для более нового формата обязательства без комиссии это число снижается до 114. Крупные маршрутизирующие каналы упираются в этот потолок в периоды высокой нагрузки, и это одна из честных причин, по которой платеж иногда не проходит, а тридцать секунд спустя проходит.
HTLC vs PTLC
HTLC использует один хеш для всего маршрута, тогда как PTLC дает каждому скачку отдельную блокировку, производную от точки на эллиптической кривой. Это единственное различие создает проблему конфиденциальности: два маршрутизирующих узла, принадлежащих одному оператору и находящихся в разных точках вашего маршрута, могут увидеть один и тот же хеш дважды и связать ваш платеж. Сеть фактически работает на HTLC. PTLC являются предусмотренной спецификацией заменой, и пока они не внедрены, исходите из того, что любой крупный оператор маршрутизации может сопоставить пересылаемые им скачки.