詳しく説明する記事を書きました。 数年前のこのプロジェクトは、ゼロ知識証明技術との初めての真の出会いであり、その内部の機能を理解するのに役立ちました。この新しい記事では、Tornado Cashに基づくコンセプトを紹介します - 基本的にはzCashのような「組み込みブロックチェーン」です。 Tornado Cashの働き方 Tornado Cashはどのように機能しますか? 私はすでにこのトピックについて詳細な記事を書いたので、私はここで概要を提供します. あなたが技術的な深いダイビングに興味があるなら、私は私の以前の記事を読むことをお勧めします: The Magic of Zero-Knowledge Proofs Through the Source Code of Tornado Cash オリジナルタイトル JavaScript チュートリアル for Zero-Knowledge Proofs Using snarkjs and circom ゼロ知識の証拠を使用してEthereumブロックチェーン上で匿名投票システムを構築した方法 要するに、Tornado Cashは、ユーザーがTornado Cashスマート契約にETHまたはその他のトークンを置くことによって機能します。 それぞれのコミットメントには関わりがある。 スマートコントラクトは、メルクルツリーに約束を保存します。その後、ユーザーは、無効を明らかにすることによって、別のアドレスから資金を引き出すことができます。 commitment nullifier ユーザーだけが無効者を知っているため、誰も最初の預金と撤回を結びつけることはできません。しかし、スマート契約は、無効者が有効な約束に結びついていることを確認する必要があります。 それが示す: zero-knowledge proof このコミットメントは Merkle ツリーの一部である(ユーザーが実際に契約に納入したもの)、および ゼロリファイヤーは、その約束から生じた。 各リリーパーは1回のみ使用することができ、資金は1回以上撤回できないことを保証します。 Tornado Cashでは、コミットメントおよびノルリファイヤーのハッシュは次のとおり計算されます。 commitment_hash = HASH(nullifier, secret) nullifier_hash = HASH(nullifier) 暗号化ハッシュは一方的な関数であるため(ハッシュから原始入力を brute force なしに決定することはできない)、その関数をリンクすることは不可能である。 そして、The しかし、彼らの関係はゼロ知識の証拠で証明できる。 commitment_hash nullifier_hash このシステムの主な制限は、転送された金額が情報を漏らすことができるということです。例えば、あなたが 12.34 ETH を預け、その後正確に 12.34 ETH を撤回する場合、誰かが両方に関連していると合理的に推測することができます。 私が次のセクションで説明するコンセプトは、この制限に対処し、zCashがこの問題をどのように解決するかからインスピレーションを得ています。 固定名称問題の解決 固定預金金額の制限は、預金と撤回に加えて2つの追加方法を導入することによって克服することができます。 そして . split merge THE 機能は引き出しと同様に機能しますが、Ethereumアドレスを指定する代わりに、ユーザーは2つの新しい約束を提供します。Splitは、ユーザーが保存された金額を2つの部分に分割することを可能にします - そして重要なことは、これはブロックチェーンを観察する誰にも新しい金額を明らかにすることなく起こります。 split 更新されたシステムでは、コミットメントは次のように構成されています。 commitment_hash = HASH(amount, nullifier, secret) この構造は不可欠であるため、分割の際には、ユーザーは2つの新しい約束に正確に当初の約束の金額に相当する金額が含まれていることを証明しなければなりません。このメカニズムがTornado Cashで固定通貨の問題をどのように解決するかを見るのは簡単です。例えば、ユーザーは100ETHのような任意の金額を預け、それをパーツに分割(例えば、60ETHと40ETH)し、その後異なるアドレスにそれらを撤回することができます。 また、すぐにお金を引く必要はありません. ユーザーは効果的に 仮想財布として機能し、この機能は、 二つの保管された約束(それらの無効化者を介して参照)を一つの新しい約束に結合することを可能にする操作。 store value in the smart contract itself merge 合併を実行するには、ユーザーは、2 つの入力約束の合計額が新しい約束の合計額に匹敵することを証明しなければなりません。 これは一種の すべてのユーザがプライベートバランスを保有し、自由に他の人に資金を送ることができる場所で、誰かがシステムを離れ、このプライベートレイヤーの外に資産を費やす必要がある場合にのみ引退が必要です。 embedded ledger プライバシー保護レイヤー on Ethereum このプライバシー層が実践でどのように機能するかを見るための例を参照しましょう。 Alice は、100 ETH を約束とともに預け込むことにより、スマート コントラクトで 100 ETH プールを作成します。 ボブは同じことをし、自分自身のコミットメントで10ETHプールを作成します。 Alice は 10 ETH を Bob に送りたいと考えています. 彼女は split 関数を使用して、彼女の nulllifier を消費し、元の 100 ETH を 2 つの新しい約束に分割します: 1 つは 10 ETH と 1 つは 90 ETH です. 現在、 Alice は 2 つの nullifiers を保持しています. 1 つは 10 ETH を表し、もう 1 つは 90 ETH を表しています. Alice は、Bob の公開鍵を使用して 10 ETH 無効化を暗号化し、それをブロックチェーンに書き込む。 ボブは彼のプライベートキーを使ってメッセージを解読し、ゼロリファイヤーを取得します。彼は今、10 ETHを引き出したり、既存のバランスを結合したりすることができます。 ボブは、システム内で資金を保持することを選択しますので、彼は合併操作を使用します. 彼は自分の10ETHの約束からゼルリファイヤーを提供し、アリスから受け取ったものから新しい約束を作成します 20ETH。 取引後: アリスには90ETHの残高がある。 ボブは現在、プライバシー層の20ETHをコントロールしている。 nullifiers と 約束 は 公開 に 見える 情報 を 持ち込ま ず,ユーザー 間 の メッセージ が 暗号化 さ れ て い ます ため,これら すべて の 取引 が 発生 し ます。 . completely anonymously ユーザーは、金額やアイデンティティを明らかにせずにシステム内で価値を自由に転送できるので、しばしば撤回する必要はありません。 ひとつの重要な違い: . Layer 2 blockchain everything happens on-chain Conclusion 結論 2つの簡単な操作を導入することで、 そして オリジナルのTornado Cashコンセプトを大幅に強化し、完全なコンセプトに変えることができます。 Ethereum では、固定定数に限定された伝統的なミキサーとは異なり、このアップグレードされたモデルは ユーザーが柔軟かつ匿名に分割、合併、および価値を転送できるようにします。 split merge privacy-preserving transaction layer arbitrary amounts システムの核心は、 で、 そして、 預金と引き出しの間のリンクを確保するため、その金額を直接約束に組み込むことで、ユーザーは、分割や合併などの価値を維持する操作の正確性を証明することができ、実際の金額や参加者を明らかにすることなく。 zero-knowledge proofs commitments nullifiers 結果は一種の 完全に稼働する ユーザーは、別々のレイヤー2を必要とせずに、資金をプライベートに保管し、暗号化されたメッセージを使用して資産を互いに送信し、公共のEthereumレイヤーと対話する必要があるときにのみ撤回することができます。 」とThe 匿名でプログラミング可能な価値転送のための強力なフレームワークを作成します。 embedded blockchain on-chain privacy features of zCash smart contract capabilities of Ethereum 何よりも、このモデルは互換性があります。 より広範なEthereumエコシステムにおけるプライバシー維持アプリケーションのための実用的でスケーラブルな基盤となっています。 any EVM-based blockchain