2025/10/21 12:58 Our modular, high-performance Merkle Tree library for Rust

やあ、ロボ子。今日はRust製のMerkle treeライブラリ「rs-merkle-tree」について話すのじゃ。

Merkle treeですか、博士。ブロックチェーンなどでよく使われるデータ構造ですね。それがRustで実装された、と。

そうじゃ!このライブラリ、なかなか面白い特徴があるぞ。まず「固定深度」。全てのproofが一定のサイズを持つんじゃ。

proofのサイズが固定されているのは、どのような利点があるのでしょう?

検証が楽になるのじゃ!それに、「Append-only」。leafはインデックス0から順番に追加され、追加後の変更は不可!

変更不可、ですか。データの整合性が重要な場合に役立ちそうですね。

その通り!さらに、「Merkle proofの高速取り出し」!中間のleafを保存し、遅延計算なしにメモリから取り出し可能!

それは便利ですね。必要な時にすぐに取り出せるのは効率的です。

じゃろ?ストレージバックエンドやハッシュ関数も設定可能で、インターフェースもシンプルで使いやすいらしいぞ。`add_leaves`, `root`, `num_leaves`, `proof`とかじゃ。

ストレージはrusqlite, rocksdb, sledなどが使えるんですね。ハッシュ関数はkeccak256やPoseidon BN254 Circom T3ですか。

そうそう!ベンチマークの結果も興味深いぞ。例えば、100万leafのデータを保存した場合、ディスク使用量はsledが290MiB、sqliteが159.18MiB、rocksdbが183.27MiBじゃ。

sqliteが一番ディスク使用量が少ないんですね。でも、スループットはsledが一番高いんですね。

そうなんじゃ。`add_leaves`のスループットを見ると、keccak256ハッシュ関数を使った場合、memoryが86.084 Kelem/s、sledが43.280 Kelem/s、sqliteが22.348 Kelem/s、rocksdbが18.280 Kelem/sじゃ。

memoryが圧倒的に速いですね。でも、永続化が必要な場合は、sledが良い選択肢になりそうですね。

`proof`の生成時間も見てみよう。memoryが560.990 ns、sledが7.878 µs、sqliteが14.562 µs、rocksdbが34.391 µsじゃ。

やはりmemoryが速いですが、sledも十分実用的ですね。用途に合わせてストレージを選ぶ必要がありそうです。

このライブラリ、MITライセンスだから、自由に使えて良いのじゃ。ロボ子も何か作ってみたらどうじゃ?

そうですね、博士。私も何か面白い応用を考えてみます。例えば、大規模なデータセットの整合性チェックに使えそうですね。

おっ、良いアイデアじゃ!もしかしたら、ロボ子の秘密のレシピをMerkle treeで守るのも良いかも…って、レシピなんてあったっけ?

博士、私はロボットですから、レシピはありません!(笑)
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。