本文へスキップ
buybitcoinsmart

用語集 / トランザクションと手数料

UTXO

別名は未使用トランザクション出力です。

UTXOとは?
UTXOとは、あるアドレスに存在する未使用のビットコインのまとまりのことで、以前のトランザクションによってひとまとまりで作成され、一部分だけを使うことはできず、全体としてのみ使用できます。

ビットコインには口座も残高もありません。代わりに各ノードが、未使用の出力の集合(UTXO)を常に把握しており、ウォレットの残高は、そのウォレットが鍵を持つ出力の合計にすぎません。使用すると選んだコインは破棄され、新しいコインが作られます。そのため100,000サトシを移動する方が10,000,000サトシを移動するより高くつくことがあるのです。

仕組み

台帳は口座残高の表ではなく、コインの集まりです。各出力は2つのものを記録します。サトシ単位の金額(八バイトの数値として保存されます)と、その出力を使うために提示すべきものを示すロックスクリプトです。誰かが使用するまで、その出力は未使用の集合にとどまり、すべてのフルノードがこれを保持してブロックごとに更新します。

使用は破棄と生成からなります。ウォレットは出力を丸ごと入力として選び、それを解除できることを証明し、新しい出力を書き込みます。その場で差し引かれるものはないため、1BTCのコインから0.3BTCを支払うには、受け取り手のために0.3BTCのコインを、自分用に約0.7BTCのお釣りのコインを作ることになります。最初に使ったコインは集合から永久に消え、1つあった場所に2つの項目が残ります。

Bitcoin Coreは集合全体をchainstateと呼ばれるLevelDBデータベースに保持し、その一部をメモリにキャッシュします。-dbcacheの既定値は1,024MiBで、RAMが4GiB未満のマシンでは450です。ノードが支払いを受け取ったときに最重要の問い、すなわちこの入力は今も存在する何かを指しているか、に答えるために参照するのは、ブロックの保管庫ではなくこの集合です。プルーニングされたノードは数百ギガバイトの古いブロックを捨てても完全に検証できます。未使用の集合こそが状態だからです。

縁には2つの珍しい例があります。2009年1月3日にジェネシスブロックのcoinbaseに支払われた50BTCはデータベースに書き込まれなかったため、永久に使用できません。また2010年、BIP30が有効になる前には、2つのcoinbaseトランザクションが以前のものを複製して上書きし、100BTCを集合から消しました。トランザクション識別子の重複を禁じる規則は、それらのブロックのために存在します。

新しくマイニングされたコインもロックされた状態で届きます。coinbaseの出力は100ブロック、およそ16時間使用できません。これは短いチェーン再編成に対するプロトコル自身の備えです。

ビットコインを購入するときにこれが重要な理由

取引所からの出金は、ウォレットにちょうど1つのコインを作ります。そのため保有資産の形は、そのボタンをどれだけ頻繁に押すかで決まります。毎週購入して毎週出金すると1年後に52個のコインが残り、同じ購入を四半期ごとに出金すると4個になります。SwanもRiverも定期的な購入をこの点を中心に組み立て、注文ごとではなくしきい値に達したときに出金を実行します。理由は算数です。それらのコインはどれも、後で使用する際にブロック空間の約68仮想バイトを費やすからです。

2つ目の帰結は出所です。コインは匿名の現金ではありません。コインはそれを作ったトランザクションの履歴を帯びており、本人確認を行うあらゆるプラットフォーム(当サイトでレビューするほぼすべての取引所が該当します)からの出金は、コンプライアンスデータベースに自分のものとして記録されたコインを生みます。自分のウォレットへ直接届けるRelaiでの購入も、同じ記録を伴って届きます。そのようなコインを他所で得たコインから分けておけるのは、そもそも別々の対象だからにほかなりません。

3つ目に、ウォレットを復元してもコインは復元されません。シードフレーズは鍵を再生成するだけであり、その後ソフトウェアが、それらの鍵で解除できる出力をチェーン上で探す必要があります。珍しい導出パスを使ったり、アドレスの種類を確認しないソフトウェアに復元したりすると、コインは未使用の集合の中で安全にとどまる一方、残高はゼロと表示されます。シードの単語と併せて出力ディスクリプタを保管することが、そんな午後の慌てを防ぎます。

0.02BTCの購入を集合の中ではじめから追う

Krakenで0.02BTCを購入し、出金します。取引所はあなたへの支払いを他の顧客とまとめ、そのバッチのうち2,000,000サトシの価値のある1つの出力があなたのアドレスにロックされます。ウォレットには今、1つのコインがあります。

2か月後、次のブロックのレートが5sat/vBのときに誰かに500,000サトシを支払います。ネイティブSegWitの入力を1つ使用し出力を2つ作ると約141仮想バイトを要するため、手数料は705サトシです。同時に3つのことが起こります。2,000,000サトシのコインが未使用の集合から外れ、500,000サトシのコインが受け取り手のために現れ、1,499,295サトシのお釣りのコインがウォレットの管理する新しいアドレスに現れます。

残高は2,000,000サトシから1,499,295サトシへ移りました。全体の集合は1項目だけ増えました。これが誰もが行うあらゆる支払いの静かなコストであり、ノードが表計算ではなくデータベースを必要とする理由です。

UTXO vsトランザクション出力

すべてのUTXOはトランザクション出力です。しかし大半のトランザクション出力はとうにUTXOではなくなっています。出力は履歴の恒久的な一行であり、10年後でもそれを含んだブロックの中で読むことができます。UTXOは現在に対する権利です。誰かが出力を使用した瞬間、それは未使用の集合から外れつつチェーンには永久に残ります。その隔たりがあるからこそ、ノードは古いブロックを捨てられても現在の状態を捨てることはできません。

UTXO vsダスト

ダストは経済性の問題を抱えたUTXOであり、別種の対象ではありません。未使用の集合に含まれることは、そのコインを移動する価値があるかどうかを何も示しません。600サトシの出力は6BTCの出力とまったく同じく有効ですが、30sat/vBではそれを使用する入力に約2,040サトシかかり、保有額の3倍を超えます。そのためウォレットは、全額を使えない残高を表示することがあるのです。

混同しやすい用語

よくある質問

ウォレットが残高を表示しても、全額を送金できないのはなぜですか?

残高は別々のコインの集まりであり、すべてを送金するにはすべての入力の手数料を支払うことになるからです。コインの中には、使用するための手数料がその価値を上回るほど小さいものがあり、その場合ウォレットは送金で損をしないよう、そのコインを残します。

UTXOはアドレスと同じものですか?

いいえ。アドレスは錠前であり、同じアドレスに多くのコインが入ることも、1枚も入らないこともあります。UTXOは錠前の後ろにある特定のコイン1枚であり、それを作成したトランザクションと、そのトランザクション内での位置によって識別されます。

小さなコインが多くあると、実際にお金がかかるのですか?

はい、使用する時点でかかります。ネイティブSegWitの入力はそれぞれ約68仮想バイトを追加するため、三十個の小口のコインを保有するウォレットは、それらを最終的に使用するときに三十個の入力分を支払うことになり、その費用はその時点で適用されている手数料率で計算されます。

次に読む

関連用語

トランザクションと手数料のその他の用語

このページを英語で読む