Пока мы ждем вердикта по делу Storm, полезно помнить, что защищенные пулы — это всего лишь математика, и их не так уж сложно понять. Каждый может реализовать один из них. Итак, вот поток с основной интуицией о том, как они работают:
Цель состоит в том, чтобы создать систему, в которой вся информация в каждой транзакции остается полностью конфиденциальной для пользователей. Мы не должны ожидать ничего меньшего от наших транзакционных систем. Это основное человеческое право на конфиденциальность.
Проблема в том, что если вся информация является конфиденциальной, как блокчейн знает, что транзакция действительна? Как он знает, что у пользователя действительно есть средства, которые он собирается отправить? Что он не тратит их дважды? Очевидный ответ: zk-доказательства. Но действительно ли это так просто?
Предположим, у вас есть счет с балансом 10. Вы хотите отправить 5 на защиту Романа. Поэтому вы создаете zk-доказательство, которое показывает, что у вас есть 10, и ваша транзакция отправляет 5. Звучит достаточно просто!
Но подождите! Когда вы сделали доказательство о наличии 10, это доказательство относилось к какому-то состоянию в прошлом, до последнего блока, в который была включена ваша транзакция. Возможно, с тех пор вы потратили все монеты! Как вы можете доказать, что у вас все еще есть 10 на последнем блоке?
На самом деле это довольно сложно, и именно поэтому защищенные пулы не работают с системами на основе аккаунтов - нет простого и надежного способа доказать блокчейну, в zk, последнее состояние в реальном времени. Решение? Используйте UTXO. Знаменитые "Неизрасходованные выходы транзакций" из Bitcoin.
С UTXO у вас нет единого обновляемого аккаунта, у вас есть отдельные "записки", которые можно потратить только один раз, полностью (как настоящая монета). Системы UTXO в целом довольно неудобны для разработки, но это свойство "потратить один раз" делает их очень полезными для защищенных пулов.
В системе UTXO, такой как Bitcoin, когда вы собираетесь потратить UTXO, все полные узлы могут проверить, что UTXO существует (он был создан в прошлом) и еще не был потрачен. Это просто. Но если все данные в UTXO зашифрованы, как мы можем это проверить?
Данные не только зашифрованы, но мы даже не хотим раскрывать, *какой* UTXO используется. Если бы мы это сделали, то тот, кто отправил вам UTXO, знал бы, когда вы его потратили. В идеальном дизайне защищенного пула НИКАКАЯ информация не утечет через транзакцию.
Основной трюк защищенных пулов заключается в том, чтобы ввести значение "нуллификатор", которое может быть публично раскрыто, но уникально выводится тратящим для каждого UTXO. Чтобы потратить UTXO, блокчейн проверяет, что нулификатор еще не существует. Это обеспечивает возможность потратить каждый UTXO только один раз.
Теперь мы можем вернуться к нашему zk-доказательству. Нам просто нужно доказать, что UTXO, который мы тратим, действительно существует в цепочке, и что нулевой идентификатор, который мы раскрыли для него, правильно выведен из UTXO, который мы тратим. Вот и всё!
На практике это означает, что системы защищенных пулов обычно хранят два различных дерева Меркла. Одно содержит хеши UTXO (UTXO часто называют "записками", а их хеши - "обязательствами записок"), а другое содержит нуллификаторы. Оба дерева только для добавления!
Когда создается новая записка, ее хэш сохраняется в дереве Меркла записки. Сама записка зашифрована. Когда пользователь позже решает потратить эту записку, он вычисляет нуллификатор для записки и создает zk-доказательство, показывающее, что записка находится в дереве Меркла и нуллификатор верен.
Нуллификатор раскрывается публично, и цепочка проверяет, что он еще не существует в дереве нуллификаторов. Затем он сохраняется там, чтобы нота не могла быть потрачена снова. Никто на самом деле не может сказать, какая нота тратится, поскольку оригинальная нота остается нетронутой в дереве нот!
Вот и всё, базовый дизайн всех защищённых пулов сегодня, включая @Zcash, @TornadoCash, @penumbrazone, @namada и другие. Конечно, в дизайне защищённых пулов есть много других аспектов. Оставайтесь с нами для дальнейших обсуждений, где мы углубимся в эти механизмы.
@AThryver @0xkaiserkarel Распространенное заблуждение и, возможно, вводящее в заблуждение использование термина "zk" здесь. См.
Ethan Buchman (🐝,🦇)
Ethan Buchman (🐝,🦇)24 июл. 2024 г.
TEE? ZKP? MPC? FHE? Все, что вам нужно знать о самых важных трехбуквенных аббревиатурах в криптовалюте Или как завести друзей и влиять на людей с помощью TEE 🧵
33,54K