トランザクションのインプットとアウトプット
トランザクションとはブロック内に含まれる取引情報のことを指し、ビットコインの送金をネットワーク上に知らせることを意味します。また、ビットコインは約10分に1度ブロックが生成され1ブロック毎に1MBの容量までトランザクションの処理をすることができます。
下図グラフは1日のトランザクション総数を表しており、1日に生成できるブロックは144ブロック、2018年12月1日のトランザクション総数は241,847ブロックなので1ブロック1,679トランザクションが処理されていることが分かります。だいたい平均して1ブロックあたり1500から2000前後のトランザクションが処理されていると覚えておいてください。
つまり約10分あたりの取引量が増えると、平均トランザクション数を越えてしまい1ブロック内に収まりきらなくなります。収まりきらなかったトランザクションは次のブロックでの処理となるため時間を要してしまいます。これがスケーラビリティ問題(*1)の入り口です。
*1 スケーラビリティ問題:ビットコインのスケーラビリティ問題とは、ビットコインにおけるブロックチェーンのブロックサイズが1メガバイト(MB)に制限されている結果起きている問題。
トランザクションは1個または複数のインプットとアウトプットを持っており、インプットの方が少しだけ大きくなります。この差分がマイナーへの手数料となります。
トランザクションはインプットからアウトプットに価値の移転がおこなわれ、インプットはトランザクションがどこからビットコインが送られてきたかを示し(通常は前のトランザクションのアウトプット)、アウトプットでは現在の現在の所有者が送り先を指定することで新たな所有者を指定することができます。
これらのインプットとアウトプットが正しく行われているのかを検証するためのプログラムを「トランザクションスクリプト」と言い、UTXO(*2)内に組み込まれています。
*2 UTXO:「Unspent Transaction Output」の略で「未使用のトランザクションアウトプット」という意味を持ちます。ビットコインの取引は全てUTXOを介して実行されており、極めて重要であるためこの章では割愛させていただきます。
トランザクションスクリプトとは何か?
トランザクションにはそれぞれインプットとアウトプットが存在しており、トランザクションスクリプトによって取引の検証が行われていることが分かりました。また、トランザクションスクリプトは「scripStig」と「scriptPubKey」の2種類のScriptがあり、トランザクションのアウトプットにおける条件指定にscriptPubKeyが用いられ、インプットにおける条件解除にscripStigが用いられています。
下図はトランザクションの構図を示しており、scriptSigはインプットデータの中に、scriptPubKeyはアウトプットデータの中に存在していることがわかります。
scriptSigとscriptPubKeyによるトランザクションの証明について、実際にアリスがマイケルから受け取ったビットコインを使用して、ボブのカフェで支払いをする場合を例に詳しくみてみましょう。
アリスは現金と引き換えにマイケルからビットコインを受け取りました。これはマイケルのアウトプットがアリスのインプットになったことを示しています。この取引(トランザクション)は、アリスの秘密鍵でロックされています。アリスがボブのカフェでに支払いをするためには、scripStigでアリス自身の署名と公開鍵を用いることでアンロックする必要があります。
このscripStigによるアンロックによって、マイケルのアウトプットがアリスのインプットになったことを証明しています。なぜならアンロックできるのは秘密鍵を所有しているはずの送信先(アリス)だけだからです。
こうしてアンロックされたインプットは、scriptPubKeyで新たなアウトプットを指定することができます。つまり支払いの為にボブのビットコインアドレスでロックすることを意味します。送信先であるボブがscripStigで署名と公開鍵を用いることで、新たなインプットとして所有権をネットワーク上に証明することになります。
これがscripStigとscriptPubKeyを用いたインプットとアウトプットの証明になります。そして、この例は1つのトランザクションの形式を説明しています。
トランザクションの形式
一般的なトランザクション
一方のビットコインアドレスからもう一方のビットコインアドレスに支払いをするための一般的なトランザクション形式です。その支払いにおつりが含まれる場合は、トランザクションのアウトプットにおつりアドレスが含まれ送信者に戻されます。その場合、1つのインプットに対して2つのアウトプットが用意されます。
おつり用のアドレスというとユーザーにはあまり馴染みが無いように思えますが、それは取引所やウォレットのプール内で管理されているが為に気にする必要がないだけであって、UTXOを採用しているビットコインにとっておつり用のアドレスは非常に重要です。これについては後日UTXOにて詳細をお伝えさせて頂きます。
集約型トランザクション
複数のインプットを1つのアウトプットにまとめて使用されるトランザクション形式です。このタイプのトランザクションは、少額決済やおつりなどの小さなトランザクションをまとめて大きなトランザクションにするなめに使用されます。
分配型トランザクション
1つのインプットを複数のアウトプットに分けて複数の受取人に使用されるトランザクション形式です。このタイプのトランザクションは、企業内での給与の支払いや小さなトランザクションを集めて1つの大きなトランザクションとしてまとめるために使用されます。
トランザクションの確認
最後に実際に処理されているトランザクションの生データをblockchainで見てみましょう。
高さ:現在のブロック数(約10分に1度生成)
年齢:ブロック生成から経過した時間
トランザクション:1ブロックあたりのトランザクション数
鉱夫:マイニングに成功したプール
サイズ:ブロックサイズ
各ブロックの中には下図のように複数のトランザクションが入っており、赤色で囲んだ部分の左側がインプットで右側がアウトプットを表示しています。アウトプットデータ側の二段目のアドレスがおつり用のアドレスになります。
青色で囲んだ部分に実際にアウトプット(送金)した金額とおつりとして戻ってくる金額が表示されています。
このように実際のトランザクションデータを追っていくと、アウトプットされたものがインプットに変わり価値の移転を容易に追跡することができます。この連鎖(チェーン)はどこからはじまるのかというと、約10分に1度マイナーによって新たなブロックが生成された際のブロック報酬として、マイナーの指定しているアドレスにアウトプット(送金)されます。
これはcoinbaseトランザクションと呼ばれています。
coinbaseトランザクションにはインプットは存在しておらず、ブロック報酬のアウトプットのみ存在しているのです。
Reference
おかげさまで現在お友達が1057名を突破しました。仮想通貨の最新情報や重要なファンダ情報などを「プッシュ通知」にて誰よりもはやくお届けします。
Follow @imai_ryoujihttps://platform.twitter.com/widgets.jsTweet
- 分析レポート
- Bitcoinについて
- Ethereum経済圏について
- ST(セキュリティートークン)について
- PoS型プラットフォームトークンについて
- ステーブルコインについて
- コンセンサスアルゴリズムについて
- トークン設計について
- 流通設計について
- CBDCについて
- 各インフルエンサーによる特化した情報
- Q&A項目の共有
- 基礎学習
- 掲示板
https://lounge.dmm.com/detail/761/