Jefflau.eth_tweet

Jefflau.eth_tweet

@Ghost_In_The_Block 
Приводим для вас перевод ветки в twitter от @jefflau.eth_tweet

Climber. Building @ensdomains. Eth2 Validator. Distilling the complicated into the simple. Curious about ZK. Grade 6 maths

Приступим.


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


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

Tornado Cash - это смарт-контракт, в котором хранятся средства, а также дерево Меркла всех участников.


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

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


Пример хеш-дерева в биткойн-блоке

4 / Когда вы вносите депозит, вы создаете секрет в offline режиме, а затем хешируете его в обязательство. Именно это обязательство добавляется к дереву Меркла on-chain.


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


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


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


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


Proof создан с использованием секрета, который вы сгенерировали при создание депозите.


7 / Однако, если вы создаете Proof включения с помощью zkSNARK, возникает одна проблема. Как контракт узнает, что вы делали вывод прежде?

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


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


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


9 / Это решается добавлением соли.
Соль модификатор входа хэш-функции позволяет скрыть факт использования одинаковых прообразов при использовании для них разной соли. Различают статическую соль (одна и та же для всех входных значений) и динамическую (генерируется для каждого входного значения персонально) к обязательству в дополнение к вашему секрету. Когда вы создаете свое обязательство на депозите, вы смешиваете и секрет и соль вместе.

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


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


11 / Последний кусок головоломки - Relayer's. Relayer позволяет фактический вывод средств без каких-либо дополнительных ETH на новый адрес. И, кроме того, он не позволяет создавать какую-либо связь между адресом депозита и адресом вывода (кроме того, что они оба использовали Tornado).


12 / Relayer’s принимают доказательства и отправляют их в смарт-контракт Tornado Cash от вашего имени. Они не могут украсть ETH, так как доказательство было создано с получателем в качестве входных данных.


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


13 / Relayer’s имеют решающее значение для сохранения анонимности в Tornado Cash. Relayer не позволяет любой ссылке связывать адрес депозита и вывода средств.


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


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


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


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


 16 / Также Tornado использует @ensdomains для дополнительной защиты от цензуры для всех своих relayer’s, что тоже довольно круто! Но не является неотъемлемой частью работы с деньгами в Торнадо, поэтому я просто добавлю его здесь, в конце!

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

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

@Ghost_In_The_Block



Report Page