Компания Bitlum, занимающаяся созданием приложений на базе Lightning Network, специально для информационно-новостного портала Coinsider написала цикл статей о работе этой сети. В предыдущей публикации были описаны типы Smart-контрактов, без которых невозможно освоение концепции Lightning Network: htlc, time-lock, 2х2 multisig. Обмена Bitcoin рассмотрим подробнее в статье.
В данной статье (четвертой по счету) будет описано, что собой представляет платежный шлюз, как его можно использовать для оперативного обмена Bitcoin, а также эволюционное развитие Smart-контрактов.
С функционированием платежного шлюза связано 3 процесса:
- Открытие шлюза – его регистрация в Blockchain-системе и формирование исходного состояния.
- Задействование шлюза – использование Smart-контрактов для осуществления транзакции вне Blockchain-системы.
- Закрытие шлюза – занесение в реестр конечного состояния участников и балансов в Blockchain-систему.
Открытие и закрытие шлюза
Для открытия шлюза Марине и Александру необходимо:
- Поместить свои средства в общее хранилище, которое называется multisig. Сделать это можно создав и отправив в сеть фондирующий платеж, именуемый funding transaction.
- Создать транзакцию под названием commitment transaction, отражающую текущее состояние и распределяющую средства из общего хранилища в заданной пропорции.
- Сохранить сформированный платеж на обеих сторонах. Данную транзакцию также не следует отправлять в Bitcoin-сеть на обработку майнерам.
Транзакцию, использующую средства из общего хранилища, назовем платежом-состоянием. С помощью данной транзакции Марина и Александр имеют возможность вернуть свои средства из общего хранилища. Проще говоря, платеж-состояние – это своего рода контракт между двумя участниками системы, который они могут исполнить в любой момент времени, отправив его в Bitcoin-сеть на обработку майнерам.
Отправить платеж-состояние в сеть для раздела средств из общего хранилища равносильно тому, чтобы закрыть шлюза. Если мы поступим таким образом, то просто разделим средства в первоначальной пропорции.
Как было сказано выше, в платеже-состоянии содержатся Smart-контракты для каждого из хранилищ, в которых заложен принцип дальнейшего открытия. В нашем случае хранилище №3 может быть открыто только Мариной, а хранилище №4 – только Александром.
Необходимо отметить, что использование общего хранилища multisig предполагает, что для создания нового платежа-состояния необходимы электронные подписи обоих участников. По этой причине ни Марина, ни Александр не могут сформировать новое состояние без согласия второй стороны.
Процесс создания общего хранилища и начального платежа-состояния длится около 8-10 минут и называется открытием шлюза. Отправка данной транзакции в Bitcoin-сеть для раздела средств в установленной пропорции именуется закрытием шлюза. Этот процесс также длится от 8 до 10 минут. Разберем, как подобная система дает возможность осуществлять платежи без использования Blockchain.
Задействование шлюза
Предположим, что оплата равносильна процессу аннулирования старого платежа-состояния и формированию нового, в котором одной из сторон достанется больше средств из общего хранилища по сравнению с первоначальным состоянием.
Переход от старого состояния к новому длится не более пары секунд, поскольку процесс не нуждается в записи в Blockchain-систему, а ограничивается лишь пропускной способностью интернета участников. Именно благодаря этому достигается высокая скорость в концепции Lightning Network.
Недостаток такого способа заключается в том, что количество передаваемых средств другой стороне не может превышать сумму, заблокированную в общем хранилище. Это ограничение возможно частично снизить за счет ребалансировки шлюза или увеличения хранилища.
После окончания взаимодействиями между участниками, они просто отсылают последний платеж-состояние в Bitcoin-сеть и закрывают шлюз. Таким образом, стороны получают средства обратно, но уже в другой пропорции.
Пример: Предположим, нам нужно продать 15 биткоинов на криптовалютной бирже, но с некоторыми условиями:
- средства не должны храниться на торговой площадке;
- обмен цифровых монет должен осуществиться практически моментально.
Для этого необходимо открыть шлюз с биржей, в который мы поместим 15 биткоинов. Поскольку мы имеем первоначальный платеж-состояние, можно не переживать о своих средствах, так как возврат доступен в любую минуту. Когда наступает время продажи, мы изменяем состояние и назначаем торговой площадке 1,5 биткоина.
Со своей стороны криптовалютная биржа видит, что ей доступно 1,5 биткоина в новом состоянии, поэтому она дает нам право купить нужный ассет. После выполнения необходимого числа операций на торговой площадке мы закрываем шлюз и из общего хранилища отдаем ей помещенные биткоины.
Аннулирование состояния
Проблема заключается в том, что при таком строении платежа-состояния, при оформлении нового состояния участник системы, у которого убавилось количество средств, имеет возможность отправить в Bitcoin-сеть старое состояние, и таким образом отменить свою трату.
Поскольку мы не можем быть уверенны, что другой участник системы удалит старый платеж-состояние при оформлении нового, мы должны позаботиться о том, чтобы отправка старого состояния была убыточной. Это можно реализовать с помощью штрафного механизма: если один из участников отправит в Bitcoin-сеть старое состояние, другой сможет забрать все деньги нарушителя соглашения.
Внесем несколько изменений:
Дадим возможность Марине открывать хранилище Александра с помощью электронной подписи и дополнительного ключа, которым обладает только Александр. Аналогичные права предоставим Александру. Теперь при переходе на новое состояние участники системы должны обменяться ключами, таким образом аннулировав первоначальное состояние.
Сделаем так, чтобы если Александр использует старое состояние, Марина сможет забрать его средства и наоборот. Этого можно добиться только путем хранения разных платежей-состояний на стороне участников системы. Теперь Александр не заинтересован в отправлении старого платежа-состояния, поскольку Марина сможет забрать и свои деньги, и чужие. Это осуществимо благодаря тому, что Александр отдал ключ аннуляции. То же самое верно и для Марины.
Добавим ограничение на время получение средств, чтобы ни один из участников не мог воспользоваться ситуацией, когда другой находится офлайн. Сделать это можно с помощью time-lock механизма. Если Александр захочет воспользоваться отсутствием Марины и отправит старое состояние первым, то у Марины будет временная фора чтобы оштрафовать Александра.
Совместное закрытие шлюза
После внесения изменений возникает новая проблема: если участники системы пожелают закрыть шлюз совместно, никто из них не захочет это сделать первым, ведь он не сможет моментально забрать свои средства из-за активации time-lock механизма.
Решением этой задачи может быть разделение процесса закрытия шлюза на 2 вида: вынужденный и совместный.
На данный момент и Александр, и Марина сберегают разные платежи-состояния, гарантирующие им возврат оговоренных средств, а также содержащие механизмы для аннулирования старого состояния в случае открытия нового.
Сделаем так, чтобы в случае совместного закрытия шлюза обе стороны имели возможность сформировать новое состояние, которое будет отображать те же самые балансы, но не будет иметь механизмов аннулирования. В итоге совместный платеж-состояние будет равносилен исходной версии.
Если же Александр находится офлайн, и у Марины нет возможности провести совместное закрытие шлюза, она все равно может получить свои средства посредством генерирования последнего платежа-состояния, однако деньги придут только по истечению time-lock периода.
Отправка последнего платежа-состояния в Bitcoin-сеть именуется вынужденным закрытием шлюза.