Ребята, я лох. Ну или был им до недавнего времени.
Если вы давно читаете этот блог, то наверняка помните мои посты о том, как круты активы в сети Liquid. L-BTC, USDT на Liquid - я пел им дифирамбы. Говорил, что транзакции там конфиденциальны, что это защита от вездесущих AML-аналитиков и от бирж, которые могут заблокировать твои сатоши только потому, что они когда-то "побывали в плохой компании". Я искренне в это верил.
Когда отправляешь транзакцию Liquid из кошелька, кошелёк обычно даёт две ссылки на обозреватель блоков: одну на конфиденциальную транзакцию, а другую - на "транзакцию без ослепления" (unblinded). Вторая ссылка известна только отправителю, а первую могут увидеть все, кто просматривает обозреватель блоков. И мне почему-то никогда не приходило в голову усомниться в конфиденциальности и проверить, что там видно по этим ссылкам. Но вот недавно у нас на сайте rabbit.io был проведён очередной обмен какой-то криптовалюты на USDT в блокчейне Liquid, и пользователь попросил сообщить ему сведения о транзакции. Я заглянул в обозреватель блоков и ужаснулся. Я увидел, что весь граф взаимодействий между адресами - кто, когда и кому что-то отправлял - лежит как на ладони. И это не скрыто никакой "конфиденциальностью".
Я понял, что жестоко ошибался сам и, что самое обидное, вводил в заблуждение вас. Простите. На самом деле, Liquid не даёт защиты от злоупотреблений AML. Если операторам AML-разметки придёт в голову назвать "грязным" любой адрес, от которого вы когда-либо что-либо получали, им точно так же может прийти в голову назвать грязным и ваш адрес, по той же причине, по которой они это делают при анализе любого другого блокчейна
"Конфиденциальная транзакция" - это не метафора, в случае с Liquid это вполне корректный термин. Но он означает строго определённое: скрыты сумма и тип актива. Всё.
Метафору можно найти другую. Когда я стал изучать этот вопрос, мне понравилось сравнение Liquid со скатертью на столе. Она накрывает блюдо (из-за этого не видно, чем и насколько оно заполнено), но сам стол - все перемещения блюд - виден любому, кто заглянет в обозреватель. Сторонний наблюдатель не разберёт, перевели вы сто биткоинов или полдоллара в USDT. Но он прекрасно видит, что адрес A что-то отправил адресу B, а тот потом что-то получил от адреса C.
Отсюда и моя проблема. Для личных биткоин-платежей, не связанных с обменами на rabbit.io, я использую Lightning Network. Мой выбор обусловлен тем, что получатель не видит историю монет, и у него нет оснований объявить их "грязными" и забрать мои биткоины себе, не предоставив ничего взамен. Я наивно думал, что Liquid даёт похожую защиту: с компромиссами в отношении полного контроля над монетами, но зато без сложностей, связанных с управлением платёжными каналами. Оказалось - нет.
Но Liquid отлично решает другую задачу. Конфиденциальность транзакций в этой сети помогает защититься от злоупотреблений со стороны эмитентов токенов, которые в ней выпускаются.
В Ethereum, Tron и других подобных блокчейнов смарт-контракты популярных токенов устроены так, что эмитент видит баланс каждого кошелька и может нажать кнопку и заморозить ваши токены. В Liquid эмитент этого сделать технически не может - это во-первых. А во-вторых, это в любом случае было бы бессмысленно: суммы и типы активов на каждом адресе скрыты, и эмитент не знает, у кого сколько его токенов лежит. Это очень существенная защита от точечной цензуры. А также это неплохая защита от излишнего внимания со стороны мошенников и воров: никто никогда не узнает объёмы средств, поступающих на ваш адрес.
Liquid решает свою задачу. Просто она оказалась не моей. Это не делает блокчейн плохим - это делает его специализированным.
Прежде чем идти дальше, давайте договоримся о понятиях. У любой транзакции есть несколько компонентов, которые можно скрывать по отдельности:
Разные технологии закрывают разные пункты из этого списка. И теперь, понимая это, можно наконец честно разобраться, что делает каждый инструмент.
Если Liquid скрывает "сколько" и "что", то Lightning скрывает "откуда".
Представьте себе, что вы хотите передать другу посылку в другой город. Вы не едете сами. Вы передаёте её курьеру, тот - водителю междугороднего автобуса, тот - местному таксисту в городе назначения, а таксист уже отдаёт другу. Таксист, последний в цепочке, знает только, что коробку ему дал водитель автобуса. Он понятия не имеет, что изначально её отправили вы.
В Lightning это называется луковой маршрутизацией (onion routing) - точно так же, как в Tor. Получатель видит только последний узел в цепочке. История ваших монет для него невидима. AML-анализатору нечего анализировать - сведения о транзакциях никуда не записываются.
Это именно то, что было нужно мне лично. Именно поэтому я использую Lightning для своих приватных транзакций.
Нюанс: открытие и закрытие платёжных каналов записываются в блокчейн Биткоина. Но это лишь первая и последняя транзакция, а не история каждого из десятков, сотен или даже тысяч платежей, которые могут пройти между ними.
У публичных людей есть большая проблема. Если они опубликуют обычный биткоин-адрес для донатов или платежей, любой сможет зайти в обозреватель и увидеть, сколько раз на этот адрес что-то перевели и сколько на нём биткоинов сейчас. Это как если бы номер вашей банковской карты давал любому неизвестному вам человеку доступ к выписке по счёту.
Silent Payments (тихие платежи) решают это изящно.
Суммы при этом видны: это обычная транзакция в блокчейне Биткоина. Но связь между публичной личностью, опубликовавшей адрес для донатов или платежей, и конкретными поступлениями - скрыта.
Похожую схему для приватности недавно предложили в сети Stellar.
Ark - это относительно новый протокол поверх Биткоина, активно разрабатывающийся прямо сейчас. Он пытается дать то же, что Lightning, но без необходимости открывать каналы заранее.
Здесь вместо отдельных платёжных каналов все участники скидывают свои монеты в общую кучу, но сохраняют контроль над той суммой, которую внесли. Вы бросаете свои монеты в котёл - они растворяются среди тысяч других. Когда нужно кому-то заплатить, вы выставляете оператору требование взять определённую сумму и переписать её на другого участника общего пула или - если получатель не участвует в пуле - изъять её из пула и переслать на указанный вами адрес. Оператор не имеет возможности отказаться исполнить ваше требование.
В результате вывода из общего котла внесённые вами монеты и монеты, которые получит друг, не связаны видимой цепочкой. Связь разорвана.
Это чем-то похоже на миксер, но основное назначение - не разрыв связей между вводом в котёл и выводом из него, а операции, которые проводятся внутри котла (передачи прав требования к оператору). Они мгновенные и дешёвые, прямо как внутрибиржевые переводы. Только оператор Ark отличается от оператора биржи тем, что не имеет возможности заблокировать ваши средства.
С точки зрения приватности всё тоже очень похоже на внутрибиржевые переводы: оператор видит всё, а сторонние наблюдатели не видят ничего, даже самого факта переводов.
Это совсем свежая идея, пока в стадии исследования. Но объяснить её очень просто.
Вся информация о том, какую часть своих средств и кому она отправила, передаётся напрямую от Алисы к Бобу. Проверку перевода получатель осуществляет сам, не делясь этой информацией со всем миром. Точнее, весь мир может проверить корректность транзакции, а получатель - её содержание. Блокчейн хранит только криптографический след, необходимый для предотвращения двойного расходования. Если вы не участвовали в сделке, вы ничего о ней не знаете, а знаете только то, что какой-то UTXO был уничтожен.
Похожую схему - с хранением в блокчейне только zk-доказательств корректности транзакций - успешно работает уже почти десять лет в сети Zcash.
Выходим за рамки Биткоина. Здесь разработчики решили проблему графа транзакций радикально.
В обычных блокчейнах записаны адреса, суммы и явная структура транзакций: вот вход, вот выход, вот связь между ними. А в MimbleWimble (криптовалюты Grin и Beam) адресов нет вообще. Нет даже привычных сумм. Есть только входы и выходы, размеры которых неизвестны.
Когда формируется блок, в него вписываются не транзакции, в которых есть связь между каждым входом и каждым выходом, а
Записей о том, кто кому отправил монеты, в блокчейне нет. Более того, если выход какой-то транзакции был потрачен в том же блоке, в который вошла родительская транзакция, то промежуточные выходы и входы вообще не остаются в истории.
Наблюдатель видит только то, что одни монеты были уничтожены, а вместо них были созданы новые.
Однако транзакции не являются конфиденциальными для узлов сети, которые их обрабатывают. Пока транзакция не записана в блокчейн, все видят связь между её входом и её выходом. Если кто-то активно мониторит распространение транзакций до включения их в блок, он может попытаться восстановить граф, хотя бы частично.
В сети Litecoin реализовано расширение под названием MimbleWimble Extension Block (MWEB). Это не отдельная сеть, как Grin или Beam, а дополнительный слой внутри основного блокчейна.
Монеты можно:
Это чем-то похоже на Ark в Биткоине, только без единого оператора. Операторами являются все узлы сети и, разумеется, майнеры, которые включают входы и выходы в блоки.
Для удобства пользователей в Litecoin MWEB реализована функциональность адресов. Есть привычные строки, которые выглядят, как адреса, и блокчейн поймёт, если транзакция будет отправлена "на MWEB-адрес". Но эти адреса существуют только на уровне UX. В самих блоках MWEB адресов нет: есть только единые списки входов и единые списки выходов.
В финале фильма "Спартак" Стэнли Кубрика есть знаменитая сцена. После поражения восстания римляне требуют, чтобы повстанцы выдали Спартака. Тогда один из пленных гладиаторов встаёт и говорит: "Я Спартак!" За ним встаёт другой, затем ещё один, и в итоге десятки людей заявляют то же самое.

