Communitygithub.com

dmustapha/confidential-skill

AIコーディングエージェントがZama FHEVMの機密スマートコントラクトを正しく記述するための、プロダクション対応のSKILL.md — 20のアンチパターン、3つのテンプレート、Sepoliaライブデモを搭載。

confidential-skill とは?

このスキルは、AIエージェント(Claude Code、Cursor、Codexなど)がZama FHEVM(完全準同型暗号化仮想マシン)上で動作する機密スマートコントラクトを作成する際に、正しいコード生成とアンチパターンの回避を支援します。約20の一般的なアンチパターン(例えば、暗号化状態の不適切な取り扱いや、暗号演算での誤ったデータ型の使用など)を具体的に示し、安全で効率的なコントラクト開発をガイドします。また、3つの実践的なテンプレート(機密トークン、機密オークション、機密投票)を提供し、Sepoliaテストネット上でのライブデモにより実際の動作を確認できます。このスキルは、FHEVMの特有の制約(例えば、暗号化された値の比較は`FHE.lt()`や`FHE.eq()`を使用する必要があるなど)をエージェントが理解し、脆弱性のないコードを生成することを目的としています。開発者はこのスキルを用いて、AIエージェントによるコントラクト生成の品質を大幅に向上させることができます。

対応✓Claude Code~Codex CLI~Cursor
npx skills add dmustapha/confidential-skill

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

confidential-skill は何をしますか?

プロダクション対応のSKILL.md — AIコーディングエージェントがZama FHEVMの機密スマートコントラクトを正しく記述できるようにします。20のアンチパターン、3つのテンプレート、Sepoliaライブデモを搭載。

概要

このスキルは、AIエージェント(Claude Code、Cursor、Codexなど)がZamaのFHEVM(完全準同型暗号化仮想マシン)向けの機密スマートコントラクトを作成するためのガイドです。FHEVMはスマートコントラクト内で暗号化データを直接操作できるようにしますが、特有のルールと制約があります。このドキュメントは、AIエージェントがこれらのルールに従い、脆弱性や非効率なコードを生成しないようにすることを目的としています。

アンチパターン(20件)

以下は、FHEVMコントラクト開発でよく見られる間違いとその回避方法です。

  1. 暗号化状態の直接公開: 暗号化された変数をpublicで宣言しないでください。代わりにinternalを使用し、必要に応じてview関数で値を取得してください。
  2. 条件分岐での暗号値の誤用: if (encryptedValue > 10)のような直接比較はできません。FHE.lt(encryptedValue, 10)を使用してください。
  3. euintXX型とuintXX型の混同: 暗号化された値は常にeuint8、euint16、euint32、euint64のいずれかで表現し、通常のuintにキャストするにはFHE.decrypt()が必要です。
  4. FHEライブラリのインポート漏れ: import "@zama-ai/fhevm/contracts/FHE.sol";を必ず追加してください。
  5. TFHE(旧ライブラリ)の使用: 新しいFHEライブラリを使用してください。TFHEは非推奨です。
  6. revert内での暗号値の使用: エラーメッセージに暗号化データを含めないでください。復号化後にのみ使用可能です。
  7. 暗号演算後のスロットル欠如: 複数の暗号演算を行う場合は、ガス消費を考慮してFHE.req()やFHE.isInitialized()でリソースを確認してください。
  8. FHE.asEuintXX()の誤った使用: 定数を暗号化する際はFHE.asEuintXX(value)を使用しますが、valueが範囲内であることを確認してください。
  9. ストレージ変数の過剰な暗号化: 不要なデータを暗号化するとガスコストが増加します。機密性が必要なもののみ暗号化してください。
  10. イベントでの暗号データ出力: イベントに暗号化データを含めると機密性が失われます。復号化後の値のみを出力してください。
  11. FHE.sub()のアンダーフロー: 暗号化減算はアンダーフローを引き起こす可能性があります。事前にFHE.lt()で値を確認してください。
  12. FHE.add()のオーバーフロー: 暗号化加算もオーバーフローする可能性があります。FHE.lt(result, originalValue)などで監視してください。
  13. FHE.mul()のオーバーフロー: 乗算も同様にオーバーフローに注意してください。
  14. FHE.div()のゼロ除算: FHE.ne(divisor, FHE.asEuintXX(0))で事前確認が必要です。
  15. FHE.rand()の誤用: FHE.rand()は暗号化乱数を生成しますが、再現性がないため注意が必要です。
  16. FHE.cmux()の不適切な使用: 条件分岐を模倣するFHE.cmux(condition, valueIfTrue, valueIfFalse)では、条件が暗号化されていることを確認してください。
  17. onlyOwner修飾子での暗号化アドレス: 所有者アドレスを暗号化する必要はありません。通常のaddress型で十分です。
  18. payable関数内での暗号化金額: msg.valueを暗号化しないでください。Etherの送金は常に公開されます。
  19. delegatecallの誤用: delegatecallはFHEVMでは予期しない動作を引き起こす可能性があります。可能な限り避けてください。
  20. テストネットでのFHE.decrypt()の過信: テストネットでは復号化が即座に行われることがありますが、メインネットでは複数ブロックかかる可能性があります。

テンプレート(3件)

機密トークン

  • 場所: templates/confidential-token/
  • 説明: 暗号化された残高を持つERC20ライクなトークン。
  • 使用法: FHE.balancesマッピングを使用して、トークン残高を暗号化状態で管理します。

機密オークション

  • 場所: templates/confidential-auction/
  • 説明: 入札額を暗号化して保存するオークションコントラクト。
  • 使用法: FHE.auctionBidsマッピングで入札を管理し、公開は復号化後にのみ行います。

機密投票

  • 場所: templates/confidential-voting/
  • 説明: 投票内容を暗号化する投票システム。
  • 使用法: 各投票はeuint8で保存され、終了後に集計されます。

ライブデモ(Sepolia)

  • デプロイ済みコントラクト: Sepoliaテストネット上で動作中。
  • 確認方法: npx hardhat run scripts/interact.js --network sepolia を実行。
  • デモ機能: 機密トークンの発行、送金、残高確認が可能。

サポート

  • プラットフォーム: Claude Code、Cursor、Codex、その他SKILL.md互換エージェント。
  • 問題報告: GitHub Issuesにて受け付けています。

関連スキル