💡

Mina Protocol上に zkTLS(Reclaim Protocol)を使ったアプリケーションをデプロイする

に公開

この記事は、ハッカソンプラットフォーム AKINDO 上で開催されている Mina Protocol の WaveHack 向けに執筆したものです。
私が追っている zkTLS プロトコルである Reclaim Protocol が Mina Protocol にも対応しているということで、今回は実際にコントラクトをデプロイしてみようと思います。

zkTLS とは

zkTLS については、以下の記事で詳しく解説しています。
https://zenn.dev/suhara_ponta/articles/68591f49ebb73e

Mina Protocol が 2025年に取り組む zkTLS などのユースケース

Mina Protocol が公式ブログで 2025年における zkTLS を含む新しいユースケースについて言及している記事があります。興味のある方はぜひ以下をご覧ください。
https://minaprotocol.com/blog/looking-towards-2025

これらの新しいユースケースには、Minaの標準的なブロックチェーンアプリケーションサポートが含まれます。トークンブリッジ、ステートブリッジ、モバイルサポート、複数のDEX(分散型取引所)などです。さらに、zkVot や Punkpoll によるプライベート投票、Mirae による私的な実世界資産(RWA)の所有権証明、zkUSD などのプライベート金融、zkPassport、zkKYC、zkTLS、zkEmail など、多くのプライベートデータソースを含む新規の機能を持つ zk(ゼロ知識)対応アプリケーションも含まれます。これらのプロジェクトのほとんどは近々立ち上げが予定されており、以下は一部のプロジェクトですが、2025年初頭、多くは1月に立ち上げが予定されています。

このように、Mina Protocol では zkTLS を含む多様なユースケースが活発に模索されている状況です。今回は、Reclaim Protocol が公開しているチュートリアルを参考に Mina 上での zkTLS(Reclaim Protocol)のコントラクトデプロイ を試してみます。


1. チュートリアルを参考にする

今回のデプロイ作業は、以下の Reclaim Protocol 公式ドキュメントを参考に進めます。
Reclaim Protocol ドキュメント: Mina Quickstart

2. Auro Wallet の準備

Mina Protocol のアプリケーションを扱う際に一般的なのが Auro Wallet です。
Auro Wallet

Auro Wallet をダウンロード・インストールし、アカウントを作成します。

3. Faucet でトークンを取得

デプロイやトランザクションの送信には Mina トークンが必要です。
Mina Faucet からテスト用トークンを取得しましょう。

4. コントラクトのデプロイ

4.1 公式コントラクトについて

すでに Reclaim Protocol 公式のコントラクト が Devnet にデプロイされています。これを利用すればプローフ(Proof)の検証が可能です。
ただし、今回は学習目的として 自分でコントラクトをデプロイ して理解を深めたいと思います。

4.2 検証プロセスの概要

Reclaim Protocol が提供するスマートコントラクトの Verification プロセスは、Proof を検証するときに以下のステップを実行します。

  1. 署名の検証
    プルーフに有効な署名が含まれていることを確認する。
  2. ハッシュ比較
    提供された ClaimInfo(クレーム情報)をハッシュし、クレームに含まれる identifierField と比較して整合性を確保する。
  3. 証人の検証
    署名済みの証人(witness)を、チェーン上に保存されている Merkle ルートに対して正しく検証する。
  4. 重複防止
    証人間に重複する署名が存在しないことを確認する。

5. レポジトリのクローンと立ち上げ

5.1 Mina SDK のレポジトリをクローン

まずは、Reclaim Protocol チームが GitLab 上に公開している Mina 対応の SDK レポジトリをクローンします。

git clone https://gitlab.reclaimprotocol.org/integrations/onchain/mina-sdk.git
cd mina-sdk

5.2 Mina zkApp CLI のインストール

npm install -g zkapp-cli

5.3 Mina zkApp の初期化設定

zk config

実行すると publicKeyprivateKey が生成されるので、表示された publicKey に Faucet からトークンを再度送金(Fund)しておきます。

5.4 zkApp のデプロイ

zk deploy

コントラクトが Devnet にデプロイできました!!
https://minascan.io/devnet/tx/5JujbtYHUxn3n7RFZtCeCp8rCAFE7xbLKhVneTZsVFW4exQQcZk8?type=zk-tx

6. フロントエンドの立ち上げ

続いて、Reclaim Protocol のコントラクトに接続するフロントエンドを動かしてみましょう。

6.1 Reclaim Example のクローン

git clone https://gitlab.reclaimprotocol.org/starterpacks/reclaim-mina-example.git

クローンしたディレクトリに移動し、先ほどデプロイしたコントラクトアドレス に差し替えます。

// app/page.tsx
const ZKAPP_ADDRESS = "REPLACE_WITH_YOUR_CONTRACT_ADDRESS";

6.2 フロントエンドの起動

npm i
npm run dev

ブラウザで http://localhost:3000(ポート番号はプロジェクトにより異なります)にアクセスすると、フロントエンドが表示されます。

7. 動作確認

  1. ウォレットを接続
    Auro Wallet などを使ってフロントエンドに接続します。

  2. QRコードを表示
    「Reclaim Protocol」の証明作成画面がモバイルなどで開けるよう、QRコードが提示されるので、スマートフォンなどで読み込みましょう。

  3. Verify Proof ボタンを押す
    証明が作成できたら「Verify Proof」ボタンで検証を実行します。

https://minascan.io/devnet/tx/5JtY7q161J5an6vB7rcgrXUrkar4NAb4MshMCwMgJNwswRsKZehb?type=zk-tx

7.1 エラーが出る場合

チュートリアルどおりに進めても、先ほどデプロイしたコントラクトアドレスだとエラーになる場合があります。原因としては、公式コントラクトの検証ロジックやフロントエンド側の実装が完全には一致していないこと、あるいは Devnet の環境が最新状態ではないことなど、複数の要因が考えられます。
必要に応じて、Reclaim Protocol の公式 Discord や Mina コミュニティで質問してみましょう。

まとめ

本記事では、Mina Protocol 上に Reclaim Protocol(zkTLS)を使ったコントラクトをデプロイ する流れを紹介しました。Mina Protocol はブロックチェーン自体が zkSNARK を活用しており、非常に軽量かつプライバシーに配慮した 仕組みを提供しています。
zkTLS(Reclaim Protocol)も同様にゼロ知識証明を活用しており、セキュアかつプライバシー保護に優れた通信・検証が可能となります。
今後さらに Mina Protocol のエコシステムが充実することで、より多くの zk アプリケーションが登場することが期待できます。ぜひ皆さんも興味があれば、実際に触ってみてください。

Discussion