Так работает Monero. Когда вы отправляете перевод, ваш кошелёк берёт вашу монету и подмешивает к ней несколько чужих старых монет из блокчейна в качестве "статистов". С точки зрения стороннего наблюдателя, транзакцию мог отправить любой из этой группы.
Параллельно Monero скрывает получателя через одноразовые адреса: для каждого платежа генерируется уникальный адрес (как в Silent Payments), который нельзя связать с публичным адресом получателя. И суммы транзакций тоже скрыты.
Это самая агрессивная на сегодня форма защиты приватности. Именно поэтому Monero не любят регуляторы.
Но "самая агрессивная" - не значит "самая надёжная". Хоть в записях, которые делаются в блокчейне Monero, ничего невозможно понять, тем не менее, эти записи существуют. И никто не может быть уверен, что рано или поздно не появятся технологии, позволяющие восстановить информацию на основе этих записей.
Эта потенциальная угроза отличает Monero от таких решений, как, например, Lightning Network, где записей о транзакциях в принципе нет. В связи с этим известный энтузиаст Биткоина под псевдонимом Supertestnet уже несколько месяцев проводит челлендж: просит любителям Monero отправить ему перевод в сети Lightning Network, а он отправляет равноценный перевод в сети Monero, после чего предлагает сравнить, кто из двух отправителей сможет больше узнать о получателе. Интересно, что иногда ему действительно удаётся что-то выяснить на основе тех скудных данных, которые записываются в блокчейн Monero.
Давайте соберём всё в простую картину.
Хотите защититься от точечной цензуры эмитента или от финансового шпионажа? Ваш выбор - Liquid. Он прекрасно справляется с этим. Tether не видит ваш баланс USDT в этой сети и не может вас заблокировать, а воры не знают, на владельцев каких адресов имеет смысл устраивать фишинговую атаку.
Хотите скрыть историю происхождения монет и защититься от AML-разметки? Ваш выбор - Lightning Network. Получатель не видит, откуда пришли деньги.
Всё, что вам нужно, - это скрыть связь приходных транзакций с вашей личностью? Используйте Silent Payments в Биткоине или аналогичное решение в сети Stellar.
Хотите, чтобы никто вообще не видел граф транзакций? Смотрите в сторону MimbleWimble (Grin, Beam, Litecoin), Ark или Zcash.
Хотите сегодня скрыть вообще всё - отправителя, получателя, сумму, граф - пусть и с небольшим риском, что когда-нибудь это может быть распутано? Ваш выбор - Monero.
Ждёте будущего? Следите за Shielded CSV.
Каждая технология создавалась для своей угрозы. Глупо ругать молоток за то, что им неудобно закручивать шурупы. Liquid прекрасно справляется со своей задачей. Просто эта задача оказалась не моей - и я не разобрался в этом достаточно тщательно, прежде чем советовать вам.
Теперь разобрался. Надеюсь, что помог разобраться и вам.