tomoima525's blog

Androidとか技術とかその他気になったことを書いているブログ。世界の秘密はカレーの中にある!サンフランシスコから発信中。

ゼロ知識証明を学ぶ ZKUniversity を修了しました

zku

3 月から参加していたゼロ知識証明を学ぶプログラム ZKUniversity を先日修了し、卒業生の NFT も貰ったので、感想や最終プロジェクトについて書き残します。

zku graduate NFT

ZKUniversity とは

"Onboarding 1000 Developers for Applied Zero-Knowledge Product Building By 2024"(2024 年までにゼロ知識証明を使ったプロダクトを作る開発者を 1000 人創出する)という目的のもと作られたオンラインコースです。Harmony network によって $1M のグラントを得ている zkDAO が母体となっています。

ゼロ知識証明ってそもそもなに?という人はこの一連のツイートを御覧ください。

参加している人のバックグラウンドは学生、リサーチャー、開発者と幅広く、また世界中の国から参加者がいます。Cohort2 では 150 人、Cohort3 は 450 人ほどが参加しているようです。

Learn to Earn

大きな特徴として挙げられるのが、ZKUniversity が Learn to Earn という形式を採用していることです。コース修了時にキャッシュ(ステーブルコイン)が支払われます。各課題の成績や他の参加者をサポートすることでボーナスが得られるようになっています。Cohort3 では成績などに応じて修了時に$3000 が支払われる予定です。さらに最終プロジェクトをもとに zkDAO にグラントを申請することで年間 $15000 の支援が受けられます。

コースの構成

コースは 2 ヶ月間で、各週でトピックがあり、それぞれ宿題が課されます。

week 1 ~ 3 は主にゼロ知識証明の理論的な理解と、開発に使うツールについて学びます。ZKUniversity では、多くのプロダクトで利用されていることから証明手法として zkSNARK をメインに扱っています。zkSNARK は circom という数理回路を設計するための言語を利用するため、その課題が多く扱われます。いくつかの有名なゼロ知識証明を利用したプロダクトを通して理解を深めていきます。

week 4 ~ 6 は rollups, bridge, identity などの分野でゼロ知識証明がどう使われ始めているかというのをそれらのプロジェクトのソースコードを手がかりに学びます。Cohort 2 はよりインフラ寄りのコースとアプリケーション寄りのコースに分岐して、Rust を使ってネットワーク間ブリッジを実装するなど意欲的な課題があったりしました。

week 7 ~ 8 は最終課題のための準備が主となります。各生徒は修了のためにゼロ知識証明を使ったスマートコントラクトを期日までに harmony testnet にデプロイし、アプリケーションをローンチする必要があります。最後の二週間はメンターからフィードバックを受けつつ、ローンチまでこぎつけることが目標になります。

より詳細なシラバスは以下リンクにあります。

course.zku.one

コースは基本的には自分で教材を読み込み、課題をこなしていくスタイルです。Discord では自分で追加でリサーチした内容や質問などを他の生徒と共有し議論できます。その他に週 2,3 回 Mentor による AMA(Ask Me Anything: 何でも質問会)があり、そこで直接課題に関する疑問点を解決できます。

あったらよい前提知識としては、

  • ゼロ知識証明についてはバックグラウンド課題でかじるレベルで問題ないです
  • Solidity。毎回の課題でスマートコントラクトを書きます。
  • 英語。Discordで活発に議論が行われているのでそれに参加する&自習コンテンツも英語
  • ブロックチェーンに関するアルゴリズムの知識。マークル木とハッシュ関数があらゆるところで出てきます
  • 暗号に関する基礎知識。楕円曲線暗号や署名などの理解があるとよいです。自分は暗号技術入門を常に開いてました

受講の感想

さて、ここからは実際に受講してみての感想をつらつらと書き連ねてみます。

最初がつらい。脱落者続出

毎週結構な量の自習コンテンツと課題がでます。いきなりゼロ知識証明のコンセプトと開発ツールにぶっ叩かれるので、最初の 1,2 週がハードでした。久しぶりに深夜まで勉強しました。コーディングもですが、知識だけでは解けないエッセイ形式の課題が重いです。例えば第 2 週では TornadoCash の実装に関する考察などがありました。

Tornado Cashの課題

自分の参加した Cohort 2 の参加者はおおよそ 150 人ほどでしたが、最終的に修了した人は 18 人ほどなので、想像するに最初のほうで多くの人が脱落したんじゃないかと思います。

