Приветствуем! Впервые на сайте Zcash?
Сеть Zcash пока еще молода, но быстро растет! Регистрируйтесь на сайте, чтобы получить больше информацией о том, как начать пользоваться Zcash!

Язык

zk-SNARKи в Ethereum

Шон Боу | Jul 28, 2016

На прошлой неделе Виталик Бутерин, Эндрю Миллер, Эран Тромер и я побывали в "лагере" Ethereum/IC3 в Корнелльском университете. Вместе с великолепной командой студентов/интернов Корнелла и представителем Ethereum Foundation мы впервые испытали zk-SNARKи в Эфириуме.

Групповое фото разработчиков SNARKов для Ethereum

(Слева направо) Юнконг Ху (Yuncong Hu), Кейси Детрио (Casey Detrio), Джош Ганчер (Josh Gancher), Шон Боу (Sean Bowe), Эран Тромер (Eran Tromer)

SNARKи

zk-SNARKи -- это криптографические инструменты, лежащие в основе Zcash. Они доказывают, что вы выполнили вычисление для некоторых входных данных, не раскрывая этих данных. В Zcash эти доказательства используются для верификации транзакций с сохранением конфиденциальности пользователей

Более того, zk-SNARKи позволят сократить затраты на верификацию сложных смарт-контрактов! Благодаря тому, что эти доказательства так малы, а проверить их можно совсем быстро, они позволяют обеспечить целостность вычислений, не обременяя стороны, которые не принимают участия в вычислениях.

На этой неделе мы расширили язык контрактов Ethereum, реализовав в нем эффективную верификацию доказательств, основанных на zk-SNARKах. Говоря конкретно, мы добавили "опкод" 'snarkverify' в форк 'Parity', в котором для верификации доказательств используется библиотека libsnark.

Zerocash в Ethereum

Шон Боув показывает схему

Чтобы продемонстрировать это, мы использовали новый метод проверки zkSNARK в Эфириуме, чтобы реализовать простой контракт по перемешиванию монет с использованием упрощённой реализации Zerocash -- академического протокола, на котором основан Zcash. Мы назвали этого "ребенка" ZoE, от слов Zerocash и Эфириум. Этот контракт позволяет вам вносить дискретные суммы (единицы ETH) встраивая "серийный номер" в дерево Меркле, которое обслуживает контракт.

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

Чтобы предотвратить возможность для пользователей, имеющих доказательства, вывести средства без вашего разрешения, для подтверждения также требуется аутентификация адреса вывода (в Эфириуме) которому разрешается получить средства из контракта.

Идея интеграции Zerocash в другую валюту с использованием проверочного кода SNARK восходит к оригинальному Zerocash документу (раздел 6.3 в Расширенная версия Zerocash). Выполняя эту последовательность действий, становится возможным расширить возможности контракта ZoE для работы с полным протоколом Zerocash.

Заключение

Нам нравится способствовать развитию как Биткоина так и Эфириума, и мы с нетерпением ждем начала сотрудничества с более широким криптовалютным сообществом. Вы можете ознакомиться с кодом нашей группы здесь.