今回はブロックチェーンにおけるトランザクション手数料について紹介します。
なお、そもそものトランザクションについては以下の記事をご参照ください。
できる限り「Short & Simple」を心がけます。
なお、私もブロックチェーン初学者なので、内容に誤り等ありましたらご指摘いただけると幸いです。
トランザクション手数料とは
トランザクション手数料とは、その名の通りトランザクションに含める手数料のことで、トランザクションを記録しているブロックをマイニングしたマイナーに与えられる。つまり、マイナーがトランザクションを次のブロックに含める(マイニングする)ためのインセンティブとなる。
ほとんどの場合、ウォレットが自動でトランザクション手数料を計算し、トランザクションに含める。しかし、もしプログラムを通してトランザクションを構築もしくはコマンドラインを使って構築する場合、これらの手数料を手動でトランザクションに含める必要がある。
トランザクション手数料は、トランザクションのデータサイズに基づいて計算される。送金する金額には影響を受けない。
マイナーがマイニングするブロックにどのトランザクションを選ぶかの判断条件には、トランザクション手数料の大きさも含まれる。そのため、十分な手数料を含むトランザクションほど次のブロックに含まれる可能性が大きく、手数料が十分でないもしくはゼロのトランザクションはブロックに取り込まれるのが遅くなる(または永遠に取り込まれない=承認されない)。
トランザクション手数料は必須ではなく、手数料がないトランザクションもときどきマイナーに処理されるが、手数料を含めることは、マイナーによる処理(承認)の優先順位を上げることにつながる。
※マイナーがトランザクションの優先順位づけに使用しているアルゴリズムについては別途記事を書こうと思います。
トランザクションへの手数料の追加
トランザクションのデータ構造には、手数料のためのフィールドはない(参考:ブロックチェーンにおけるトランザクションとは)。代わりに手数料はトランザクションインプットの総和とアウトプットの総和の差としてトランザクションに含まれる。
Fees = Sum(Inputs) - Sum(Outputs)
このため、自分でトランザクションを構築する場合、すべてのインプットを把握し、必要に応じておつりを自分に送るアウトプットを作成する必要がある。でなければ、高額な手数料をトランザクションに含めることになる。
例えば、20bitcoinのUTXOを消費して1bitcoinの支払いをする場合、19bitcoinのおつりをアウトプットに含める必要がある。でないと、19bitcoinはトランザクション手数料としてカウントされ、そのトランザクションを含むブロックをマイニングしたマイナーによって19bitcoinが集められることになる。