Skip to main content

👋 ようこそ!

このプロジェクトでは、ゼロ知識証明(ZK Proof) を活用したサーバーレスなweb3アプリケーションを構築します!

具体的には、ユーザーが特定の 秘密のパスワード を知っていることを証明することで、NFTをミントできるアプリケーションを開発します。このプロセスの素晴らしい点は、ユーザーがパスワードそのものをサーバーやブロックチェーンに 一切公開する必要がない ことです。

🚀 プロジェクトの概要

このプロジェクトを通じて、あなたはフルスタックのweb3アプリケーション開発を体験します。
アプリケーションは主に3つのコンポーネントで構成されます。

  1. 回路(Circuit)コンポーネント 🧠:
    ゼロ知識証明のロジックを実装します。
    Circomを使用して、パスワードのハッシュ値に関する知識を証明する回路を作成します。

  2. バックエンド(Backend)コンポーネント 🔗:
    スマートコントラクトと、それをブロックチェーンにデプロイするためのインフラストラクチャを含みます。
    SolidityHardhatを用いて、NFTコントラクトと検証コントラクトを開発し、Base Sepoliaテストネットにデプロイします。

  3. フロントエンド(Frontend)コンポーネント 🖥️:
    ユーザーが操作するインタフェースです。
    Next.jsをベースに、Privyを使ったweb3ウォレット認証、Biconomyを使ったアカウント抽象化(ガスレス取引)を実装します。

ユーザーはフロントエンドから秘密のパスワードを入力すると、クライアント側でゼロ知識証明用のProofが生成されます。
このProofはブロックチェーン上のスマートコントラクトに送信され、検証が成功した場合にのみNFTがミントされる、という仕組みです。

☑️ 学習内容

このプロジェクトでは、以下の技術スタックを使用して開発を進めます。

  • ゼロ知識証明:
    • Circom:
      ZK回路(サーキット) 用のコンパイラーです。
    • snarkjs:
      ゼロ知識証明の生成と検証を行うためのライブラリです。
  • スマートコントラクト:
    • Solidity:
      イーサリアム互換のスマートコントラクトを記述するためのプログラミング言語です。
    • Hardhat:
      スマートコントラクトの開発、テスト、デプロイを効率化するフレームワークです。
    • OpenZeppelin:
      業界でも多くのプロジェクトで採用されているスマートコントラクト用のライブラリです。
  • ブロックチェーン:
    • Base Sepolia Testnet:
      Coinbaseが開発を主導する、イーサリアムのL2テストネットです。
  • アカウント抽象化 & 認証:
    • Biconomy:
      Account Abstraction 用のインフラおよびSDKを提供しているweb3特化のインフラプロバイダーです。
    • Privy:
      Eメールやソーシャルログインを使って、簡単にweb3ウォレットを生成・管理できる認証サービスです。
  • フロントエンド:
    • Next.js:
      ReactベースのモダンなWebアプリケーションフレームワークです。
    • TypeScript:
      JavaScriptに静的な型付けを追加し、コードの堅牢性を高めます。
    • viem:
      スマートコントラクトとの対話を簡単にするためのJavaScript/TypeScriptインタフェースです。
    • Tailwind CSS / Shadcn/UI:
      美しく使いやすいUIを効率的に構築するためのツールです。

🌟 完成品のイメージ

完成するアプリケーションのデモはこちらで確認できます。

ぜひ触ってみてください!

https://serverless-zk-nft-app.vercel.app/

🙋‍♂️ 質問する

ここまでの作業で何かわからないことがある場合は、Discordの#zkで質問をしてください。

ヘルプをするときのフローが円滑になるので、エラーレポートには下記の3点を記載してください ✨

  1. 質問が関連しているセクション番号とレッスン番号
  2. 何をしようとしていたか
  3. エラー文をコピー&ペースト
  4. エラー画面のスクリーンショット