Самостоятельное хранение: Иллюзия свободы - Часть II

Самостоятельное хранение: Иллюзия свободы - Часть II

Переведено с английского

Представьте себе: вы летите через Атлантику, в салоне отключён интернет, а сосед по креслу просит одолжить ему сотню тысяч сатоши. Вы достаёте телефон, открываете любимый Lightning-кошелёк и видите "ошибка подключения к серверу". Ключи у вас в кармане, сид-фраза записана на листке бумаги, но перевести деньги вы не можете. Вот она, практическая разница между владеть и распоряжаться.

В первой части статьи мы разобрались, как слои доверия могут прятаться даже под слоганом self-custody. Но серверы, обслуживающие кошельки, добавляют к этой матрёшке ещё один набор сюрпризов. И это касается даже Биткоина. Или даже так: в особенности Биткоина. Давайте разберёмся, что именно мешает мгновенно распоряжаться сатошами, даже когда приватный ключ лежит в вашем телефоне.

Lightning Network: ключи у вас, а у вас ли монеты?

Как известно, места в блокчейне Биткоина не очень много. Если все люди на Земле начнут пользоваться Биткоином, то в среднем каждый из них за свою жизнь сможет провести лишь две транзакции: ведь на запись 8 миллиардов транзакций в блоки Биткоина уходит 36 лет! Поэтому в случае массового распространения останется лишь один способ переводить биткоины: через вторые слои.

На сегодняшний день самый известный второй слой Биткоина - это Lightning Network. Я о нём подробнее рассказывал здесь. Почитайте, если ещё не читали.

Вкратце напомню, что Lightning Network - это сеть платёжных каналов. В каждом канале лежат сатоши, и они принадлежат сразу двум людям, между которыми этот канал проложен. Сатоши двигаются по каналу туда-сюда, и после каждого перемещения у обоих владельцев появляется подписанная ими обоими транзакция, позволяющая любому из них вывести свою часть сатошей из канала на свой личный адрес.

Таким образом по задумке создателей Lightning Network достигается постоянный контроль каждого над своими сатошами. Но для этого контроля нужны две составляющих:

  • приватный ключ или сид-фраза - они всегда одни и те же, и их можно записать на бумажку и спрятать,
  • актуальная предварительно подписанная транзакция закрытия канала - а она всё время меняется, её невозможно раз и навсегда спрятать в офлайне.

Лучше всего об этой особенности высказались создатели кошелька Muun:

“Not Your Keys — Not Your Coins” doesn’t mean “Your Keys — Your Coins”

И в случае с Lightning это действительно так. Если у вас есть ключ, но по какой-то причине нет доступа к актуальной транзакции закрытия канала (например, сломался сервер, на котором она хранилась), то вам придётся полагаться на добросовестность второй стороны канала, чтобы вывести свои сатоши.

Где хранится эта транзакция?

Если у вас полноценный узел Молнии, то транзакция хранится на нём. Но многие ли сейчас запускают полноценные узлы?

Я думаю, что большинство пользователей Lightning Network выбирают мобильные кошельки, которые позволяют легко и быстро отправлять и получать сатоши: ведь именно в этом прелесть Lightning Network, не так ли?

Особенно если учесть, что производители таких кошельков в один голос заявляют о self-custody:

Screenshots from Defiant, BitMask, 10101, Bridge wallet

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

Что это означает на практике?

Из тех кошельков, которые упомянуты на скриншотах, наиболее показательная история случилась с кошельком Bitmask. После очередного обновления разработчики случайно убрали из интерфейса все упоминания активов в Lightning Network. И это означало полную потерю доступа пользователей к их средствам в этой сети. Старые версии кошелька перестали работать, а в новой сатоши на Молнии просто не отображаются. Если вы использовали кошелёк только для Lightning Network, то теперь кошелёк будет вам показывать, что у вас вообще ничего нет.

Bitmask without Lightning Network

И наличие сид-фразы ничем не поможет. Если импортировать сид-фразу в какое-нибудь другое приложение, можно увидеть те активы, которые хранятся на основном слое Биткоина (если они есть). Но активы в платёжных каналах Молнии в любом случае будут недоступны.

Ещё более сложно обстоят дела с кошельками, использующими архитектуру Breez SDK / Greenlight. Это кошельки Green, Relai, Blitz и несколько других. У них всё взаимодействие с сетью Lightning Network происходит через сервер Greenlight. С одной стороны, это даёт возможность импортировать сид-фразу из одного такого кошелька в другой и увидеть активы на Молнии. С другой стороны, вы максимально зависите от сервера Greenlight. Если произойдёт технический сбой, и канал закроется, ваши активы останутся на этом сервере, а не у вас.

История обращений в GitHub кошелька Green показывает, что ждать, когда команда разработчиков решит проблему и вернёт вам ваши сатоши, иногда приходится по несколько месяцев. Разве так должно выглядеть некастодиальное хранение?

Withdrawal error in Green wallet
Сообщение об ошибке вывода в кошельке Green. Источник - GitHub Blockstream.

А бывает и прямой обман. Ныне прекративший своё существование кошелёк Mutniy тоже заявлял о self-custody. Разумеется, он давал своим пользователям сид-фразу, которая должна была означать, что у пользователей есть полный контроль над их средствами.

Mutiny wallet claiming to be self-custodial

Но вот однажды разработчики кошелька решили ввести комиссию за приходные операции. Поступила к вам любая сумма - кошелёк удерживает из неё ровно 1 сатоши. Вроде бы комиссия мизерная, и можно было бы с ней согласиться, но у пользователей возник вопрос: а как кошелёк это делает?

  • Ко мне поступил 1 000 000 сатоши.
  • Я не ставил свою подпись под списанием 1 сатоши со своего баланса.
  • По какой же причине у меня на балансе осталось 999 999 сатоши? Кто разрешил, если речь идёт о self-custody?

Разумеется, такой кошелёк не снискал популярности в биткоин-сообществе и в конце концов вынужден был закрыться. А при закрытии прикарманил себе часть средств пользователей. А что: если можешь забрать у пользователя 1 сатоши без его согласия, то почему бы не забрать и больше? Особенно когда проект закрывается, и репутация уже неважна.

Как не обмануть самого себя

Часто мы видим слово self-custody и думаем: вот это то, что нам нужно. Но производители кошельков это отлично понимают и вставляют это слово даже там, где ему не должно быть места.

Поэтому, если видите упоминание self-custody, задайте несколько вопросов:

  • Использует ли кошелёк один конкретный сервер для проведения всех транзакций?
  • Что будет, если этот сервер прекратит работу?
  • Достаточно ли той информации, которую предоставляет кошелёк, чтобы получить доступ к активам через кошелёк другого производителя?

И не только задать вопросы, а ещё и попробовать. Если речь идёт о кошельке для новой сети, в которой у вас пока нет активов, можно воспользоваться обменным сервисом rabbit.io и отправить в свой кошелёк маленькую сумму, которую, если что, не страшно потерять. У нас минимальные суммы для обмена очень низки.

Minimal swap amount on rabbit.io

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

Ну и, наконец, сделайте бэкап, удалите кошелёк со своего устройства, перезагрузите устройство и установите кошелёк снова - проверьте, получится ли восстановить доступ к средствам. Только после этого можно считать проверку пройденной, а кошелёк - готовым к использованию.

Желаю вам не попасться в ловушку, а пользоваться только теми кошельками, которые на самом деле предоставляют полную свободу распоряжения вашими средствами.