【第3回Bitcoin入門】ビットコインのトランザクションの仕組みと基礎知識
2025/01/15
ビットコイン(Bitcoin)の送金の仕組みを支えているのが、トランザクションというブロックチェーン上の取引記録です。
実際の現金取引とは異なり、ビットコインのトランザクションでは、秘密鍵による電子署名や複雑なスクリプト処理によって安全性が確保されています。
本記事では、仮想通貨のトランザクションの基本的な仕組みから、UTXOモデルやインプット・アウトプットの構造、手数料の仕組みまで、初心者にもわかりやすく解説します。
また、マルチシグやP2SHといった発展的な機能についても取り上げ、ビットコインネットワークを支える重要な要素としてのトランザクションについて、技術的な側面から理解を深めていきましょう。
記事の目次
ビットコインのトランザクションとは?基本構造を理解しよう
暗号通貨の基礎となるビットコインでの送金は、物理的な現金やキャッシュの受け渡しとは全く異なる仕組みで行われています。現金取引では、紙幣やコインといった物理的な価値の移転が行われますが、ビットコインのトランザクションでは、ブロックチェーン上のデータベースの更新という形で価値の移転が記録されます。
具体的には、何らかの入金を受けたアドレスから出金する場合、その取引内容を記述したトランザクションと呼ばれるデータがビットコインネットワークに送信されます。このトランザクションデータには、送金元の残高情報や送金先のアドレス、送金額などの情報が含まれており、これらが一連の流れの中で処理されていきます。
送信されたトランザクションは、ネットワーク上のノードによって検証され、有効であると判断されると他のノードに伝播されていきます。そして最終的に、マイナーによって新しいブロックに取り込まれることでその取引が完了します。この一連の流れを見ることで、ビットコインの取引の仕組みの意味を理解することができます。
まとめると、ビットコインのトランザクションは、初めて暗号通貨に触れる人にとっては複雑に見えるかもしれませんが、時間をかけて理解することで、従来の金融システムとは異なる革新的な価値移転の仕組みであることがわかります。
ビットコインのトランザクションのデータ構造を知る
トランザクションのデータ構造は、以下のような主要なフィールドで構成されています:
- バージョン:トランザクションのバージョン番号
- 入力カウント:トランザクションが参照する入力の数
- 入力(インプット):使用する未使用トランザクションアウトプット(UTXO)の情報
- 出力カウント:作成する出力の数
- 出力(アウトプット):送金先アドレスと金額の情報
- ロックタイム:トランザクションの有効開始時期を指定する値
これらのデータは、16進数形式で表現されたバイト列として保存されます。一般のユーザーが直接このデータを扱うことはありませんが、ブロックチェーンエクスプローラーを使用することで、人間が読みやすい形式で内容を確認することができます。
各フィールドの役割を詳しく見ていきましょう。バージョンフィールドは、そのトランザクションがどのルールに従うべきかを示します。インプットとアウトプットのカウントは、それぞれのリストに含まれる要素数を表します。インプットフィールドには、送金元の情報として、過去のトランザクションの出力を参照するための情報が含まれます。アウトプットフィールドには、送金先のビットコインアドレスと送金額が指定されます。最後のロックタイムは、そのトランザクションをいつから有効にするかを指定するためのものです。
このように、ビットコインのトランザクションは、送金に必要な全ての情報を含む精緻に設計されたデータ構造となっています。このデータ構造によって、安全で信頼性の高い価値の移転が実現されているのです。
インプットとアウトプットの仕組み
ビットコインのトランザクションでは、送金元と送金先の情報がそれぞれインプットとアウトプットとして管理されています。この仕組みは「UTXOモデル」と呼ばれ、銀行のような残高管理とは大きく異なります。
UTXOモデルでは、全てのビットコインは「未使用トランザクションアウトプット(UTXO)」として存在します。たとえば、あるアドレスが1BTCを保有している場合、それは実際には過去のトランザクションのアウトプットとして記録されています。この未使用の1BTCを別のアドレスに送金する場合、新しいトランザクションのインプットとして使用することになります。
インプットには以下の情報が含まれます:
- 使用するUTXOが含まれる過去のトランザクションID
- そのトランザクション内でのアウトプットのインデックス番号
- UTXOを使用するための認証情報(アンロッキングスクリプト)
これらの情報によって、送金元のビットコインが正当に所有されていることを証明します。例えば、Aliceが過去に受け取った2BTCをBobに送金する場合、そのUTXOを参照するインプットを作成し、自身の秘密鍵で署名することで所有権を証明します。
一方、アウトプットには以下の情報が含まれます:
- 送金額
- 送金先の条件を指定するスクリプト(ロッキングスクリプト)
重要な点として、UTXOは分割して使用することができません。例えば2BTCのUTXOから1BTCを送金する場合、2BTCすべてを使用し、1BTCを送金先に、残りの1BTCを自分自身のアドレスにお釣りとして送る必要があります。
トランザクションIDの生成方法
トランザクションID(txid)は、トランザクションを一意に識別するための重要な情報です。このIDは、トランザクションの全データに対してSHA256ハッシュ関数を2回適用することで生成されます。
具体的な生成手順は以下の通りです:
- トランザクションのすべてのフィールドをバイト列として連結
- 連結されたデータにSHA256ハッシュ関数を適用
- 得られたハッシュ値に再度SHA256ハッシュ関数を適用
- 最終的なハッシュ値のバイト順序を逆転
特筆すべき点として、トランザクションIDには内部バイトオーダーと表示バイトオーダーという2種類の表現方法があります。ブロックチェーン内部では内部バイトオーダーで処理されますが、ブロックエクスプローラーなどのユーザーインターフェースでは表示バイトオーダーが使用されます。
例えば、以下のようなトランザクションIDがあった場合:
4ac541802679866935a19d4f40728bb89204d0cac90d85f3a51a19278fe33aeb
これを内部バイトオーダーで表現すると:
eb3ae38f27191aa5f3850dc9cad00492b88b72404f9da135698679268041c54a
となります。この違いは、トランザクションを扱う際に注意が必要な技術的な詳細の一つです。
ビットコインのトランザクションのスクリプトシステムを理解しよう
ビットコインでは、トランザクションの送金条件を柔軟に設定できるスクリプトシステムが採用されています。このシステムによって、単純な送金だけでなく、複数人の承認が必要な送金や、特定の条件が満たされた場合にのみ実行可能な送金など、様々な取引形態が可能になっています。
ロッキングスクリプトの基本
ロッキングスクリプトは、トランザクションのアウトプットに含まれる条件指定のためのスクリプトです。このスクリプトは、そのビットコインを誰がどのような条件で使用できるかを定義します。一般的な送金では、受取人の公開鍵のハッシュ値を含むロッキングスクリプトが使用されます。
典型的なロッキングスクリプトの構造は以下のようになっています:
OP_DUP OP_HASH160 <受取人の公開鍵ハッシュ> OP_EQUALVERIFY OP_CHECKSIG
このスクリプトは、「指定された公開鍵ハッシュに対応する秘密鍵による有効な署名を提示できる人だけが、このビットコインを使用できる」という条件を表現しています。
アンロッキングスクリプトによる認証
アンロッキングスクリプトは、ロッキングスクリプトで指定された条件を満たすための証明を提供します。一般的な送金では、送金者の署名と公開鍵が含まれます:
<送金者の署名> <送金者の公開鍵>
このアンロッキングスクリプトは、トランザクションのインプットに含まれ、対応するUTXOのロッキングスクリプトと組み合わせて評価されます。
スタック型実行エンジンの動作
ビットコインのスクリプト実行エンジンは、スタックベースで動作します。アンロッキングスクリプトとロッキングスクリプトが順番に実行され、最終的にスタックの一番上の値が「真」であれば、そのトランザクションは有効と判断されます。
具体的な実行例を見てみましょう。一般的な送金トランザクションの場合:
- アンロッキングスクリプトの実行
- 署名をスタックにプッシュ
- 公開鍵をスタックにプッシュ
- ロッキングスクリプトの実行
- OP_DUP: スタック最上部の公開鍵を複製
- OP_HASH160: 複製した公開鍵のハッシュ値を計算
- <公開鍵ハッシュ>との比較
- OP_CHECKSIG: 署名の検証
このような実行プロセスにより、送金の認証が行われます。ビットコインのスクリプトシステムは、このように明確な実行ルールを持ち、プログラマブルな送金条件を実現しています。これにより、単純な送金から複雑な条件付き取引まで、様々なトランザクションの形態が可能になっているのです。
ビットコインの5つの標準的なトランザクションタイプを学ぼう
ビットコインには、用途に応じて使い分けられる複数の標準的なトランザクションタイプが存在します。それぞれのタイプは、異なるスクリプトパターンを使用して、送金条件や認証方法を定義します。これらの標準タイプは、セキュリティと利便性のバランスを考慮して設計されています。
Pay-to-Public-Key-Hash (P2PKH)
P2PKHは、ビットコインの最も一般的な送金方式です。通常のビットコインアドレスを使用した送金で利用され、送金先の公開鍵のハッシュ値を使用してビットコインをロックします。
P2PKHのロッキングスクリプトは以下の構造を持ちます:
OP_DUP OP_HASH160 <公開鍵のハッシュ値> OP_EQUALVERIFY OP_CHECKSIG
このスクリプトの処理フローは以下の通りです:
- 送金者の公開鍵をスタックに複製
- 複製した公開鍵のハッシュ値を計算
- 指定された公開鍵ハッシュと比較
- 一致を確認し、署名を検証
この方式の利点は、公開鍵そのものではなくハッシュ値を使用することで、より短いアドレスでビットコインを送受金できることです。
Pay-to-Public-Key (P2PK)
P2PKは、P2PKHよりもシンプルな送金方式で、公開鍵を直接使用してビットコインをロックします。主にマイニング報酬の受け取りや、自分自身へのお釣りの送金などで使用されます。
P2PKのロッキングスクリプトは以下のようになります:
<公開鍵> OP_CHECKSIG
この方式の特徴は以下の通りです:
- スクリプトがシンプルで処理が高速
- トランザクションサイズが小さい
- 公開鍵が直接露出するため、量子コンピュータに対する耐性が低い
P2PKは、P2PKHよりも単純な構造を持っているため、処理効率が良いという利点があります。しかし、公開鍵を直接使用するため、セキュリティの観点からは一般的な送金には推奨されません。主に、即座に使用される一時的なアウトプットや、マイニング報酬の受け取りなど、特定の用途に限定して使用されています。
これらのトランザクションタイプは、それぞれの用途や要件に応じて使い分けることで、ビットコインの安全で効率的な送金を実現しています。
マルチシグネチャー(マルチシグ)トランザクション
マルチシグネチャー(マルチシグ)は、複数の署名を必要とするトランザクションの形式です。例えば、5人の署名権限者のうち、少なくとも2人の署名があれば送金を実行できるような「2-of-5」のマルチシグを設定できます。
典型的なマルチシグのロッキングスクリプトは以下のような構造になります:
2 <公開鍵1> <公開鍵2> <公開鍵3> <公開鍵4> <公開鍵5> 5 OP_CHECKMULTISIG
この仕組みは、以下のような用途で活用されています:
- 企業の資金管理(複数の役員の承認が必要)
- エスクローサービス(売り手、買い手、仲介者の合意)
- 共同管理口座(家族や事業パートナー間での共同管理)
マルチシグは、単一の秘密鍵の紛失や漏洩のリスクを軽減し、より安全な資金管理を実現します。
Pay-to-Script-Hash (P2SH)
P2SHは、複雑なスクリプト(特にマルチシグなど)を扱いやすくするために導入された仕組みです。このトランザクションタイプでは、スクリプト全体のハッシュ値だけを使用してロックを行います。
P2SHのメリットは以下の通りです:
- 送金者の負担するトランザクション手数料を軽減
- 複雑なスクリプトを短いアドレスで表現可能
- スクリプトの詳細を送金時に開示する必要がない
例えば、マルチシグをP2SHで実装する場合、送金者は長いスクリプト全体ではなく、そのハッシュ値(Redeem Script)だけを扱えば良くなります。これにより、複雑なスクリプトの詳細を知らなくても、通常のビットコインアドレスと同じように送金することができます。
データ記録用のOP_RETURN
OP_RETURNは、ブロックチェーンに任意のデータを記録するための特殊なトランザクションタイプです。最大80バイトまでのデータを記録できますが、このアウトプットは使用できない(使用済みとしてマークされる)という特徴があります。
主な用途は以下の通りです:
- タイムスタンプサービス
- デジタル資産の存在証明
- メタデータの記録
OP_RETURNの導入は、ブロックチェーンの非金銭的な活用と、UTXOセットの肥大化防止のバランスを取るための妥協案として実装されました。このトランザクションタイプを使用することで、ブロックチェーンに永続的にデータを記録できますが、UTXOデータベースには影響を与えないため、ネットワークへの負荷を最小限に抑えることができます。
これら3つのトランザクションタイプは、それぞれが特有の用途と利点を持っており、ビットコインの活用範囲を大きく広げています。特にP2SHの導入により、複雑なスクリプトの実用性が大きく向上し、より高度な取引形態が可能になりました。
ビットコインのトランザクションの高度な機能と実践的な知識
ビットコインの技術は常に進化を続けており、新しい機能の追加や改善が行われています。ここでは、重要な技術的進展と実用的な知識について解説します。
Segwitによる改良点
Segregated Witness(Segwit)は、ビットコインの重要なアップグレードの一つです。このアップグレードでは、トランザクションの署名データ(Witness)を別の場所に分離することで、いくつかの重要な改善を実現しました。
Segwitの主な利点は以下の通りです:
- トランザクションの展性(マリアビリティ)問題の解決
- ブロック容量の実質的な拡大
- ライトニングネットワークなどの第2層ソリューションの実装を容易に
特に、トランザクションの展性問題の解決は重要な進展でした。以前は、トランザクションIDが署名データに依存していたため、署名を変更することでIDを変更できてしまう問題がありました。Segwitはこの問題を解決し、より安全な取引を可能にしました。
ビットコインの取引手数料の仕組み
ビットコインのトランザクション手数料は、トランザクションのサイズに基づいて計算されます。送金額の大きさではなく、データサイズが手数料を決定する要因となります。
手数料に影響を与える主な要因:
- トランザクションのバイトサイズ
- ネットワークの混雑状況
- 承認を希望する優先度
ビットコインのブロックサイズには制限があるため、手数料の高いトランザクションが優先的に処理されます。ネットワークに取引が集中して詰まりが発生すると、承認を得るために必要な手数料が上昇する傾向があります。マイナーは、限られたブロックスペースを最も効率的に使用して、より多くの手数料を得られるようトランザクションを選択します。
ビットコインのブロックチェーンエクスプローラーでの確認方法
ブロックチェーンエクスプローラーは、トランザクションの状態や履歴を確認できるウェブサービスです。代表的なエクスプローラーには、blockchain.comやbtc.comなどがあります。これらのサービスを使えば、デジタル通貨の取引状況をリアルタイムで調べることができます。
エクスプローラーで確認できる主な情報:
- トランザクションの状態(未承認/承認済み)
- 送金元と送金先のアドレス
- 送金額と手数料
- 承認数(ブロック数)
- トランザクションの詳細データ
- ウォレット残高の履歴
これらの情報は見方は簡単で初めての人でもわかりやすく確認できます。トランザクションID、ビットコインアドレス、またはブロック高を検索ボックスに入力するだけで、関連する情報を確認することができます。これは、送金状況の確認や、問題が発生した際のトラブルシューティングに非常に役立ちます。
特に入金や出金の際には、トランザクションIDを控えておくことをお勧めします。問題が発生した場合、このIDを使用してトランザクションの状態を追跡し、適切な対応を取ることができます。また、管理者や受け取り側に送金状況を説明する際にも、このIDを共有することで正確な情報を伝えることができます。
このように、ブロックチェーンエクスプローラーは、ビットコインシステムの公開性と透明性を実現する重要なツールとして機能しています。取引の状態を誰でもどこからでも確認できる仕組みは、従来の金融システムにはない特徴と言えるでしょう。
注意事項
- 本記事は、情報提供のみを目的としており、投資助言や金融商品の売買を推奨するものではありません。
- 本記事では、正確な情報提供に努めておりますが、その完全性、正確性、適時性、有用性等について、保証いたしかねます。
- 本記事に記載された情報に基づいて被ったいかなる損害についても、当社は一切の責任を負いません。
- 暗号資産(仮想通貨)への投資判断は、ご自身の責任において行ってください。投資を行う際は、取引所の利用規約および取引に関する説明事項をよく読み、リスクについて十分に理解した上で、ご自身の判断と責任において行ってください。
- 本記事の内容は、予告なく変更または削除される場合があります。