Greetings! New to Zcash?
The Zcash network is young, but evolving quickly! Sign up and we'll be in touch with monthly highlights on ecosystem growth, network development and how to get started with Zcash!

言語

イーサリアム上のzkSNARKs

Sean Bowe | Jul 28, 2016

先週、ZcasherのVitalik Buterin、Andrew Miller、Eran Tromerとコーネル大で行われた Ethereum/IC3 Bootcamp に参加しました。このイベントで、コーネル大の学生やインターン、イーサリウム財団のメンバーと共に素晴らしいチームを組み、zkSNARKsをイーサリウム上にはじめて構築しました。

SNARKs(イーサリウムチーム写真)

(左から) Yuncong Hu、Casey Detrio、Josh Gancher、Sean Bowe、Eran Tromer

SNARKs

zk-SNARKsはZcashの基礎となる暗号ツールです。これにより、インプットの全てを明らかにすることなく、インプットに対する計算を行ったことが証明されます。Zcashでは、この証明を使用してユーザーのプライバシーを保護しながら取引を認証します。

プライバシーにとってだけでなく、複雑化しているスマートコントラクトの認証コストを抑えるのにも最高の環境となります。迅速に認証でき、証明は小規模で済むため、非参加者へ負担をかけることなくコンピュテーションの完全性を保護することができます。

今週、イーサリアムのコントラクト言語を拡張し、zkSNARKプルーフの認証を効果的にサポートできるようにしました。具体的には、libsnarkを使ってジェネリックプルーフを認証する Parity の分岐点を(オペコードのように)プレコンパイルする snarkverify を追加しました。

イーサリアムにおけるZerocash

サーキットのデモを見せるSean Bowe

デモ版として、単純化させたZerocashの変異体を使って、プリミティブコインの混合コントラクトを導入するため、イーサリアムで新規のzkSNARK認証システムを使用してみました。この変異体はZcashの実行のベースとなっているアカデミックプロトコルです。私たちはこれを、「イーサリアムを超えるZerocash」の頭文字をとり「ZoEちゃん」と呼んでいます。コントラクトを使用することで、ユーザーはコントラクトによって保持されたマークルツリーに「シリアルナンバー」を投入することで、個々の量(ETHユニット)を預け入れることができます。

使用したのがどのコミットメントか開示せずに引き出すためには、ちなみにこれにより引き出しとデポジットが結びつくわけですが、私たちはzkSNARKを使って、コントラクトのマークルツリー内部のコミットメントを*知っている*ことを証明します。二重払いを防ぐため、これを行いつつシリアルナンバーを開示しますが、これによりコントラクトが記憶され、再利用を防ぐことになります。

他のユーザーが認証を使い、許可なく引き出すことを防ぐために、認証はコントラクトからの資産受け取りを認可する(イーサリアム上の)引き出しアドレスに権限を与えることとなっています。

ZerocashをSNARK認証オプコードを使用している通貨へ統合するアイディアは、最初のZerocash論文(Zerocash拡張版 セクション6.3)にさかのぼります。この構想に続き、ZoEコントラクトを完全なZerocashプロトコルを動かすものへと拡大することもできます。

結論

私たちはビットコインとイーサリアムの両方に貢献できることを光栄に思っており、より広い暗号通貨コミュニティとの協働を心待ちにしています。グループコードは こちら をご覧ください。