[ビットコイン]トランザクションのライフサイクルとブロックチェーンの構造(第三回)

Web3
  1. ビットコインのトランザクションとその関連技術
    1. Pay-to-Public-Key-Hash(P2PKH):一般的な送金トランザクション
      1. P2PKHの仕組み
        1. 送金側(入力)
        2. 受取側(出力)
      2. P2PKHのスクリプト
      3. ロッキングスクリプトとアンロッキングスクリプトの関係
        1. ロックスクリプト(ScriptPubKey)
        2. アンロックスクリプト(ScriptSig)
      4. P2PKHの動作例
        1. P2PKHのトランザクションプロセスの詳細を視覚化
    2. オペリターン(OP_RETURN)によるデータ領域の使用
      1. OP_RETURNの概要
      2. OP_RETURNの利用例
        1. デジタル証明
        2. メタデータの保存
        3. メッセージング
      3. OP_RETURNのスクリプト形式
      4. OP_RETURNを使用したトランザクションの作成手順
        1. トランザクションの作成
        2. データの埋め込み
        3. トランザクションの署名
        4. トランザクションのブロードキャスト
      5. OP_RETURNを使用したトランザクションのプロセスの詳細と可視化
    3. マルチシグネチャ(Multisig)の説明
      1. 使用例
      2. 具体的なスクリプト
    4. Pay-to-Script-Hash(P2SH)の紹介
    5. ビットコインのトランザクションの基本構造
    6. トランザクションのライフサイクル
      1. トランザクションのライフサイクルの手順
    7. トランザクションの種類
    8. トランザクション手数料
    9. スクリプトの使用
  2. ビットコインのブロックチェーンの構造
    1. ブロックチェーンの概要
      1. ブロックヘッダーとトランザクションの関係
      2. ジェネシスブロックからのブロックの連鎖
      3. ブロックハッシュによる改ざん困難さ
        1. まとめ
    2. マークルツリー(Merkle Tree)とマークルルート(Merkle Root)
      1. トランザクションの要約を行うデータ構造
      2. マークルルートの計算方法
      3. 軽量ウォレット(SPVノード)の検証方法
    3. ブロックの具体的な構造
      1. ジェネシスブロックの紹介
        1. クライアントソフト(bitcoin core)にハードコード
    4. まとめ

ビットコインのトランザクションとその関連技術

ビットコインのトランザクションは、仮想通貨ビットコインの送受信を記録する基本単位であり、そのライフサイクルは複数のステップに分かれます。今回はビットコインのトランザクションのライフサイクルとブロックチェーンの構造について学んでいきます。

ビットコインのトランザクションのライフサイクルの概要については下記リンクを参考にしてください。

Pay-to-Public-Key-Hash(P2PKH):一般的な送金トランザクション

Pay-to-Public-Key-HashP2PKH)は、ビットコインのトランザクション形式の一つであり、最も一般的に使用される形式です。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-HashP2SH)は、ビットコインのトランザクション形式の一つで、より複雑な条件での支払いを可能にします。P2SHトランザクションでは、支払いの条件をスクリプト形式で定義し、そのスクリプトのハッシュを使用して支払いを行います。受取人は後でスクリプト自体を提供し、スクリプトの条件を満たすことで支払いを受け取ることができます。

ビットコインのトランザクションの基本構造

ビットコインのトランザクションは、「UTXO(Unspent Transaction Output)」モデルに基づいています。UTXOは、以前のトランザクションから残っている未使用の出力を指し、それが新しいトランザクションのインプットとして使用されます。各トランザクションは次のような要素で構成されます。

Input過去のトランザクションの未使用出力(UTXO)
Output新しい送金先のアドレスと送金額
トランザクションID一意の識別子(トランザクションデータをSHA-256で二重ハッシュした値)

トランザクションのライフサイクル

