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の送金にかかる手数料はデータ構造を把握することで割と簡単に導出することができます。
今度はトランザクションを実際に構築する方法などを説明していきたいと思います。
髙妻智一
最新記事 by 髙妻智一 (全て見る)
- Polkadot(Substrate)のアドレスとトランザクションについて - 2023-03-09
- 【無料公開】「Goで始めるBitcoin」3章 Bitcoinノードとの通信 技術書典8 - 2020-03-08
- エンジニアがゼロから技術ブログを書くための方法をまとめました - 2019-05-25
コメントを残す