
Транзакция Екатерины с двумя выводами: один с депозитом на ее собственный адрес, а другой с депозитом на новый адрес с мультиподписью. Однако для последнего все еще нужна подпись Евгения, чтобы сделать операцию действительной.
Евгений делает то же самое: один адрес его личный, а другой с мультиподписью. Он подписывает его и передает Екатерине.
У нас есть две незавершенные транзакции, которые очень похожи.
Екатерина может добавить подпись к транзакции Евгения, таким образом одобрив ее. Нужно отметить, что эти средства расходуются из мультиподписи по схеме 2 из 2, которая еще не была профинансирована. Это все равно, что пытаться обналичить чек с нулевым балансом. Получается, что эти частично подписанные транзакции можно будет использовать только после запуска мультиподписи.
Новые адреса с мультиподписью (для которых предназначены 3 выходящих BTC) имеют некоторые специфические свойства. Давайте посмотрим на незавершенную транзакцию, которую Екатерина подписала и передала Евгению. Вывод, основанный на мультиподписи, может быть приведен в действие при соблюдении следующих условий:
Обе стороны выполняют совместную подпись.
Евгений делает перевод самостоятельно по истечении определенного периода времени (в соответствии с тайм-локом).
Екатерина может потратить баланс, если узнает секрет Евгения: Bs.
Для транзакции Евгений просит Екатерины реализовать следующее:
* Обе стороны выполняют совместную подпись.
* Екатерина делает перевод самостоятельно по истечении определенного периода времени.
* Евгений может потратить баланс, если узнает секрет Екатерины: As.
Обратите внимание, что ни одна из сторон не знает секрета другой, поэтому условие 3 пока невозможно осуществить. Следует также отметить, что если вы подпишете транзакцию, ваш контрагент может сразу же потратить деньги, поскольку на их вывод не накладываются особые условия. Вы можете дождаться, пока истечет время и потратить средства самостоятельно, или скооперироваться с другой стороной, чтобы потратить их в одно время.
Итак, теперь вы можете публиковать транзакции в исходном адресе с мультиподписью по схеме 2 из 2. Это безопасно: вы сможете вернуть свои средства, если контрагент покинет канал.
После подтверждения транзакций канал будет запущен. Первая пара транзакций показывает текущее состояние мини-реестра. На данном этапе Евгению и Екатерине выплачивается по 3 BTC.
Когда Екатерина захочет осуществить новый перевод Евгению, паре нужно будет создать две новые транзакции, чтобы заменить первый набор. Практика остается такой же: сделки подписаны только наполовину. Однако Екатерина и Евгений должны будут отказаться от своих старых секретов и обменятся новыми хешами для следующего раунда транзакций.
Например, если Екатерина хочет заплатить Евгению 1 BTC. Две новые транзакции зачисляют 2 BTC Екатерине и 4 BTC Евгению. Таким образом, баланс обновится.
Если Екатерина хочет заплатить Евгению 1 BTC, то в двух новых транзакциях Екатерине и Евгению зачисляются 2 и 4 BTC соответственно. Таким образом баланс обновляется.
Каждая из сторон может в любое время подписать и передать другому последние транзакции, чтобы осуществить расчет, т.е. зафиксировать финальную информацию в блокчейне. Тот кто сделает это, должен будет подождать истечение тайм-лока, в то время как другая сторона может потратить средства сразу, в момент их получения. Стоит отметить, что если Евгений подписывает и транслирует транзакцию Екатерине, у нее появляется возможность выхода без каких-либо дополнительных условий.
Обе стороны могут вместе закрыть канал (осуществить кооперативное закрытие) — это самый простой и быстрый способ вернуть средства обратно в сеть. Но если одна из сторон перестает отвечать на запросы или отказывается сотрудничать, другая может вернуть свои средства по истечении тайм-лока.
Вероятно, вы уже распознали возможный вектор атаки. Если сейчас баланс Евгения составляет 1 BTC, что помешает ему выбрать старую транзакцию, где у него больше монет. Он ведь уже получил подпись от Екатерины, и ему нужно лишь добавить свою подпись и отправить транзакцию в блокчейн, так.
продолжение...