ビットコイントランザクションは、送信者から受信者へビットコインを送る過程です。トランザクションデータには、送信者と受信者のアドレス、送金額、手数料などが含まれます。

No.トランザクション内容
1生成ユーザーがビットコインウォレットを使用して新しいトランザクションを作成します。送信先アドレス、送信額、および手数料を指定します。
署名ウォレットが秘密鍵を使用してトランザクションにデジタル署名を行います。
ブロードキャスト署名されたトランザクションがビットコインネットワークにブロードキャストされます。
検証ネットワーク内のノードがトランザクションを受信し、その有効性を検証します。
メモリプールへの追加有効なトランザクションがメモリプール(mempool)に追加され、次のブロックに含められるのを待ちます。
マイナーによる選択マイナーがトランザクションを選択し、新しいブロックに含めるための候補にします。
ブロックの生成マイナーがトランザクションを含む新しいブロックを生成し、ハッシュパズルを解きます。
ブロックのブロードキャスト生成されたブロックがネットワークにブロードキャストされます。
ブロックの検証と追加他のノードがブロックの有効性を検証し、ブロックチェーンに追加します。
10トランザクションの確認トランザクションが含まれるブロックがチェーンに追加され、複数の確認(confirmations)を受けるまで待ちます。

ブロードキャストとは?

コンピュータネットワーク、電気通信、情報理論において、ブロードキャストとは、同じメッセージを複数の受信者に同時に転送することである。

トランザクションのライフサイクルの手順

トランザクションの種類

ビットコインのトランザクションには以下の5種類があります。

ビットコインのトランザクションの種類

トランザクション手数料

トランザクション手数料は、トランザクション作成者が設定し、マイナー(採掘者)への報酬として支払われます。手数料はトランザクションのサイズに基づいて計算され、手数料が高いほどトランザクションがブロックに取り込まれる速度が速くなります。

スクリプトの使用

ビットコインのトランザクションには「ロッキングスクリプト(Locking Script)」と「アンロックスクリプト(Unlocking Script)」が使用されます。送信者はロッキングスクリプトを設定し、受信者はアンロックスクリプトを使用してトランザクションを解放します。このスクリプトはビットコインのセキュリティと正当性を確保するために重要です。

ビットコインのブロックチェーンの構造

ビットコインのブロックチェーンは、ビットコインネットワーク上でトランザクションを記録する分散型台帳です。その構造を理解することは、ビットコインの技術的基盤を理解するために不可欠です

ブロックチェーンの概要

ブロックチェーンは、ジェネシスブロックから始まり、一連のブロックが連鎖する形で形成されます。各ブロックには、前のブロックのハッシュ値トランザクションデータ、およびブロックヘッダーが含まれます。

ブロックヘッダーとトランザクションの関係

ブロックヘッダーは、前のブロックのハッシュタイムスタンプターゲット値ナンスなどを含む。

ジェネシスブロックからのブロックの連鎖

最初のブロックであるジェネシスブロックから始まり、その後のすべてのブロックが連鎖している。

ブロックチェーンの連鎖

ブロックハッシュによる改ざん困難さ

ブロックチェーンの改ざんを困難にする仕組みは、ブロックハッシュの使用によるものです。以下、その仕組みを具体的に説明します。