後半になるとそれぞれの知識がつながってきて、だいぶ楽になりました(それでも大変でしたが)。自分は自社のプロダクトにゼロ知識証明が使えるはずと踏んでいたのでがんばれましたが、そういうモチベーションがないと、厳しいかもと感じました。

コミュニティの熱量高い。質問し放題

課題によりある程度絞られた人たちが参加しているので、参加者やメンターの熱量が高いです。誰かしらが Discord 上で常に情報共有や課題の議論をしてます。週 3 回ある AMA はバラバラのタイムゾーンで行われてますが、どの回も熱心に議論が行われていました。

コーディネーターと TA の熱量も高い。よくこれだけのコンテンツと課題をまとめあげたなという印象です。質問にも熱心に答えていて、常にコンテンツがレベルアップしています。ちょうど このコホート中に $1M を調達していました。

talk.harmony.one

自分は課題がわからないときはAMAに持ち込んでその場で問題の意図や期待する答えを確認し、問題を解いてました。これは効率的に課題をこなす良い方法だったと思います。

共通の興味を持った仲間ができる

Discord を通じて同じコホートの人たちとすごく仲良くなりました。今でもゼロ知識証明関係なく頻繁にやりとりしています。オランダで Covid-19 にかかり足止めをくらったときには現地にいる友だちにすごいお世話になりました。同じような分野で働いていたり、興味があったりする人たちとディスカッションするのはとても楽しいです。これはこのコースに参加して本当によかったなと思うところです。

アムステルダムであった同コホートの人たちと

最終プロジェクト

自分が最終プロジェクトでローンチしたのは Continuum というゼロ知識証明を使ったバックグラウンドチェックツールの PoC です。

現状のバックグラウンドチェックは、個人情報を公開する前提でできており web3 業界で働く偽名ワーカーと相容れません。一方企業側が必要な情報はその人が企業が求める条件を満たしていることであり、全個人情報ではないです。そのギャップをゼロ知識証明で解決しようという試みです。

Continuum では PoC として、Github アカウントが持つ情報の公開範囲を制御できます。ユーザーはアカウントを作成してから ◯ 年、スター数、フォロワー数といった自分の Github の情報について明かすか否かを選択できます。例えば"フォロワー数が 100 人いる"というデータを公開した場合、ブロックチェーン上で 100 人フォロワーがいることを Github のアカウントを明かすことなくゼロ知識証明によって証明し、ウォレットアカウント(EOA)と紐付きます。Github のアカウントは紐つかないので、個人を特定することはできません。

フロー

スクリーンショット

ゼロ知識証明後はNFTが発行できます。

nft

現在 Harmony のテストネットおよびメインネットで実際に利用が可能です。(利用にはHarmony ONEが少量必要です)

テストネット: https://continuum-swart.vercel.app/
メインネット: https://continuum.tomoima525.com/

ベースとなる機能は Semaphore という、ゼロ知識証明でメンバーシップ証明を行うツールをもとに作られています。オフチェーンで証明書を生成するために、パフォーマンス観点から DB アクセスのみでマークル証明を生成するなど、いくつかの工夫を凝らしています。プロジェクトは全てオープンソースでこちらに公開しています。

github.com

ちなみに Continuum は"連続値"という意味です。Coinbase の元 CTO である Balaji 氏がとあるブロックチェーンカンファレンスで話した Pseudonymous Economy(偽名経済)にて話した"偽名は連続値である"="公開する情報によってプライバシーが連続的に変化する"というアイデアから取っています。

speakerdeck.com

まとめ

ZKUniversity はゼロ知識証明を使ったプロダクトを開発することに主眼がおかれており、また2ヶ月と短い期間なので、ベーシックな内容しかカバーできてないです。なので修了後も継続して学び続けています。
しかしながら、ブロックチェーンや Web3 について学びを深めるにつれ、ユーザーのプライバシーは重要な課題であると感じており、個人的にはゼロ知識証明への足がかりを得られたことは良かったです。

ブロックチェーンにおけるゼロ知識証明はパフォーマンスや DX がまだ発展途上であり、これからもホットな領域になることは間違いないです。ZKUniversity は現在 Cohort3 が開催されていますが、7 月から Cohort4 がスタートします。興味あって時間に余裕がある方はぜひ参加してみてください!

zku.one

ちなみに Cohort3 からメンターをやっていて質問対応や課題のレビュー、作問などをやっています。もし質問があれば、 @tomoaki_imai までご気軽に連絡ください!