Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ハッシュベースのアキュムレーター Utreexoの仕組み
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
shigeyuki azuchi
August 02, 2019
Technology
130
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ハッシュベースのアキュムレーター Utreexoの仕組み
GBEC動画解説コンテンツのスライドです。
https://goblockchain.network/2019/08/utreexo/
shigeyuki azuchi
August 02, 2019
More Decks by shigeyuki azuchi
See All by shigeyuki azuchi
FORS
azuchi
0
13
クラスターmempool
azuchi
0
32
W-OTS+
azuchi
0
36
Shorのアルゴリズム
azuchi
0
59
DahLIAS: Discrete Logarithm-Based Interactive Aggregate Signatures
azuchi
0
43
Fiat-Shamir変換と注意点
azuchi
0
230
AssumeUTXOを利用したブロックチェーンの同期
azuchi
0
55
BIP-374 離散対数の等価性証明
azuchi
0
74
BIP-353 DNS Payment Instructions
azuchi
0
91
Other Decks in Technology
See All in Technology
「顧客の声を聞かなければ何も始まらない」 ── 顧客の声から生まれた『AI返信補助機能』の開発プロセス / AICon2026_shikata_imai
rakus_dev
1
260
”AIを使う” から ”AIに任せる” へ ─ 開発プロセスを再設計してAIを組織標準にするまで
cyberagentdevelopers
PRO
1
130
2年前に削除したPHPクラスが、 ある日突然決済をエラーにした
ykagano
1
730
どこまでAIに任せるか 〜確率論と決定論の境界決定〜
shukob
0
430
そのドキュメント、自動化しませんか?
yuksew
1
400
Webアプリ認証の全体像 / The Big Picture of Web App Authentication
kitano_yuichi
1
410
PHPで作って学ぶリアルタイム音声対話AIとWebSocket入門 by ムナカタ
munakata
0
120
大量データに対しても、生成AIを用いてリーズナブルにデータ加工をしたい!Databricksのai_queryについて調べてみた
kamoshika
1
270
JAWS_ICEBERG_BASECAMP
iqbocchi
2
110
クラウドを使う側から、作る側へ / 大吉祥寺.pm 2026前夜祭
fujiwara3
3
980
実践!既存 Project への AI-Driven Development 適用〜 一ヶ月で Project 唯一のフロントエンドエンジニアを作り出せ〜
lycorptech_jp
PRO
0
380
事業成長とAI活用を止めないデータ基盤アーキテクチャの設計思想
hiracky16
0
370
Featured
See All Featured
HDC tutorial
michielstock
2
750
Chasing Engaging Ingredients in Design
codingconduct
0
240
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
400
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.4k
Evolving SEO for Evolving Search Engines
ryanjones
0
240
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
660
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
160
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
180
Transcript
Utreexo
1 Utreexo Lightning Networkのホワイトペーパーの共著者 でもあるTaddeus Dryjaによるハッシュベースの アキュムレータ Utreexoの提案 •
Bitcoinのフルノードは未使用のトランザクションアウト プット=UTXOの状態(現在約4GB)を管理している。 • UTXOは現状ディスク上のDB程度に保存されるが、 保存されたUTXOがアクセスされるのは削除される タイミング(使用時)のみ。 • 将来的にUTXOは増加し、UTXOを保持するための コストも長期的には増加すると思われる。 • 休止中のUTXOの保持を省略できると、ストレージだけでなく、ディ スクIOが最小限に抑えられ、同期速度も向上する。 • Txの検証もUTXOのDB全体ではなく単体の Txと同サイズの証明 のみがあれば良い。 https://eprint.iacr.org/2019/611.pdf
2 Utreexoの構造 Utreexoはハッシュベースのアキュムレータで 完全二分木の複数のマークルツリーで構成される 1 2 3 4 8 9
11 5 6 10 7 左のツリーから順に大きくなるように完全二分木のツリーを配置する。 新しいリーフは随時1番右側に追加していく。 UTXOのハッシュをリーフとして追加し、 マークルツリーを構成する。 フルノードが保持するのは各ツリーの ルートハッシュのみ。 ウォレット等でUTXOを管理する場合は、 そのUTXOのInclusion Proofが必要になる。 Txには既存のTxに加えInclusion Proofを添付する。
リーフ1,2に新しい要素3を追加すると 2つの二分木になる。 3 要素の追加 1 2 3 1
2 3 1 2 3 4 要素4を追加すると4つのリーフで 構成される1つの二分木になる。 1 2 3 4 1 2 3 4 5 1 2 3 4 5 要素5を追加すると 2つの二分木になる。
4 要素のInclusion Proof 1 2 3 4 5 6 7
8 各UTXOのハッシュをリーフとしてマークルツリーを形成 ・・・ リーフ5のUTXOを使用する場合、リーフ 5が存在する ツリーにおけるリーフ 5のInclusion Proofを トランザクションに添付する必要がある。 Inclusion Proofは • リーフの位置 • (リーフの兄弟の)ハッシュリスト で構成される。 各ノードはトランザクションが参照する UTXOが 自身のUTXOのツリー内に存在するか、 Inclusion Proofからマークルルートを計算し、 自身のツリーのマークルルートと検証する。
5 要素の削除 1 2 3 4 5 1 2 5
4 リーフ3を削除すると、リーフ5がリーフ 3の位 置に配置される。 リーフ1,2,4,5のUTXOの Inclusion Proofを管理している場合、その Inclusion Proofは更新される。 1 2 3 4 5 6 1 2 5 6 4 リーフ3を削除すると、リーフ 5, 6をリーフ3, 4 の位置に配置し、リーフ 4は単一のマークル ツリーになる。 要素を削除する際は、1番高さが低いツリー(1番右側のツリー)と 削除対象のリーフが存在するツリーの一部を入れ替えて、ツリーを再構成する。
6 バッチ削除 新しいブロックを受信すると、大量の UTXOをツリーから削除し、大量の新しい UTXOをツリーに追加する必要が ある。要素を1つずつ削除するのは非効率であるため、バッチ処理化することで必要なハッシュ操作の数を大幅 に削減する。 Twin ->
Swap -> Root -> Climb • Twin 7 1 2 5 3 4 6 Twinはリーフの左右両方のノードの削除を指す。 リーフ1,2のTwinを削除すると、その親ノード5も 削除対象としてマークする。
削除処理を行う行に複数の削除がある場合、 Twin/Swap後、Rootステップは実行されない。 削除数が奇数の場合、 Twin/Swap後1つのノードが残り、その1つが Rootステップで処理される。 7 バッチ削除 •
Swap • Root 7 1 2 5 3 4 6 Swapはツリー内に2つ以上の削除リーフがある 状態で、残る兄弟要素を入れ替える処理を指す。 リーフ2,3を削除する際、2と4の位置を交換し、 親ノード6,7を削除対象としてマークする。 8 1 2 6 3 4 7 5 高さ1のツリーがある場合は、そのリーフと 削除対象のリーフの位置を変える。 7 1 2 5 3 4 6 3 高さ1のツリーが無い場合は、3を 高さ1のツリーのルートに昇格させる。
8 バッチ削除 • Climb •
バッチ削除フローのサンプル 7 1 2 5 3 4 6 Rootステップが終了すると、次の行に移動して削除を進 める。これをツリー群の頂点まで繰り返す。 13 1 2 9 3 4 10 14 5 6 11 7 8 12 15 8つのリーフを持つ中、リーフ6,7を削除する。 ① Twinは無いので、まずSwapにより リーフ6とリーフ8を入れ替える。
9 バッチ削除 13 1 2 9 3 4 10 14
5 8 11 7 6 12 15 ② 1番下の行の処理が終わったので、 Climbして次の行へ移る。 13 1 2 9 3 4 10 14 5 8 11 7 6 12 15 ③ 子ノードの無くなった 12を削除対象とし、 子が新しくなった11のハッシュを再計算する。
10 バッチ削除 ④ 2つめの行では、Twin/Swapも無いので、 Rootを実行し、11がルートとなるツリーができる。 13 1 2 9
3 4 10 14 5 8 11 12 15 ⑤ Climbにより3つめの行の処理に移動する。 13 1 2 9 3 4 10 14 5 8 11 12 15
11 バッチ削除 ⑥ 3つめの行でもRootを実行し、 13がルートとなるツリーになる。 13 1 2 9
3 4 10 14 5 8 11 12 15 ⑧ Climbにより最後の行の処理に移り、 15を削除する。 13 1 2 9 3 4 10 14 5 8 11 15 13 1 2 9 3 4 10 5 8 11 バッチ処理後のツリー群は
12 ブリッジノード Bitcoinは既に稼働中のチェーンで、 UTXOのアキュムレータも各 UTXOのInclusion Proofも 管理していないが、アキュムレータをサポートするノードは、トランザクションを受信した際、 トランザクションで使用される TXOのInclusion
Proofを必要とする。 そのため、そのような Compact State Node と既存のFull Nodeが共存するためには、 トランザクションのInclusion Proofを提供するBridge Nodeが必要になる。
13 Utreexoの実装 • Taddeus Dryjaが公開している実装↓ https://github.com/mit-dci/utreexo Goで書かれている2つのタイプのアキュムレータを提供。 ◦ Forest ブリッジノード向けに全リーフを保持するアキュムレータ実装。
◦ Pollard 全リーフは保持しないがアキュムレータおよびForestが生成したInclusion Proofの検証が可能な実装。全リーフを管理することも 可能だが、その場合Forestの実装の方が効率的。 • Utreexorb Utreexoの動作を理解するためにRubyで実装したアキュムレータ実装。 https://github.com/chaintope/utreexorb