《絵文字で図解》ビットコイン送金時のトランザクションの仕組み

トランザクションの仕組み

トランザクションの解説・補足

こんにちは!ゴビンチ(@Go_Vinci)です。

上記のノートを元に、トランザクションの基本について説明してみます。

トランザクションの基本概念

トランザクションの基本概念は、インプット(input)・アウトプット(output)・手数料(transaction fee)から構成されています

[図解1]トランザクションのインプットとアウトプットの構造

設定
  • 上の図では、Aはすでに0.2BTCのぬUTXO(未使用トランザクション)を保有している状態です
  • そこで、Bからコーヒーを0.015BTCを買います
  • マイナーへの手数料(mining fee)として0.001BTCを払います
Aが作るトランザクションの内訳はこのようになります。
インプット 0.2BTC
アウトプット(B宛) 0.015BTC
アウトプット2(A宛) 0.184BTC
  • インプット=すでに自分のビットコインアドレス宛に届いているビットコイン
  • アウトプット=インプットを使い、これから送金するビットコイン
  • マイナーへの手数料=インプットの総額からアウトプットの総額を引いた差額分

特筆すべき点は、コーヒー代のお釣り代は、自分宛のアウトプットのトランザクションとして作る必要があることです。

もしそれを作らなかった場合には、0.185BTCの全てがマイナーへの手数料になってしまいます……。

オーファントランザクション

[図解2]オーファントランザクションの流れ

親となるトランザクションより先にブロードキャスト※されてしまったトランザクションは、一時的にオーファントランザクションになります

※ノードによって作られたトランザクションが、ブロックチェーン上に配信されること
※オーファン=孤立

オーファントランザクションの流れ
  1. 子トランザクションが親トランザクションより先にノードに取り込まれます
  2. ノードは、子トランザクションを他のノードに伝播せずに、“オーファントランザクションプール”に移動します
  3. その後、親トランザクションがブロードキャストされます
  4. そして②のノードにも伝播されます
  5. ②のノードは、親トランザクションをトランザクションプールに移動します。
  6. ②でオーファントランザクションプールにあった子トランザクションをトランザクションプールに移動させます
  7. 他のノードにそれぞれのトランザクションを伝播します

Script(スクリプト)の基本

[図解3]スクリプト

トランザクションの暗号化と複合の役割となる、ロッキングスクリプト・アンロッキングスクリプトについて

  • 施錠:ScriptPubKey(スクリプトパブキー)=LockingaScript(ロッキングスクリプト)
  • 解錠:ScriptSig(スクリプトシグ)=UnlockingScript(アンロッキングスクリプト)

トランザクションの種類(スクリプトの種類)

[図解4]スクリプトの種類

pay to pulic key hash(P2PKH:ピーツーピーケーエイチ)

トランザクション(送金データ)を、秘密鍵で署名しハッシュ化、更にSHA256(楕円曲線暗号)によって暗号化。受取手は公開鍵で署名を検証します。

暗号化・復号に関してはコチラの記事をご覧ください。

《図解》ビットコインにおける暗号理論のキホン用語6選

2018.04.03

pay to publick key(P2PK:ピーツーピーケー)

トランザクション(送金データ)を、秘密鍵で暗号化して公開鍵で復号します。
しかしセキュリティ的に、今ではP2PKHが主流になっています。

multi signature(マルチシグネチャー)

UTXO(未使用トランザクション)を使用するために、M-of-N(複数名署名)が必要なトランザクションです。
しかし今では概念は同様として、下記のP2SHがマルチシグのトランザクションとして使用されています。

pay to script hash(P2SH:ピーツーエスエイチ)

トランザクションの施錠と解除にスクリプトを使用しています。
詳しくは以下の記事をご覧ください。

《図解ノート》ビットコインのマルチシグ送金(P2SH)の基本手順

2018.06.06

date output(データアウトプット)

トランザクションの宛先をビットコインアドレスではなく任意のテキストを入力することによって、送金データ以外の情報をブロックチェーン上に保存することができます。

以前に勉強した時のノートをそのまま公開しているので、クオリティは悪しからず……m(_ _)m。
もし間違っている箇所がありましたら、コメントやメッセージでご指摘いただけたら嬉しいです。

https://bitchart.jp/contact/