マークルツリー(Merkle Tree)は、二進法(バイナリ)のハッシュツリーのようなデータ構造をしています。バイナリツリーでは、ノードごとに最大で2つの子ノード(左ノードと右ノード)が存在します。マークルツリーの各葉ノードには、データ要素のハッシュ値が格納され、左ノードと右ノードのデータがわかれば、親ノードの完全な情報を計算することができます。この総合的な情報には、「ウォレットアドレスの残高データ」と「ハッシュデータ」が含まれています。
- 残高データ:バイナリツリーのデータ構造に基づき、親ノードの残高データは、その下にある左右両ノードの残高データしか含むことができません。
- ハッシュデータ:各ノードには、残高データ、バイナリツリーの階層データ(下図の点線)、子ノードのハッシュデータ(各ノードの下にある左ノードと右ノードのデータ)が含まれています。
マークルツリーは、上図で計算された緑色の部分(BとD)のように、計算によって検証され、以下の2つの基準によっても検証されます。
1. 残高が分割原理を満たしているかどうか
2. ハッシュデータが合法的かどうか
マークルツリーはハッシュ関数を使用することで、ユーザーが紫のノードの情報を知らなくても、自身がツリー全体の一部であるかを検証できるようにしています。マークル証明は、個々のユーザーに固有のものです。24階層のマークルツリーの場合、ユーザーは自身の残高情報を検証するために24要素の長さを持つ残高配列が必要となり、この配列はユーザーの残高を検証するためにのみ使用されます。
ユーザーが取得したデータがマークルツリーの全ユーザーデータの50%を超えない限り、ユーザーは取得した断片的な情報を基に全体のデータ構造を再構築することはできません。したがって、マークルツリーを使用することで企業全体の資産情報が流出することはなく、ユーザーアカウントのプライバシーも保護することができます。
Bybitでは、以下の2通りの検証方法を提供しています。
Bybitプラットフォーム経由の検証
こちらのページから [アカウントを確認する] ページにアクセスし、マークルパスを確認します。Bybitでは、資産残高を確認しやすくするため、マークルツリー検証におけるノードの派生プロセスを可視化しています。
注:当社は、Bybitが適切に資産を保有していることを証明するために、定期的にProof of Reserves(プルーフ・オブ・リザーブ)の監査を実施しています。監査が行われた後にアカウントを作成した場合、または監査されたトークンを保持していない場合、あなたのアカウントに対応する監査記録はありません。
オープンソースコードを用いたセルフ検証ツールによる検証
Bybitは、ユーザー自身で残高を検証できるようにするため、マークルツリー生成用ソースコードと検証コードをGitHubで公開しています。マークルツリーの計算プロセスでは、膨大なユーザーデータの計算が必要で、通常はビッグデータとJavaが用いられます。Javaによるコーディングは、ユーザーが閲覧できるよう完全に公開されています。
バックグラウンド
Bybitでは、プロユーザーが自己検証できるように、次のコードをオープンソース化しています。ユーザーは、個々のプルーフ・オブ・リザーブ(PoR)ページで [Copy Data(データをコピー)] をクリックすることで、各自のプログラミングシステムのクリップボード上でマークルツリーの証明ファイルにデータをコピーし、それをローカルドライブに「myProof.json」というファイルで保存することができます。
手順
1. 実行ファイルの作成
最新のソースコードファイルをダウンロードし、JDK(バージョン1.8以上)とMavenをワークステーションまたはPCにインストールします。
- 依存関係を解決し、コンパイルとパッケージングを行います。
- 以下のように現在のプロジェクトフォルダにあるコンパイルされた jarパッケージを確認します。
2. 検証の実行
- BybitWebサイトからコピーした証明ファイルを現在のフォルダ内にある新しいファイルにペーストし、そのファイル名を「myProof.json」とします。そして次のコマンドを実行します。
- 次に、検証されたプログラムを実行し、出力データを観察します。