TORNADO.CASH

TORNADO.CASH

@Ghost_In_The_Block

1/ Для ZK курса @0xPARC мы должны были провести блиц-доклад.

Для этого я выбрал ELI5 TornadoCash, одно из простейших полезных приложений zkSNARKs, которое позволит мне понять, как SNARKs работают в реальном приложении.


2 / Tornado.Cash - это миксер, который позволяет скрыть связь между кошельком, из которого вы вносите ETH, и на который выводите.

Tornado.Cash - смарт-контракт, в котором хранятся средства.

Также он является деревом Меркла всех участников.


3 / Дерево Меркла - это древовидная структура данных, которая хранит данные на “листьях” и создает хеши до тех пор, пока вы не получите корневой хеш.

Это эффективная структура данных, позволяющая подтвердить присоединение к списку участников без необходимости предоставлять все данные по отдельности.


4 / Когда вы вносите депозит, вы создаете ключ в offline режиме, затем хешируете его в обязательство.

Именно это обязательство добавляется в on-chain дерево Меркла.

Во время вывода вы пытаетесь доказать, что находитесь в дереве Меркла, чтобы контракт позволил вам снять средства.


5 / Чтобы доказать включение в дерево Меркла, в большинстве случаев вы должны предоставить сами данные, sibling хеш, а также все sibling хеши, идущие по дереву вверх, пока вы не дойдете до корневого хеша.

Однако, если вы предоставите это, вы покажете какой именно вы лист в дереве Меркла и когда был внесен депозит.


6 / Таким образом, при выводе, вместо предоставления фактических данных, вы предоставляете только ZK-доказательство включения.

Это доказательство создается с использованием ключа, который вы генерируете во время депозита.


7 / Однако, если вы создаете доказательство включения с помощью zkSNARK, возникает одна проблема:

Как контракт узнает, что вы делали вывод прежде?

-На деле контракт не знает, кто вы, и ему неизвестно, были ли у вас выводы в прошлом.


8 / Это означает, что существует проблема двойной траты, которую необходимо решить, поскольку доказательство может использоваться несколько раз для расходования средств в контракте.

 Данное доказательство подтверждает, что вы находитесь в дереве Меркла, но нет никакого способа узнать, использовалось ли доказательство ранее.


9 / Проблема решается добавлением соли.

Когда вы создаете свое обязательство по депозиту, вы смешиваете ключ вместе с солью.

Это называется нулификатором в Tornado.Cash, который является уникальным идентификатором вашего обязательства.


10 / Когда вы генерируете свое доказательство, оно предоставляется вместе с вашим ключом.

Когда вы выводите, ваш нулификатор предоставляется и записывается в смарт-контракте, поэтому доказательство не может быть использовано снова.


11 / Последняя часть головоломки - ретрансляторы.

Ретранслятор позволяет совершить вывод средств без какого-либо количества ETH на новом кошельке.

Кроме этого, он не позволяет создавать какую-либо связь между адресами депозита и вывода (кроме того, что они оба использовали Tornado).


12 / Ретрансляторы принимают доказательства и отправляют их в смарт-контракт Tornado.Cash от вашего имени.

Они не могут украсть ETH, так как доказательство было создано с получателем в качестве входных данных.

Если получатель будет изменен, это сделает доказательство недействительным, и вывод не состоится.


13 / Ретрансляторы имеют решающее значение для сохранения анонимности в Tornado.Cash.

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

Если вы используете (для ввода - вывода) тот же адрес, или адрес, ссылающийся на него, вы нарушаете всю анонимность, которую вам предоставило ZK-доказательство


14 / Подводя итог, Tornado.Cash - это доказательство включения в дерево Меркла, где для доказательства используются SNARKs, не раскрывая "листовой" узел, которым вы являетесь, и с защитой от двойной траты средств чтобы не использовать доказательство дважды.


15 / При создании этого твита я в основном читал код здесь.

 Я бы посоветовал любому, кто захочет разобраться в zkSNARKs, посмотреть, поскольку эти схемы намного более доступные, чем те, что я видел ранее.


 16 / Также Tornado использует https://ens.domains/ для дополнительного сопротивления цензуре для всех своих ретрансляторов, что тоже довольно круто!

Но не интегрировано в работу с деньгами в Tornado, поэтому я просто добавлю его здесь, в конце!


Оригинал вы найдете здесь.

Перевод подготовлен командой Telegram-канала

@Ghost_In_The_Block


Report Page