AIサマリー
もっと見る
わずか30秒で記事の内容を把握し、市場の反応を測ることができます。
Merkleツリーは、データの検証と同期のためのデータ構造として、コンピューターサイエンスのアプリケーションに使用されます。Merkleツリーは、ビットコインやその他の仮想通貨のブロックチェーンデータをより安全かつ効率的に暗号化するために使用されます。
仮想通貨では、Merkleツリーデータベースを使用してブロックのデータを安全に分割し、損失、破損、変更がないことを確認します。このデータ管理方法により、テラバイトサイズのブロックチェーン全体をダウンロードすることなく、特定の取引を検証できます。これは、ブロックチェーンを運用する信頼性が高く、安全で、暗号方式です。
中央集権型取引所(CEX)の大手であるFTXが倒れた結果、多くのCEXは、資金の安全性を確保するため、準備金証明(PoR)の形式としてMerkle Treeを構築・実装しました。この記事では、Merkleツリーとは何か、ブロックチェーンにおけるその役割、Merkleツリーを使用して資金を検証する方法について説明します。
パブリックキー暗号の研究で有名なコンピューター科学者のラルフ・メルクルは、1987年のペーパー「従来の暗号化機能」に基づくデジタル署名でメルクルツリーを提案しました。暗号ハッシュもメルクルによって発明されました。
Merkleツリーは、ハッシュベースの数学的データ構造で、ブロック内のすべての取引の概要をまとめます。分散型方式でデータの精度をすばやく確認する方法です。Merkleツリーは、その機能によって、ブロックチェーンデータを暗号化するために、より効果的かつ安全に利用されています。
Merkleツリーは、情報の共有と独立した検証が必要なため、ピアツーピア(P2P)ネットワークでよく使用されます。Merkleの木とそのしくみについて詳しく見ていきましょう。
Merkleツリーは、ハッシュツリーとも呼ばれるバイナリツリー構造を持ち、下行の取引データのハッシュは「」と呼ばれ、中間ハッシュは「非リーフノード」と呼ばれ、上部のハッシュは「」と呼ばれています。ハッシュツリーの実装の大部分はバイナリですが(各ノードには2つの子ノードがあります)、より多くの子ノードを持つこともできます。
Merkleツリーの構造を見ると、すべての取引はペアでグループ化されます。各ペアには計算ハッシュがあり、親ノードに直接保存されます。また、これらのノードはペアにグループ化され、ハッシュは次のレベル上に保存されます。このプロセスは、メルクルツリーの根源に達するまで続きます。
各ノードを見てみましょう。
ブロック内の各仮想通貨取引のハッシュで、取引ID(TXID)とも呼ばれます。ブロックエクスプローラーでトランザクションを検索すると、トランザクションハッシュが表示されます。
次に、リーフノードの上に非リーフノードのレイヤーを作成するために、これらのリーフノードはペアでハッシュされます。非リーフノードと呼ばれるのは、リーフノードとは対照的に、単にリーフノードを表す2つのリーフノードのハッシュを保存し、トランザクションID(またはハッシュ)を含まないからです。その結果、リーフノードの上の非リーフノードレイヤーには、リーフノードレイヤーの半分のハッシュ(またはノード)があります。ツリーが狭くなるにつれて、これらの非リーフノードレイヤーはペアでハッシュされ続け、レイヤーごとに半分のノード数になります。最終的な非リーフノード層には、2つのノードが存在します。これにより、Merkleのルートが作成され、Merkleツリーの最後のハッシュの場所になります。
ビットコインでは、すべての取引のハッシュが1つのハッシュに統合され、ブロックヘッダーに保存されます。ルートハッシュとも呼ばれるメルクルのルートは、この特定のハッシュです。Merkleツリーのベースにあるリーフノード(トランザクションID/ハッシュ)は、このMerkleルートを使用して検証できます。Merkleのルートは、仮想通貨に使用する場合、データブロックに変化がなく、損傷がなく、全体的であることを確認します。
Merkleツリーはバイナリーです。つまり、ツリーが正しく構築されるには、異なるリーフノードの合計数も必要となります。異常な数のリーフノードが存在する場合、前のハッシュが複製され、偶数のノードが提供されます。
Merkleツリーは基本的に、大量のデータをかなり小さなチャンクに分割するように設計されているため、すべての取引を迅速に検証できます。このツリーは、特定の取引セットの小さな指紋を作成することで、すべての取引を要約します。これにより、ブロック内の取引の可用性を簡単に確認できます。
Merkleツリーは、1つのハッシュだけが残るまで異なるノードペアをハッシュすることで形成されます。これはMerkleルートと呼ばれます。これらのツリーは下から上に構築され、各取引はハッシュで構成されています。すべてのリーフノードは、データの単一のハッシュです。非リーフノードの場合、これらは以前のハッシュのハッシュです。
たとえば、Merkleツリーは、D0, D1, D2D3という4つのトランザクションで構成されています。各取引は、ハッシュがリーフノードに直接保存される前にハッシュされます。その場合、ハッシュN0, N1, N2N3が作成されます。リーフノードの連続ペアは、ハッシュN0とハッシュN1のハッシュを介して親ノードに要約され、ハッシュN4になります。ハッシュN2とハッシュN3が一緒にハッシュされると、ハッシュN5が作成されます。これらのハッシュ、N4とN5は、メルクルルートを作成するために再度ハッシュされます。
このプロセスは、広範なデータセットで使用できます。Merkleルートは、特定の取引に存在するデータをまとめる役割を果たし、そのすべてがブロックヘッダーに直接保存されます。この手法により、データの完全性が適切に維持されます。取引内の1つの詳細がいずれかの時点で変更された場合、Merkleのルートは自動的に変更されます。
Merkleツリーを使用して取引を検証する場合、ブロックチェーン技術と仮想通貨プラットフォームには多くのメリットがあります。これには、効率的な検証から簡単な改ざん検出まで、さまざまなメリットがあります。
取引の整合性をほぼすぐに検証できます。データの構造化方法により、検証プロセス中にメモリを使用する必要はほとんどなく、必要な計算能力が大幅に低下します。
ブロックチェーンは通常、数十万個のブロックで構成されており、それぞれに最大数千件のトランザクションが含まれている可能性があるため、データの検証にはメモリスペースとコンピューティングパワーという2つの大きな課題があります。Merkleツリーがブロックチェーンの概念ではなかった場合、ネットワーク上のすべてのノードは、ブロックチェーン上でこれまでに行われたすべての取引の完全なコピーを保持する必要があります。ノードは、取引を検証する際、各エントリ行を行ごとに比較し、そのレコードがネットワークレコードと正確に一致していることを確認しなければなりませんでした。記録に不一致があった場合、ネットワークのセキュリティが危険にさらされる可能性があります。その結果、記録を比較して変更がないことを確認するために、データの検証に使用したコンピュータには、はるかに多くの処理能力が必要でした。
一方、Merkleツリーは、検証に必要なデータ量を大幅に削減することで、この問題の解決策を提供します。元帳のすべての入力をハッシュし、それを裏付ける証拠からデータ自体を効果的に分離します。ブロック内のすべてのTXIDがわからない場合、MerkleツリーでMerkleルートを使用してTXIDを確認できます。Merkleツリーは、セット全体をダウンロードすることなく、データセット内に何かが存在することを示す優れた方法です。その結果、取引の検証に必要なコンピューティング能力が低下します。
バリデーター間でブロック上の取引が分配された結果、各バリデーターは異なる取引を同時に処理しています。各取引が順番に検証される方法と比較して、これははるかに効果的です。
シンプル決済認証(SPV)は、ブロックやブロックチェーン全体をダウンロードせずに取引を確定できるもので、Merkleツリーによって実現されます。これにより、仮想通貨ウォレットとして正式に知られるライトクライアントノードを使用して、取引の送受信が可能になります。
ハッシュ構造により、マイナーは取引で改ざんが発生したかどうかを簡単に特定できます。
Merkleルートを使用して、ブロックごとに異なるハッシュ値が生成されます。ブロックは、前のブロックのハッシュを含めることで、ブロックチェーン内のブロックを別のブロックにリンクします。取引が変更されるたびに、取引のハッシュが変更されます。この変更により、ブロックはマークルルートにカスケードされ、その値が変更されるため、無効になります。これにより、次のブロックのハッシュが変更され、残りのブロックチェーンが無効になります。その結果、Merkleツリーはブロックの取引の不変の記録を作成します。
その結果、二重支出を防ぐこともできます。個人がデジタル通貨の二重支出を試みると、その取引にハッシュが生成されます。そのハッシュがブロックチェーンに存在する既存の記録と一致している場合、その取引は拒否されます。
Merkleツリーは、他の技術では不可能な方法で迅速かつ簡単に検証できるため、ブロックチェーン技術にとって不可欠であることが証明されています。これらのMerkleツリーは、不要なデータをすべて削除し、残っているデータをハッシュに変換することで、非常に大きなデータセットを圧縮する機能を提供します。Merkleツリーが提供するさまざまな機能は次のとおりです。
冒頭で述べたように、FTXの崩壊後、利用者はCEXで資金が実際に安全に保管されているかどうかについて懸念しています。その結果、複数のCEXがMerkle Treeの予約証明メカニズムを開発するために登場しました。このセクションでは、Merkleの証明と、お客様の資金の検証方法について見ていきます。
Merkleツリープルーフは、実際の木ではなく、Merkleツリーから切り取られたものです。また、配列またはシーケンスとして表されます(下図のオレンジの部分で示されています)。
すべてのリーフノードと当社の特定のシングルユーザーの残高情報は、図の最終レベルのノードで表されます。図中のピンク色の人物が証拠の受取人であると仮定すると、図レベルのオレンジ色の部分をレベルごとに抽出し、証拠書類を高い順にユーザーに提示します。Merkleプルーフには2つの主な要素があることを覚えておくことが重要です。
1,000万人の利用者数を例にとると、ツリーの高さは数式に基づいてLog2(10,000,000) = 23.2534966642として計算され、ツリーの高さは24レベルになります。したがって、意図的にユーザーに提供されなかったグラフのノードは、24 - 2 = 22となります。
Merkleツリーは完全なバイナリツリーであり、左右のノードを知るだけで、その親ノードに関するすべての情報を計算できます。この完全な情報を構成するのは、残高データとハッシュデータの2つの部分です。
マークルツリーの検証は、BとDを導き出して、
Merkleツリーは、ハッシュサマリー機能を利用することで、グラフ内のすべての紫色のノードに気づくことなく、ツリー全体に含まれているかどうかを判断できます。Merkleの証明は、その利用者のみを対象としています。たとえば、24段階のMerkleツリーでは、お客様の残高情報を確認するために23の要素の配列が必要です。この配列は、お客様の残高証明が正確であることをのみ確認できます。
利用者総数の半分以上を獲得しない限り、断片化した情報に基づいてツリー全体を再構築することはできません。その結果、Merkleツリーは、利用者のプライバシーと、会社全体の資産に関する情報の漏洩を防ぐ能力の両方を保護します。
Bybitアカウントを検証し、資金の有効性を確認する方法は2つあります。
プラットフォーム検証ツール
この方法は、ネットワーク全体で最初で唯一の方法であり、Merkle Tree検証のノード派生プロセスを、同社のプラットフォーム上で直感的なグラフィック形式で表示します。
自己検証ツール
同社のMerkleツリー生成ソースコードと検証コードは、ユーザーが独自の検証をプログラミングするのを支援するため、githubで公開されています。Merkleツリーの計算プロセスには膨大な量のユーザー計算が伴い、通常はビッグデータとJavaによって実装されます。
*オープンJavaコードとは、情報を保留することなく利用者が利用できることを意味します。
Bybitでは、以下のコードをオープンソース化しており、プロのお客様は、準備金証明ページから「データをコピー」ボタン経由で「おとなしい」バージョンのシステムにコピーし、myProof.jsonという名前のファイルとしてローカルディスクに保管することで、マークルツリーのプルーフファイルを検証できます。
MerkleツリーとMerkleルート構造は、すでに多くの異なるブロックチェーンや仮想通貨プラットフォームで広く採用されています。以下の3つの申請について詳しく説明します。
ビットコインは、いくつかの方法でメルクルツリーを使用しているため、ビットコインプラットフォーム全体にとってこれらのツリーは不可欠です。実際、これらのツリーはすべてのビットコインブロックヘッダーに存在しています。ブロック内で利用可能なすべてのトランザクションのハッシュがヘッダーに配置されます。ビットコインに関しては、マークルの根源はマイニングと検証にとって重要です。
ビットコインブロックは、メタデータと広範な取引リストを含むヘッダーで構成されています。このリストは通常、ブロックのヘッダーよりも大きくなります。マイナーはデータをハッシュし、特定の条件に準拠した出力を作成します。これは、ブロックの検証時に必要です。マイナーは、有効なブロックを見つける前に、何兆回もの試行を行えます。試行するたびに、ブロックのヘッダー内の数字を変更する必要があります。ブロックには数千の個別の取引が存在する可能性がありますが、それぞれハッシュ化する必要があります。
Merkleのルーツにより、マイナーはこのプロセスをより効率的にすることができます。マイニングプロセスが始まると、取引がMerkleツリーに行われ、その後、ルートハッシュをブロックヘッダー内に配置できます。この時点で、マイナーはブロック全体ではなく、ブロックのヘッダーをハッシュするだけで済みます。
ビットコインで使用されているメルクルルートのもう1つの側面はレバレッジです。レバレッジはライトクライアントに重点を置いています。リソースが限られた比較的弱いデバイスでノードを運用している場合、1つのブロックですべてのトランザクションをダウンロードしてハッシュすることはできません。代わりに、Merkleの証明を要求できます。これは、取引がブロックに存在することを確認するものです。認証プロセス中に実行する必要があるハッシュの数を減らすことで、最大数のコンピューティングリソースを使用せずに認証を行うことができます。
イーサリアムは、少し修正されたメルクルツリーに基づいているため、メルクルパトリシアツリーと呼ばれます。イーサリアムブロックチェーン内の各ブロックは、1つのバイナリツリーではなく、3つのメルクルツリーで構成されています。3つのルーツはそれぞれ独自の目的を持っています。
初期ルートは、すべての取引のルートとみなされます。2番目のルートは、取引の状態を示します。最後のルートは、取引の受領です。Merkleルートを見て、特定のブロックで取引が見つかったかどうかを判断したり、アカウント残高を特定したりできます。
特にHyperledger Fabricを見ると、このブロックチェーンプラットフォームはMerkleツリーを使用してブロックデータをハッシュとして計算します。ハッシュ値は、Merkleツリーの幅を示します。Hyperledger FabricプラットフォームのMerkleツリーは、ビットコインプラットフォームのツリーと同じように機能します。
Merkleツリーは、取引検証プロセスができるだけ簡単かつ効率的に行われるようにしたい仮想通貨プラットフォームにとって非常に有用であることが証明されています。この構造がなければ、検証のためにネットワーク全体にデータを転送する必要があるため、検証には時間がかかるでしょう。Merkleツリーを使用するプラットフォームは、帯域幅と計算能力の要件が小さくなります。