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

Глоссарий / Lightning и layer 2

Кооперативное закрытие

Что такое кооперативное закрытие?
Кооперативное закрытие завершает канал Lightning по соглашению сторон: оба участника подписывают одну транзакцию, которая выплачивает каждой стороне ее итоговый баланс, без задержки и без риска штрафа.

Кооперативное закрытие представляет собой короткие переговоры о двух вещах: куда каждая сторона хочет получить выплату и кто платит комиссию майнеру. Современный путь использует три типа сообщений: shutdown с типом 38, затем closing_complete с типом 40 и closing_sig с типом 41 по правилам option_simple_close. Ваш баланс поступает как обычный расходуемый выход сразу после подтверждения закрывающей транзакции, без периода ожидания.

Как это работает

Кооперативное закрытие проходит в два этапа, и первый этап представляет собой обещание остановиться.

Любой из участников начинает, отправляя shutdown, тип 38, с указанием scriptpubkey, на который он хочет получить выплату. После этого отправитель не может добавить ни одного нового HTLC, а другая сторона должна ответить своим shutdown, как только ничего не останется в ожидании. BOLT 2 ограничивает этот скрипт формами, которые сеть будет передавать: вставка данных размером 20 или 32 байт после OP_0 или, после согласования option_shutdown_anysegwit, от OP_1 до OP_16 с последующей вставкой от 2 до 40 байт.

Второй этап начинается, когда на обеих транзакциях обязательств не остается ни одного HTLC. При option_simple_close, биты функций 60 и 61 в BOLT 9, каждый участник строит свою версию закрывающей транзакции, вычитает всю комиссию из собственного баланса и отправляет closing_complete, тип 40. Другая сторона подписывает полученное и возвращает closing_sig, тип 41. Поскольку платит тот, кто предлагает, спору об уровне комиссии негде возникнуть, и BOLT 2 называет это целью дизайна. Повторная отправка closing_complete с более высокой комиссией является способом повысить комиссию закрытия, и BOLT 3 задает этой транзакции sequence входа 0xFFFFFFFD, что в спецификации называется RBF предыдущей попытки.

Устаревший путь, closing_signed с типом 39, по-прежнему остается в спецификации. В нем финансирующая сторона указывает комиссию вместе с fee_range из min_fee_satoshis и max_fee_satoshis, а нефинансирующая сторона выбирает число внутри этого диапазона, что улаживается за два сообщения, если она выбирает то же значение, и за три в противном случае. Без диапазона каждый ответ должен строго лежать между двумя последними предложениями, поэтому стороны сходятся по одному сатоши за раз.

Где это встречается

Кооперативное закрытие представляет собой действие, которое выполняет ваш кошелек, когда вы нажимаете закрыть, а другая сторона отвечает: одна транзакция, и за ней нет ожидающего баланса.

BOLT 2 содержит собственный пошаговый разбор. A и B обмениваются скриптами shutdown, ожидающие HTLC завершаются, затем A предлагает оплатить комиссию в 1000 сатоши, а B независимо предлагает 750. Каждый подписывает версию другого. Позже A меняет свой скрипт выплаты и повторно отправляет с 1100 сатоши, а B повышает комиссию своей попытки до 850.

Именно на малых каналах правила дают о себе знать. Сторона с меньшими средствами может отказаться от своего выхода и должна отказаться от него, если сумма оказалась бы пылью. Если из-за комиссий оба выхода стали бы пылью, закрывающая сторона может отправить скрипт OP_RETURN вместо адреса, и значение ее выхода устанавливается в ноль, так что средства этой стороны уходят на комиссии, а транзакция по-прежнему передается. Спецификация предупреждает, что выход размером менее 546 сатоши, выплачиваемый на скрипт, не являющийся segwit, может вообще не дойти до майнера, и что такой канал приходится закрывать принудительно.

Кооперативное закрытие vs принудительное закрытие

Кооперативное закрытие и принудительное закрытие оба завершают канал ончейн-транзакцией, и разница в том, кто ждет.

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

Кооперативное закрытие требует, чтобы другой узел был активен и готов ответить на shutdown. Именно поэтому существует принудительное закрытие и именно поэтому участник, с которым нет связи, является участником, чью комиссию за закрытие вы не контролируете.

Не путать с

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

Кто платит комиссию майнеру при кооперативном закрытии?

Платит тот, кто предлагает транзакцию. При option_simple_close каждый участник отправляет свой closing_complete и вычитает комиссию из собственного баланса, поэтому BOLT 2 говорит, что такой дизайн устраняет разногласие о комиссии как причину сбоя. На устаревшем пути closing_signed платит финансирующая сторона и указывает диапазон комиссии, из которого выбирает другая сторона.

Можно ли кооперативно закрыть канал, если вторая сторона не в сети?

Нет. Кооперативное закрытие требует, чтобы другой узел ответил на ваше сообщение shutdown и вернул подпись, поэтому при недоступном участнике вам остается только принудительное закрытие. Эту разницу стоит учесть заранее, прежде чем размещать деньги в канале.

Сколько времени пройдет, прежде чем я смогу потратить деньги после кооперативного закрытия?

Сразу после подтверждения закрывающей транзакции. Оба выхода являются обычными платежами на скрипты выплаты, выбранные каждой стороной, без временной блокировки на любом из них. Именно принудительное закрытие означает для вашей стороны задержку в блоках.

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

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

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

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