Bitcoinのトランザクションサイズと手数料の計算方法




Bitcoinのトランザクションサイズはどのくらい手数料を払わないといけないかに大きく関わるので非常に重要な事項です。

このトランザクションサイズを計算するためにはまずBitocinのトランザクション構成がどうやって作られているか知る必要があります。

まずはざっくりトランザクションの概要を確認してからより詳細に中身をみて最終的にトランザクションのサイズを計算できるようになりたいと思います。

Bitcoinトランザクションの大枠

Bitcoinは大きく下記項目でできています。これら一つ一つを見ていくことでトランザクションサイズを計算することができます。

  • Version No
  • Marker
  • Flag
  • Input Count
  • Input
  • Output Count
  • Output
  • Witness
  • Lock Time

Version

トランザクションのコンセンサスルールのバージョンを指定します。BIP68で定義されているみたいです。

このデータサイズは4 bytesです。

Maker

BIP68に対応しているかどうかのマーカーでこのデータサイズは1 byteで必ず0が入ります。

Flag

witnessトランザクションかどうか判定するのに使います。

このデータサイズは1 byteです。

Input / Output Counter

トランザクションを構成するvinとvouotの数です。Input

このデータサイズはそれぞれ1 ~ 9 bytesです。

Input

Inputを構成するデータはtxid、n、Script Length、ScriptSig、Sequenceです。

Script LengthはScriptSigの長さをバイト数で指定します。SequenceはLock Timeを使用しない場合0xFFFFFFFFを指定します。

それぞれ32 bytes、4 bytes、1 ~ 9 bytes、any bytes、4 bytesです。

Output

Outputを構成するデータはValue、ScriptPubKey Length、ScriptPubKeyです。

ScriptPubk LengthはScriptPubKeyの長さをバイト数で指定します。

それぞれ8 bytes、1 ~ 9 bytes、any bytesです。

Witness

任意の数の署名データを入れます。

Lock Time

Lock Timeを使わない場合は0を指定します。データサイズは4 bytesです。

トランザクションサイズの計算方法

以上がBitcoinのデータ構造の大枠なのでこの中でデータサイズが固定なものと変動するものをみてみます。

データサイズが固定なもの

Version、Marker、Flag、Lock Timeはそれぞれ4 bytes、1 byte、1 byte、4 bytesなので合計で10 Bytesになります。

データサイズが変動するもの

Input、OutputとそれぞれのCounter、Witnessなどは使用するUtxoと送金先の数により変動します。

手数料計算

上記全てを計算することで1つのトランザクションのサイズがわかります。あとはsatoshi/byteをかけることで実際に送金に必要な手数料を得ることができます。

まとめ

Bitcoinの送金にかかる手数料はデータ構造を把握することで割と簡単に導出することができます。

今度はトランザクションを実際に構築する方法などを説明していきたいと思います。

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です