Сегодня утром я читал про Phoenix и застрял на мысли, которая звучала почти слишком простой
Если кто-то тратит приватный вывод, почему бы просто не пометить этот вывод как потраченный
Так я сначала и подумал, как это должно работать
Ты тратишь вывод
сеть помечает его как потраченный
а повторная попытка потратить его снова получает отказ
Просто Но потом я понял, что есть проблема, если сам вывод должен оставаться приватным
Если сети нужно публично указать на точный приватный вывод, который был потрачен, вы тем самым раскрываете информацию о транзакции
Поэтому я вернулся к разделу Phoenix в белой книге Dusk, чтобы понять, как это решается
И там как раз появляется нуллифаер (nullifier)
Вместо того чтобы просто объявлять, какой именно приватный вывод был потрачен, Phoenix формирует уникальное криптографическое значение — нуллифаер
Сеть может проверить, появлялся ли этот нуллифаер уже
Если да, то трата отклоняется
Если нет — транзакция может продолжиться, не раскрывая напрямую, какой именно приватный вывод использовался
Вот ту часть я поначалу и упустил
Системе всё равно нужен способ помнить
что это значение уже было потрачено
Но необязательно говорить
что это точный приватный вывод — тот, который был потрачен
А это гораздо более сложная задача
Потому что теперь вы пытаетесь решить две вещи одновременно
Остановить двойное расходование
И не раскрывать приватный вывод, который был потрачен
Вот почему nullifier теперь мне кажется логичным
Это не просто ещё один криптографический объект, встроенный в Phoenix
По сути, это связь между необходимостью помнить, что что-то было потрачено, и тем, чтобы не раскрывать, что именно было потрачено
Чем больше я смотрел на это, тем больше понимал: приватность — это не просто сокрытие транзакции
Иногда приватность — это сокрытие связи между транзакцией и тем элементом приватного состояния, который стоит за ней
#dusk $DUSK @Dusk $BTR $BMT