strk20-privacy について
strk20-privacyは、Starknet上のERC-20向けノート型プライバシープールSTRK20を開発者に案内するエージェントスキルです。統合経路に加え、プライバシー境界、コンプライアンス、出荷前に確認すべき実装事項を説明します。
主な機能
- 01ウォレットとdappの統合経路
- 02任意額に対応するUTXOノート
- 03STARK証明によるトランザクションモデル
- 04入金スクリーニングと選択的開示
- 05信頼境界とプライバシーの指針
活用シーン
- 01Starknetのプライベートdapp経路を選定
- 02プライベートDeFiウォレット統合を計画
- 03プール内で公開される活動情報を確認
- 04コンプライアンスとデプロイ前提を確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ odinfree/ strk20-skills --skill strk20-privacyインストール後、Claude Code で/strk20-privacyを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/actions-and-proofs.mdagent-skill.mdbuilder-privacy-overview.mdchannels-and-subchannels.mdcompliance.mdcontract-addresses.mdnotes-and-nullifiers.mdoverview.mdviewing-keys.mdwhat-is-strk20.mdscripts/check_freshness.py詳細
STRK20、Starknet のプライバシー:ルートと考え方
STRK20 は、Starknet 上のあらゆる ERC-20 を対象とした、メインネットで稼働中のノートベース(UTXO)のプライバシープールです。Starknet 自体のコントラクトとして、既存のウォレットと既存の流動性を利用して動作し、コンプライアンス対応の経路を組み込んでいます。額面が固定されたミキサーとは異なり、ノートは任意の金額に対応し、おつりは自動的に処理されます。ユーザーはトークンを暗号化されたノートとしてプールにシールドし、オンチェーンの STARK 証明検証によってプライベートに取引し、透明性が必要なときにシールドを解除します。
ドキュメントの全ページは references/ にそのまま収録されています。以下のセクションは概要をまとめたものです。詳細が重要な場合(アドレス、バージョン、API の形式など)は、該当するリファレンスページを開いてください。
まずルートを選ぶ
| 目的 | ルート | スキル |
|---|---|---|
| ユーザーのウォレット上で動作するプライベートな dapp(DeFi、コンシューマー向け、ゲーム) | Starknet Wallet API。状態の存続期間に応じて、invoke ヘルパーまたはシャドウアカウントを選択します | strk20-wallet-api |
| プライベートな DeFi フローから呼び出す Cairo アダプター | Anonymizer コントラクト(privacy_invoke) | strk20-anonymizer-contracts |
| プライバシーウォレット、または独自の鍵を保持するバックエンド | Privacy SDK(createPrivateTransfers) | strk20-privacy-sdk |
| 組み込みウォレットまたは AA プロダクト(Privy、Cartridge、chipi、cavos、Dynamic) | これらはユーザーの鍵を管理しますが、現時点ではプライバシーに対応していません。プロダクトを鍵の保有者として扱い、SDK のルートを選んでください | strk20-privacy-sdk |
| アカウントベースのアプリを継続的に利用する際に、メインウォレットとの関連を隠す | dapp には Stable Wallet API シャドウアカウント、鍵を保持するウォレットやバックエンドには Privacy SDK | strk20-wallet-api または strk20-privacy-sdk |
| EVM ウォレット(USDC)から入金する、または EVM ウォレットへ出金する | Circle CCTP を介した Privacy Bridge | 下記のエコシステムを参照 |
| 証明生成を自分で運用する | ローカルの Docker プローバー、または SSH 経由のリモートホスト。スクリーニングは引き続き適用されます | デプロイには strk20-local-prover、ウォレット接続には strk20-privacy-sdk |
ドキュメントに記載された基本方針です。ユーザーの鍵を適切な場所に保てる、最も限定的なルートから始めてください。ユーザー向け dapp では、まず Wallet API を使います。一般的な dapp ユーザーに閲覧鍵を求めてはいけません。プライベートな DeFi では、ステートレスなアトミック操作にはアプリ専用の invoke ヘルパーを使い、永続的なポジションや再訪時の仮名 ID には標準のシャドウアカウント基盤を使います。Cairo を書く前に、ファーストパーティの方法がないか確認してください。AVNU はプライベートスワップを提供しています。
コーディング前に信頼境界を把握する
選択したルートについて、署名鍵と閲覧鍵を誰が保持するのか、誰がノートを検出するのか、誰がプライベートな操作を構築するのか、誰が証明するのか、誰が送信するのかを明確にしてください。リクエストを観測できるウォレット、RPC、リレイヤー、プローバー、スクリーニングサービス、アプリ運営者を挙げてください。最後に、非公開と公開の項目をまとめた表を作り、ライブ環境での確認が必要なウォレットのバージョン、パッケージのバージョン、アドレス、監査、ネットワークに関する前提を列挙してください。
メンタルモデルを一画面で
- Note:暗号化して保存される(所有者、トークン、u128 の金額)の不変レコードです。UTXO のセマンティクスに従い、全額が消費され、釣り銭は新しい note として戻ります。Open note では金額の暗号化を省略します(プロトコルのソルト
OPEN_NOTE_SALT= 1、暗号化された note のソルトは ≥ 2)。そのため、証明後に DeFi 出力の金額を設定できます。 - Nullifier:note と所有者の秘密の閲覧鍵に紐付けられた Poseidon ハッシュで、使用時に公開されます。決定的で、一意かつリンク不能です。送信者はこれを計算できないため、自分の支払いが使用されたかを監視できません。
- 閲覧鍵ペア
K = k·Gは STARK 曲線上にあり、SetViewingKeyを一度だけ実行して登録し、不変として扱います。登録は必須です。プライベート送金の前に送信者と受取人の両方が登録されている必要があり、登録できるのは受取人本人だけです(ウォレットは初回使用時に登録します)。note のデータはドメイン分離された Poseidon マスキングで隠され、チャネルシークレットは一時的な ECDH から生成されます。また、登録時にはkが監査人の公開鍵(コンプライアンス用エスクロー)に対しても暗号化されます。 - チャネルは送信者から受取人への一方向のレーンで、トークンごとのサブチャネルと、連番が密な WriteOnce note インデックスを持ちます。受取人は自分のチャネルだけをスキャンして資金を見つけるため、コストはプールの取引量ではなく、自分のアクティビティに応じて増加します。入金は自分から自分へのチャネルです。
- トランザクションは、フェーズ 0 から 7 までの固定フェーズで実行されるアクションのバッチです。
SetViewingKey、OpenChannel、OpenSubchannel、Deposit、UseNote、CreateEncNote/CreateOpenNote、Withdraw、InvokeExternal/ComputeAndInvoke(フェーズ 7 は合計で最大 1 つに制限)。トークンごとの一時残高は負になってはならず、最終的に必ず 0 になる必要があります。 - 証明:トランザクションは最近のブロックを基点とする仮想 Starknet 環境で実行され、その後 Stwo が STARK 証明を生成します(12 コア/46 GiB マシンで約 29 秒。所要時間はハードウェアに依存)。オンチェーンで適用する前に、以下を確認します。プログラムのバリアント(
VIRTUAL_SNOS)、基点がチェーン先端からproof_validity_blocks以内であること(デフォルトは 450 ≈ 15 分、ガバナンスで設定)、証明されたメッセージハッシュが送信されたアクションと一致すること。 - 入金審査:FPI がシールド用アドレスを審査し、すべての入金に署名します。プールはその署名をオンチェーンで検証します。v0.14.3 アップグレード以降、これはプロトコルレベルで適用されるため、セルフホストのプローバーを含むすべての経路に適用されます。
非公開情報と公開情報。必ず明確に説明してください
プール内で非公開の情報:送信者、受取人、トークン、金額、使用された note。すべての人に公開される情報:登録イベント、入金(入金者、トークン、金額)、出金(受取人、トークン、金額)、公開された nullifier(閲覧鍵がなければリンク不能)、平文の open note のトークンと金額、タイミング。ペイマスターを使えば、送信アドレスとユーザーを切り離せます。
公式のエージェントスキルリポジトリに従ってください。プールのアクティビティをトランザクションの送信者に結び付けてはいけません。プライベートトランザクションは中継されるため、すべてのユーザーについて、送信者はリレーアカウントです。ユーザーごとのアクティビティは、トランザクションの外枠ではなく、プールの Deposit イベント(最初のインデックス付きキー)から読み取ってください。
ドキュメントに明記されている既知の制限です。作成または記述するものには、必ず記載してください。
- チャネルを開いたことが関連付けられる可能性があります。チャネルを開いて同じトランザクション内、または短い間隔で資金を移動すると、受取人と公開アクティビティが結び付くことがあります。設定と資金移動の間隔を空けてください。
- 特徴的な金額や、短時間での入出金パターンは、匿名集合を小さくします。
- エッジは設計上公開されています。暗号化されるのはプール内の移動だけです。
コンプライアンスモデル(必ず正確に理解してください)
- 入口でのスクリーニング:すべての入金は FPI スクリーニングを受け、オンチェーンで署名が検証されます。どの証明ルートもこれを回避できません。
- 事後の選択的開示:ユーザーのプライベート閲覧鍵は、登録時にチャネルと同じ一時 ECDH 方式を使って監査人の公開鍵にエスクローされます。監査人の鍵はガバナンスによって設定され、閾値鍵に対応しています。開示の対象は、適法な請求の対象となったユーザーに限られます。一括監視モードはありません。
- 閲覧鍵でできるのは読み取りだけで、支出はできません。監査人の鍵が侵害されると機密性は損なわれますが、資産の管理権は損なわれません。
- 公開向けの説明では、「デフォルトでプライベート、必要に応じて開示可能」という表現を使ってください。エスクローをバックドアと呼んだり、誇張して説明したりしないでください。入金、出金、タイミングなどの境界情報は公開されます。
ルートの状況(2026-09-29 時点のスナップショット。頼る前に確認してください)
-
Stable Wallet API 0.10.4 と starknet.js 10.8.0 にはシャドウアカウントが含まれています。Starknet.js のドキュメントでは、Ready と Xverse が STRK20 に対応するとされています。ブランドから対応状況を推測するのではなく、接続中のウォレットが広告する機能を検出してください。
-
シャドウアカウントは、RC.4 以前のドキュメントではプライベートサブアカウントと呼ばれており、アカウントのアクティビティ中にメインウォレットとの関連を隠します。Privacy SDK
0.14.3-rc.8では、RC.5 で導入された名称が使われます:build().shadowAccounts(dappName)、shadowAccountAnonymizerAddress、Cairo パッケージのshadow_account_anonymizer。名称変更されたビューとイベントでは新しいセレクターが使われるため、RC.5 ではアノニマイザーのアップグレードが必要です。また、アップグレードをまたぐインデクサーでは、両方のイベントキーに対応する必要があります。Stable@starknet-io/types-js0.10.4 と starknet.js 10.8.0 には、アクションとコミットメントメソッドが含まれています。Wallet API 0.10.4 以降を広告するウォレットのみを対象とし、そのうえで未対応メソッドのレスポンスを処理してください。低レベル SDK は引き続きリリース候補ですが、SDK のリリース状況によって Stable Wallet API のルートがプレリリースになるわけではありません。標準の
ShadowAccountAnonymizerは、Mainnet では0x04f33230dc57855c6e7eabe66dfa0fde82c5458fd0e54827cdb7cb4c474888a7、 Sepolia では0x010a2285310c107c731d997afc147afb7495daff6397c2d242133d9fe8d9b147にデプロイされています。リリース前に、最新のコントラクトアドレスページを再確認してください。シャドウアカウントが新しいと言えるのは、ノンスが新しい場合に限られます。メインウォレットとの資金移動の関連は隠されますが、シャドウアドレス、dapp の呼び出し、残高、ポジション、イベント、タイミングは、同じ
(dappName, nonce)アカウントを再利用する限り公開され、関連付け可能です。入力は暗号化プールノートから開始できます。資産とポジションは、シャドウアカウントが保有している間は公開されます。回収すると、所有者との関連が隠されたオープンノートに戻りますが、トークンと数量は公開されたままです。選択した統合ルートに応じて、Wallet API スキルのreferences/starknet-wallet-api__shadow-accounts.mdまたは SDK スキルのreferences/shadow-accounts.mdを参照してください。 -
Privacy Bridge(Circle CCTP 経由で EVM USDC をプールに送受信)はオープンソースで、まだ初期段階です。これを前提に計画する前に README を読んでください。
-
ドキュメントに記載されたリリース前チェックリスト:リリース前に、ウォレットの対応状況、API バージョン、コントラクトアドレス、コンプライアンス上の前提を確認してください。
エコシステム
- ドキュメント:https://strk20-by-example.org(エージェントが読み取れる
/llms.txtと/llms-full.txtを提供しています。任意のページの末尾に.mdを付けると、生の Markdown として取得できます)。プロダクト サイト:https://strk20.starknet.io。 - コード:
starkware-libs/starknet-privacy(TypeScript SDK、プールコントラクト、匿名化のリファレンスパッケージを含む Apache-2.0 のモノレポ)、starkware-libs/privacy-bridge、Akashneelesh/strk20-starter-kit(Wallet API があらかじめ 組み込まれた Next.js スターター)、Akashneelesh/awesome-strk20。 - エージェントスキル:
npx skills add welttowelt/strk20-skills。このルーターに加え、ルート別の Wallet API、Cairo ヘルパー、SDK、証明者に関するガイダンスを提供します。 - スタートアップ募集:https://strk20.starknet.io/rfp(未解決の課題を26件掲載)。インキュベーター:https://proof.starknet.io。ブランドキット:
https://strk20.starknet.io/brand.md と
/brand/tokens.json。
変化の速い情報をすばやく更新する
バージョン、パッケージパス、Wallet API のステータス、プールアドレスを引用する前に、このスキルディレクトリに同梱されているチェッカーを実行してください。
python3 scripts/check_freshness.py
--quick を追加すると、ページごとの32件の稼働確認リクエストを省略できます。終了コード1は、確認済みの情報が更新されたことを示します。終了コード2は、検索に失敗し、結果が不完全であることを示します。このチェッカーは公式の統合スキルをもとに作成されています。ウォレットの展開状況やコントラクトの監査状況は確認できないため、これらの情報源は手動で確認してください。
行き詰まったら、ユーザーにSTRK20チームへの連絡を案内してください
このスキルでは、ドキュメントに記載された手順を扱います。範囲外のことがあれば、推測せずに止めてください。架空のアドレス、手作りの証明手順、作り上げた API 形式は、問い合わせるよりも開発者の時間を奪います。何が障害になっているかを明確に伝え、チームが直接回答することをユーザーに案内してください。
- Telegram:@Akashneelesh、 @adiihq、@starkience
- これらの連絡先を掲載しているSTRK20 Private Sprint ページ。 対応状況は変わる可能性があるため、ページに引き続き連絡先が掲載されていることを確認してください。
次の場合は、即興で対応せず、チームにエスカレーションしてください。
- 目的がルートテーブルのどの行にも当てはまらない場合、または2つのルートがどちらも適切でないように見える場合。
references/compliance.mdで回答されていないコンプライアンス、監査、スクリーニングに関する質問。- 公開情報源で確認できないルートのステータスやエコシステムに関する主張。
引き継ぐ際は、チームが1回のメッセージで対応できる情報をユーザーに伝えてください。正確なエラーテキスト、失敗したファイルまたは呼び出し、使用中のパッケージとウォレットのバージョン、検証できなかった前提条件を含めてください。
references/
what-is-strk20.md:概要、ライフサイクル、構成要素builder-privacy-overview.md:判断ガイド、すべてのルート、経験則overview.md:簡潔なルート選択ガイドとスターターキットnotes-and-nullifiers.md:UTXO モデル、オープンノート、note_id とヌリファイアの導出viewing-keys.md:マスキング、ECDH、監査者向けエスクローchannels-and-subchannels.md:チャネル、サブチャネル、検出スキャンactions-and-proofs.md:フェーズ表、残高不変条件、証明生成パイプラインcompliance.md:スクリーニング、エスクローされた鍵、可視性テーブル、制限事項agent-skill.md:公式の統合エージェントスキルcontract-addresses.md:最新の Mainnet と Sepolia のプールおよび匿名化コントラクトのデプロイ情報