ビットコインのトランザクションとその関連技術
ビットコインのトランザクションは、仮想通貨ビットコインの送受信を記録する基本単位であり、そのライフサイクルは複数のステップに分かれます。今回はビットコインのトランザクションのライフサイクルとブロックチェーンの構造について学んでいきます。
ビットコインのトランザクションのライフサイクルの概要については下記リンクを参考にしてください。
Pay-to-Public-Key-Hash(P2PKH):一般的な送金トランザクション
Pay-to-Public-Key-Hash(P2PKH)は、ビットコインのトランザクション形式の一つであり、最も一般的に使用される形式です。P2PKHは、受取人のビットコインアドレス(公開鍵ハッシュ)を指定して送金する方法です。以下に、P2PKHの概要と仕組みを説明します。
P2PKHの仕組み
送金側(入力)
トランザクションのインプットに、支払いたいビットコインの未使用アウトプット(UTXO)を指定します。次に署名を生成し、公開鍵と共にトランザクションに含めます。
UTXO(未使用のトランザクション出力)は、トランザクションの出力で、まだ使われていないものを指します。新しいトランザクションは、以前のUTXOを入力として使用し、新しいUTXOを生成します。
受取側(出力)
トランザクションのアウトプットに、受取人のビットコインアドレス(公開鍵ハッシュ)を指定します。
P2PKHのスクリプト
P2PKHトランザクションは、2つのスクリプトで構成されます。
ロック(条件)スクリプトとアンロック(解放)スクリプトと言いますが、以後はロッキングスクリプトとアンロッキングスクリプトと記述します。
ロッキングスクリプトとアンロッキングスクリプトの関係
ロッキングスクリプトは、ビットコインを受け取るための条件を定義するスクリプトです。アンロッキングスクリプトは、ビットコインを使うために必要な条件を満たすスクリプトです。これらのスクリプトにより、トランザクションの整合性が保たれます。
ロックスクリプト(ScriptPubKey)
受取側が指定するスクリプトで、ビットコインを解放する条件を定義します。形式は以下の通りです。
OP_DUP OP_HASH160 <受取人の公開鍵ハッシュ> OP_EQUALVERIFY OP_CHECKSIG
OP_DUP
:スタックのトップにあるデータを複製します。OP_HASH160
:スタックのトップにあるデータのRIPEMD-160ハッシュをSHA-256ハッシュから取得します。<受取人の公開鍵ハッシュ>
:受取人のビットコインアドレスのハッシュ。OP_EQUALVERIFY
:スタックのトップの2つのデータが等しいかを検証し、等しくない場合はトランザクションを無効にします。OP_CHECKSIG
:公開鍵と署名を使用して署名を検証します。
アンロックスクリプト(ScriptSig)
送金側が指定するスクリプトで、ロックされたビットコインを解放するための署名と公開鍵を提供します。形式は以下の通りです。
<署名> <公開鍵>
<署名>
:送金者の秘密鍵によって生成された署名。<公開鍵>
:送金者の公開鍵。
P2PKHの動作例
No. | 動作 | 内容 |
---|---|---|
1 | 送信者がトランザクションを作成 | 送信者が未使用アウトプット(UTXO)をインプットとして選択し、送金額と受取人のビットコインアドレス(公開鍵ハッシュ)をアウトプットとして指定します。 送信者が署名を生成し、アンロックスクリプトに署名と公開鍵を追加します。 |
2 | ネットワークにブロードキャスト | トランザクションがネットワークにブロードキャストされ、ノードによって検証されます。 |
3 | 検証プロセス | ノードがアンロックスクリプトを実行し、署名と公開鍵を検証します。 ロックされたビットコインが受取人に送金されます。 |
P2PKHのトランザクションプロセスの詳細を視覚化
オペリターン(OP_RETURN)によるデータ領域の使用
オペリターン(OP_RETURN)はビットコインのスクリプト言語におけるオペコードの一つであり、トランザクションのアウトプットに任意のデータを埋め込むために使用されます。このオペコードは、トランザクションの中にデータを格納し、そのデータが将来のトランザクションで使われないようにする役割を果たします。
OP_RETURNの概要
データの埋め込み | OP_RETURN を使用することで、トランザクションに任意のデータ(最大80バイト)を埋め込むことができます。 |
非消費可能なアウトプット | OP_RETURN アウトプットは再利用できないため、将来的なトランザクションに使われることがありません。これにより、ネットワークの負荷を軽減し、ブロックチェーンの肥大化を防ぐ効果があります。 |
手数料の節約 | OP_RETURN を使用したトランザクションは、他のアウトプットと異なり消費されないため、通常よりも低い手数料で実行されます。 |
OP_RETURNの利用例
デジタル証明
特定のデータの存在証明やタイムスタンプを記録するために使用されます。
メタデータの保存
カスタムトークンやデジタルアセットの情報をブロックチェーン上に保存するために使用されます。
メッセージング
ビットコインブロックチェーンを利用したメッセージの記録。
OP_RETURNのスクリプト形式
OP_RETURN
を使用するアウトプットスクリプトの例は以下の通りです。
OP_RETURN <データ>
OP_RETURN
:データをアウトプットスクリプトに埋め込み、それが消費されないようにします。
<データ>
:任意のデータ(最大80バイト)。
OP_RETURNを使用したトランザクションの作成手順
トランザクションの作成
- 通常のトランザクションと同様に、インプットを指定します。
- アウトプットとして
OP_RETURN
と埋め込みたいデータを指定します。
データの埋め込み
OP_RETURN
に続いて、埋め込みたいデータをバイト形式で追加します。
トランザクションの署名
- 通常のトランザクションと同様に、トランザクションを署名します。
トランザクションのブロードキャスト
- 完成したトランザクションをネットワークにブロードキャストします。
OP_RETURNを使用したトランザクションのプロセスの詳細と可視化
マルチシグネチャ(Multisig)の説明
マルチシグネチャ(Multisig)は、複数の署名を必要とするトランザクションです。これは、複数の公開鍵をロッキングスクリプトに登録し、そのうちいくつかの署名をアンロッキングスクリプトで必要とする仕組みです。例えば、5つの公開鍵のうち2つの署名が必要な2-of-5マルチシグの例があります。
使用例
会社のアドレスを複数人で管理するケース。
具体的なスクリプト
ロッキングスクリプトとアンロッキングスクリプトの詳細、検証スクリプトの動作と署名の並べ方の説明。
Pay-to-Script-Hash(P2SH)の紹介
Pay-to-Script-Hash(P2SH)は、ビットコインのトランザクション形式の一つで、より複雑な条件での支払いを可能にします。P2SHトランザクションでは、支払いの条件をスクリプト形式で定義し、そのスクリプトのハッシュを使用して支払いを行います。受取人は後でスクリプト自体を提供し、スクリプトの条件を満たすことで支払いを受け取ることができます。
ビットコインのトランザクションの基本構造
ビットコインのトランザクションは、「UTXO(Unspent Transaction Output)」モデルに基づいています。UTXOは、以前のトランザクションから残っている未使用の出力を指し、それが新しいトランザクションのインプットとして使用されます。各トランザクションは次のような要素で構成されます。
Input | 過去のトランザクションの未使用出力(UTXO) |
Output | 新しい送金先のアドレスと送金額 |
トランザクションID | 一意の識別子(トランザクションデータをSHA-256で二重ハッシュした値) |
トランザクションのライフサイクル
ビットコイントランザクションは、送信者から受信者へビットコインを送る過程です。トランザクションデータには、送信者と受信者のアドレス、送金額、手数料などが含まれます。
No. | トランザクション | 内容 |
---|---|---|
1 | 生成 | ユーザーがビットコインウォレットを使用して新しいトランザクションを作成します。送信先アドレス、送信額、および手数料を指定します。 |
2 | 署名 | ウォレットが秘密鍵を使用してトランザクションにデジタル署名を行います。 |
3 | ブロードキャスト | 署名されたトランザクションがビットコインネットワークにブロードキャストされます。 |
4 | 検証 | ネットワーク内のノードがトランザクションを受信し、その有効性を検証します。 |
5 | メモリプールへの追加 | 有効なトランザクションがメモリプール(mempool)に追加され、次のブロックに含められるのを待ちます。 |
6 | マイナーによる選択 | マイナーがトランザクションを選択し、新しいブロックに含めるための候補にします。 |
7 | ブロックの生成 | マイナーがトランザクションを含む新しいブロックを生成し、ハッシュパズルを解きます。 |
8 | ブロックのブロードキャスト | 生成されたブロックがネットワークにブロードキャストされます。 |
9 | ブロックの検証と追加 | 他のノードがブロックの有効性を検証し、ブロックチェーンに追加します。 |
10 | トランザクションの確認 | トランザクションが含まれるブロックがチェーンに追加され、複数の確認(confirmations)を受けるまで待ちます。 |
ブロードキャストとは?
コンピュータネットワーク、電気通信、情報理論において、ブロードキャストとは、同じメッセージを複数の受信者に同時に転送することである。
トランザクションのライフサイクルの手順
トランザクションの種類
ビットコインのトランザクションには以下の5種類があります。
トランザクション手数料
トランザクション手数料は、トランザクション作成者が設定し、マイナー(採掘者)への報酬として支払われます。手数料はトランザクションのサイズに基づいて計算され、手数料が高いほどトランザクションがブロックに取り込まれる速度が速くなります。
スクリプトの使用
ビットコインのトランザクションには「ロッキングスクリプト(Locking Script)」と「アンロックスクリプト(Unlocking Script)」が使用されます。送信者はロッキングスクリプトを設定し、受信者はアンロックスクリプトを使用してトランザクションを解放します。このスクリプトはビットコインのセキュリティと正当性を確保するために重要です。
ビットコインのブロックチェーンの構造
ビットコインのブロックチェーンは、ビットコインネットワーク上でトランザクションを記録する分散型台帳です。その構造を理解することは、ビットコインの技術的基盤を理解するために不可欠です。
ブロックチェーンの概要
ブロックチェーンは、ジェネシスブロックから始まり、一連のブロックが連鎖する形で形成されます。各ブロックには、前のブロックのハッシュ値、トランザクションデータ、およびブロックヘッダーが含まれます。
ブロックヘッダーとトランザクションの関係
ブロックヘッダーは、前のブロックのハッシュ、タイムスタンプ、ターゲット値、ナンスなどを含む。
ジェネシスブロックからのブロックの連鎖
最初のブロックであるジェネシスブロックから始まり、その後のすべてのブロックが連鎖している。
ブロックハッシュによる改ざん困難さ
ブロックチェーンの改ざんを困難にする仕組みは、ブロックハッシュの使用によるものです。以下、その仕組みを具体的に説明します。
No. | 仕組み | 内容 |
---|---|---|
1 | ブロックチェーンの構造 | ブロックヘッダーには、前のブロックのハッシュ値が含まれています。このハッシュ値が連鎖することで、ブロックチェーン全体が連続的に結びついています。 各ブロックにはトランザクションデータが含まれ、その要約がマークルルートとしてブロックヘッダーに格納されています。 |
2 | ハッシュ関数の特性 | ハッシュ関数は、入力データから固定長の出力(ハッシュ値)を生成するもので、わずかな入力の変更でも出力が大きく変わります。この特性により、ブロック内のデータが少しでも改ざんされると、そのブロックのハッシュ値が完全に異なるものになります。 |
3 | 改ざんの検出 | もしトランザクションを改ざんしようとすると、そのトランザクションが含まれるブロックのハッシュ値が変わり、そのブロックに続く全てのブロックのハッシュ値も再計算しなければならなくなります。これは、各ブロックが前のブロックのハッシュ値を含んでいるためです。 |
4 | 計算量と困難さ | ブロックチェーンは、最も長いチェーン(つまり最も多くの計算資源が投入されたチェーン)を有効なものと見なします。したがって、一度改ざんが発生すると、その後の全てのブロックを再計算し、他の全てのノードよりも早く新しいブロックを生成し続けなければなりません。このプロセスは膨大な計算量を要し、現実的には不可能です。 |
5 | チェックサムの利用 | ブロックの各トランザクションの整合性は、マークルツリーを用いてチェックサムとして検証されます。マークルツリーのルートハッシュ(マークルルート)がブロックヘッダーに含まれており、この値がトランザクション全体のハッシュの集約となります |
まとめ
ブロックハッシュの使用により、ブロックチェーンの各ブロックが連鎖的に結びついているため、データの改ざんが極めて困難になっています。改ざんを試みるには膨大な計算資源を必要とし、現実的には不可能に近いことから、ブロックチェーンのデータは高い信頼性と整合性を保っています。
この仕組みにより、ビットコインを始めとする多くのブロックチェーン技術は、セキュアかつ信頼性の高いデータ管理を実現しています。
マークルツリー(Merkle Tree)とマークルルート(Merkle Root)
トランザクションの要約を行うデータ構造
マークルツリーは、トランザクションの要約を行う効率的なデータ構造で、トランザクションのハッシュ値を組み合わせて最終的にマークルルートを生成します。
マークルルートの計算方法
マークルルートは、マークルツリーの根に位置し、ブロック内のすべてのトランザクションを一つのハッシュ値で要約します。
軽量ウォレット(SPVノード)の検証方法
SPVノードは、マークルルートを使用して、フルノードに依存せずにトランザクションの存在を検証します。
ブロックの具体的な構造
要素 | 説明 |
---|---|
バージョン情報 | ブロックのバージョン番号を表す情報。 |
前のブロックのハッシュ | 前のブロックのハッシュ値で、この値を使ってチェーンが連結される。 |
タイムスタンプ | ブロックが生成された日時を表す。 |
難易度ターゲット | ブロックの採掘難易度を設定する値。 |
ナンス | マイニングプロセスで見つけるべき数値。 |
ブロックサイズ | ブロックの全体のサイズ。 |
トランザクション数 | ブロックに含まれるトランザクションの数。 |
ジェネシスブロックの紹介
ジェネシスブロックは、ビットコインブロックチェーンの最初のブロックであり、特別な意味を持ちます。このブロックは、他のブロックと異なり、特定のメッセージが含まれています。ジェネシスブロックには「The Times 03/Jan/2009 Chancellor on brink of second bailout for banks」というメッセージが埋め込まれており、これはビットコインの創設者サトシ・ナカモトが、2009年1月3日に発行された『タイムズ』紙の記事を引用したものです。このメッセージは、ビットコインの誕生背景とその意図を象徴するものとして知られています。
クライアントソフト(bitcoin core)にハードコード
ジェネシスブロックは他のノードから取得する必要はない。
まとめ
ビットコインのトランザクションとそのライフサイクル、マルチシグネチャーの仕組み、ブロックチェーンの構造のプロセスについて理解することは、ビットコインの技術的基盤を理解するために不可欠です。これらの知識は、ビットコインのセキュリティと正当性を確保し、分散型システムの運用を支える重要な要素です。
今後、ビットコインの利用が広がる中で、これらの知識はますます重要になるでしょう。ビットコインのトランザクションとブロックチェーンの基礎を理解することで、仮想通貨の未来に備えることができます。
参考文献
コメント