No.仕組み内容
1ブロックチェーンの構造ブロックヘッダーには、前のブロックのハッシュ値が含まれています。このハッシュ値が連鎖することで、ブロックチェーン全体が連続的に結びついています。
各ブロックにはトランザクションデータが含まれ、その要約がマークルルートとしてブロックヘッダーに格納されています​。
2ハッシュ関数の特性ハッシュ関数は、入力データから固定長の出力(ハッシュ値)を生成するもので、わずかな入力の変更でも出力が大きく変わります。この特性により、ブロック内のデータが少しでも改ざんされると、そのブロックのハッシュ値が完全に異なるものになります​。
改ざんの検出もしトランザクションを改ざんしようとすると、そのトランザクションが含まれるブロックのハッシュ値が変わり、そのブロックに続く全てのブロックのハッシュ値も再計算しなければならなくなります。これは、各ブロックが前のブロックのハッシュ値を含んでいるためです​。
計算量と困難さブロックチェーンは、最も長いチェーン(つまり最も多くの計算資源が投入されたチェーン)を有効なものと見なします。したがって、一度改ざんが発生すると、その後の全てのブロックを再計算し、他の全てのノードよりも早く新しいブロックを生成し続けなければなりません。このプロセスは膨大な計算量を要し、現実的には不可能です​。
チェックサムの利用ブロックの各トランザクションの整合性は、マークルツリーを用いてチェックサムとして検証されます。マークルツリーのルートハッシュ(マークルルート)がブロックヘッダーに含まれており、この値がトランザクション全体のハッシュの集約となります​
まとめ

ブロックハッシュの使用により、ブロックチェーンの各ブロックが連鎖的に結びついているため、データの改ざんが極めて困難になっています。改ざんを試みるには膨大な計算資源を必要とし、現実的には不可能に近いことから、ブロックチェーンのデータは高い信頼性と整合性を保っています。

この仕組みにより、ビットコインを始めとする多くのブロックチェーン技術は、セキュアかつ信頼性の高いデータ管理を実現しています。

マークルツリー(Merkle Tree)とマークルルート(Merkle Root)

トランザクションの要約を行うデータ構造

マークルツリーは、トランザクションの要約を行う効率的なデータ構造で、トランザクションのハッシュ値を組み合わせて最終的にマークルルートを生成します。

マークルルートの計算方法

マークルルートは、マークルツリーの根に位置し、ブロック内のすべてのトランザクションを一つのハッシュ値で要約します。

軽量ウォレット(SPVノード)の検証方法

SPVノードは、マークルルートを使用して、フルノードに依存せずにトランザクションの存在を検証します。

ブロックの具体的な構造

要素説明
バージョン情報ブロックのバージョン番号を表す情報。
前のブロックのハッシュ前のブロックのハッシュ値で、この値を使ってチェーンが連結される。
タイムスタンプブロックが生成された日時を表す。
難易度ターゲットブロックの採掘難易度を設定する値。
ナンスマイニングプロセスで見つけるべき数値。
ブロックサイズブロックの全体のサイズ。
トランザクション数ブロックに含まれるトランザクションの数。

ジェネシスブロックの紹介

ジェネシスブロックは、ビットコインブロックチェーンの最初のブロックであり、特別な意味を持ちます。このブロックは、他のブロックと異なり、特定のメッセージが含まれています。ジェネシスブロックには「The Times 03/Jan/2009 Chancellor on brink of second bailout for banks」というメッセージが埋め込まれており、これはビットコインの創設者サトシ・ナカモトが、2009年1月3日に発行された『タイムズ』紙の記事を引用したものです。このメッセージは、ビットコインの誕生背景とその意図を象徴するものとして知られています。

クライアントソフト(bitcoin core)にハードコード

ジェネシスブロックは他のノードから取得する必要はない。

bitcoin/src/kernel/chainparams.cpp at master · bitcoin/bitcoin
Bitcoin Core integration/staging tree. Contribute to bitcoin/bitcoin development by creating an account on GitHub.

まとめ

ビットコインのトランザクションとそのライフサイクルマルチシグネチャーの仕組みブロックチェーンの構造のプロセスについて理解することは、ビットコインの技術的基盤を理解するために不可欠です。これらの知識は、ビットコインのセキュリティと正当性を確保し、分散型システムの運用を支える重要な要素です。

今後、ビットコインの利用が広がる中で、これらの知識はますます重要になるでしょう。ビットコインのトランザクションとブロックチェーンの基礎を理解することで、仮想通貨の未来に備えることができます。

参考文献

コメント

タイトルとURLをコピーしました