137 / 736UTXØ

Utreexo

小さなデータベースで検証する

Bitcoin ノードは、どの出力がまだ使われていないかを把握する必要があります。Utreexo は、その全記録を収めた大きなローカルデータベースなしで検証する方法です。小さな暗号学的状態を保持し、必要なデータを証明と一緒に受け取ります。保存容量とディスクの負担を減らす代わりに、一部の負担をデータ転送と可用性に移します。

Utreexo を使うと、Bitcoin ノードは未使用出力の一覧全体を保存せずに、使おうとしている金額がすでに使われていないか確認できます。ノードは、取引やブロックを検証し、ネットワークの他の参加者と通信するソフトウェアです。小さな検証用の指紋を保持し、具体的な記録を検証可能な証明とともに受け取ります。支出ルールやビットコインの供給量は変わりません。Bitcoin Core の標準方式ではありません。

アンナが以前受け取ったビットコインをペーターに送るとします。その取引は過去の受け取りを参照します。金額と、それを使うための条件をまとめた個別の記録を出力といい、未使用なら UTXO です。新しい取引の入力には、その過去の出力への参照と、それを使うために必要なデータが含まれます。ノードは記録が実在し、アンナがまだ使っていないかを確認します。通常は UTXO set という、現在の未使用出力すべてのデータベースを管理します。個人の口座と残高の一覧ではありません。大きくなるほどディスクの負担が増えます。Thaddeus Dryja は2019年、この負担を減らす方法として Utreexo を発表しました。 [1] [6] [8]

まず各記録からハッシュを計算し、データの短い検証用指紋を作ります。マークル木では、指紋を二つずつ組み合わせて再びハッシュ化し、頂点の指紋であるルートまでまとめます。Utreexo は複数の木を使い、検証ノードは一覧全体の代わりにそのルートを保持できます。アンナの出力については、データと、必要な隣接する指紋を含む証明を受け取ります。そこからルートへの経路を計算し直し、自分が追跡している状態と比較します。送信者の主張だけでは足りません。この構造を暗号学的アキュムレータと呼び、記録が集合に含まれることを証明できます。ただし、ルートは圧縮バックアップではなく、展開して元の記録すべてを復元することはできません。 [1] [2]

受け取ったデータをハッシュ化し、その証明を使って、ノードが追跡している状態とのつながりを確認します。知っているサーバーから届いたというだけで無効な証明を受け入れてはいけません。デジタル署名は、秘密の数値である秘密鍵を使って支払いの許可を証明し、鍵そのものは公開しません。スクリプトは、出力を使うときに満たすべき条件を定めたものです。有効な包含証明でも、署名、スクリプト、金額、その他のトランザクションとブロックのルール確認を代替しません。Utreexo が変えるのは状態の保存方法であり、検証を省略する権限ではありません。 [2] [5] [8]

証明を作るための十分なデータを、誰かが保持し続ける必要があります。ライブラリの文書は、木の集合全体を持つ prover と、ルートだけでよい verifier を区別しています。検証者は一部の証明をキャッシュできますが、ルートだけから任意の証明を作ることはできません。データが消えるのではなく、参加者間での配置が変わるのです。 [2]

ブロックは、共有する履歴に追加する取引のまとまりです。支出された出力は追跡中の集合から取り除かれ、新しい未使用の出力が加わります。それに伴って証明も変化します。過去の状態に対して保存した証明は、後続のブロックの後では更新しなければ使えないことがあります。再編成とは、ネットワークが別の有効な分岐を採用し、それまでのブロック履歴の一部を置き換えることです。実装は証明の更新、同時進行のトランザクション、チェーン再編時の巻き戻しを扱う必要があります。一度取得すれば永久に有効な証明書ではありません。 [2] [3]

Pruned Node は検証済みの古いブロックデータを削除しますが、従来は現在の UTXO データベースを保持します。Utreexo が対象にするのは、このデータベースです。節約する対象が違うため、両者は組み合わせられます。ただし、プルーニングも小さなアキュムレータも、それだけで過去を処理せずに検証したことにはなりません。ブロック履歴、現在の状態、初回の検証方法は別の問題です。 [6] [5]

新しいノードがブロックを最初から検証せず、他者の提示した状態から始めるとします。その場合、初期状態が正しいと仮定しています。小さなアキュムレータでも、この信頼はなくなりません。その後の証明は、受け入れた状態に照らして検証されるからです。AssumeUTXO では、ある時点の状態を記録した snapshot の受け入れと、その後のバックグラウンドでの履歴検証を分けて考える必要があります。utreexod の文書は、プログラムに固定された状態からの既定の起動を説明しています。それだけで過去の全ブロックを独立に検証したことにはなりません。起動方法は別途選ぶものであり、Utreexo 自体に備わる性質ではありません。 [7] [3]

utreexod は Utreexo を使って Bitcoin ネットワークを検証する実装です。2026年10月17日に確認した文書ではベータ版とされ、メインネットで無視できない額を扱う用途は推奨されていません。想定済みの状態からの起動を無効にする --noassumeutreexo も記載されています。これはインストールの勧めではありません。利用前には最新のバージョン、動作モード、配布元、復旧方法を確認する必要があります。 [3]

基本設計は Bitcoin の通貨ルールの書き換えや既存ブロックの変更を必要としません。一方、証明を作り、転送し、更新する役割は必要なので、参加ノードには対応したソフトウェアと通信が求められます。小さなローカル状態は安価な機器の助けになり得ますが、ブロック内の取引数増加、全員の手数料低下、全ノードの新形式への移行を自動的に意味するものではありません。 [1] [4]

ディスク上のデータが少なくなる代わりに、通信量が増え、必要な時にデータを入手できることへの依存が高まる場合があります。正しく検証するノードは偽の証明を拒否しますが、提供者はデータを送らず検証を遅らせることができます。そのため、保存、転送、キャッシュ、初期状態の検証、障害時の動作をまとめて比べる必要があります。Utreexo は自主検証を低コストにできますが、データ不足が重要でなくなるわけではありません。 [3] [4]

理解を深めるには、この項目とあわせて次もお読みください UTXO, Full Node, Pruned Node, AssumeUTXO, Merkle Tree, Bitcoin Core.

DOC · 001Utreexo paper一次資料 DOC · 002Utreexo accumulator library文書 DOC · 003utreexod implementation一次資料 DOC · 004Bitcoin Optech — Utreexo文書 DOC · 005Bitcoin Core — validation.cpp文書 DOC · 006Bitcoin Developer Reference — Blockchain validation文書 DOC · 007Bitcoin Core — AssumeUTXO design文書 DOC · 008Bitcoin Developer Reference — Transactions文書
改訂日: 一次資料を優先 · 投資助言ではありません