中級 レッスン1 読了4分

トランザクションの構造:入力、出力、そしてUTXO

ビットコインには残高がありません。未使用のコインの断片があり、各支払いは整数の断片で行われます。

ウォレットを開くと、残高が表示されます。しかし、その数字はネットワーク上には存在しません。ブロックチェーンのどこにもあなたの持っている金額は記録されていません。存在するのは、それぞれに所有者と独自の価値を持つお金の断片であり、残高はアプリが画面を描く前に計算する合計です。

各断片はUTXOと呼ばれ、未使用トランザクション出力の略です。誰かがあなたに支払うと、トランザクションは価値とあなたの鍵だけが開けるロックを持つ出力を作成します。誰もそれを使わない限り、それはそのまま、完全な状態で待機します。ネットワークはそれらを合計することはできません。各出力がすでに使われたかどうかだけを知っています。

ネットワークは残高を保存しません。断片を保存し、それぞれが完全です。

ここから、ほとんどのことを説明するルールが生まれます:UTXOは完全に使われます。半分を使うことはできません。20の紙幣の半分で10を支払うことができないのと同じです。0.05の断片を持っていて0.03を支払う必要がある場合、トランザクションは0.05全体を消費し、2つの新しい出力を作成します:受取人への0.03と、残りをあなたのアドレスに戻すものです。これは初心者向けのトレイルが内部で説明することを約束したお釣りであり、それはプログラムの好意ではありません。これが唯一の方法で、計算が合います。

したがって、各トランザクションは入力のリストと出力のリストです。入力は以前の出力を指し、お金がどこから来たかを示し、それぞれにそれを使う権利を証明する署名が付いています。出力はお金がどこに行くかを示します。値は常にサトシの整数です — ビットコインの1億分の1 — であり、整数は決して誤って丸められません。

そして、初めて見る人を最も驚かせる詳細がここにあります:手数料はどこにも書かれていません。トランザクションに手数料フィールドは存在しません。存在するのは差額です:入力が出力よりも多い場合、残りはトランザクションをブロックに含めるマイナーに渡されます。

手数料は書かれていません。入ったものと出たものの間に残ったものです。

この設計の選択はエレガントで容赦ありません。2023年2月10日、アメリカの企業Paxosはわずか数ドル相当のトランザクションを送信し、19.8ビットコインの手数料を支払いました — 当時の50万ドルです。誰もその値を入力しませんでした。誰かが入力を組み立て、お釣りの出力を忘れ、ネットワークはルールに従って正確に動作しました:出力に行かなかったものはマイナーに行きました。一般的なウォレットはこれを検証で防ぎますが、手動で組み立てたトランザクションはそうではありません。

このモデルを頭に入れると、日常の2つの問題が明らかになります。1つ目はダストです:使うのにかかる手数料がそれ自体の価値を超えるほど小さい断片です。それらはウォレットに永遠に残り、追跡技術としても存在します — 数千のアドレスにダストを送り、他のものと一緒に使う人を観察します。

持ち運ぶのにかかる費用がそれ自体の価値を超えるほど小さい断片があります。

2つ目は統合です。多くの小さな支払いを受け取る人は数十のUTXOを蓄積し、それぞれが使うときにスペースを占めます — 30の入力を持つトランザクションは1つの入力を持つものの30倍のコストがかかります。統合はそれらを1つのトランザクションにまとめ、手数料が低いときに行い、今日安く支払うことで明日高くなるものを避けます。代わりに、統合はそれらすべての断片が同じ人に属していることを公に明らかにし、これはプライバシーに関するレッスンで後に扱われる話題です。

これが、完全なノードが誰の残高も保存しない理由です:それはネットワーク全体のまだ使われていないすべての出力のセットを保存します。数ギガバイトで、検証時に重要な唯一の質問に答えます — この断片はまだ存在しますか?

ロックを開ける必要があります。各出力は、それを使う条件を定義する小さなプログラムを持ち、独自の言語で書かれています。次のレッスンでは、スクリプトについて学びます。