LoginSignup
4
4

More than 5 years have passed since last update.

ビットコイントランザクションの手数料の求め方

Last updated at Posted at 2015-07-27

手数料の求め方

  • 手数料はトランザクションバイト数から求めます
  • 1バイトあたり手数料という概念があります
  • トランザクションバイト数 * 1バイト当たり手数料 が手数料になります
  • 古いコインは無料(coin age)という考え方もあるらしいですがここでは無視します※1

サンプルとして以下のような計算になります

トランザクションバイト数=226
1バイト当たり手数料=90
手数料= 226 * 90 = 20340

※1 なぜ無視するかというと実際にどのトランザクションをブロックに取り込むかを選ぶ権利はマイナーにあって、普通の競争原理から考えて手数料のないトランザクションはよほど手数料が低いときでないと選ばれないからです。
マイニングプールのアルゴリズムの実装は割と自由なのでそうなっている可能性が高いです。
世の中カネです

1バイト当たり手数料

  • 21という会社が公開しています
  • APIでも取得できます
  • ネットワークの混雑状況によって変化することがあります
  • https://bitcoinfees.21.co/

トランザクションバイト数

トランザクションバイト数は以下の式で求められます

s = スクリプトバイト数
i = 入力数
o = 出力数
txbyte = (s * i) + (34 * o) + 10

スクリプトバイト数はトランザクションの内容によって計算式が異なります。

P2PKH

P2PKHは以下のようなフォーマットです

PREVOUT: hash (32 bytes)
         index (4 bytes)
SCRIPTSIG: length (1 byte)
           CONTENTS: push opcode (1 byte)
                     signature (71 or 72 bytes)
                     push opcode (1 byte)
                     pubkey (33 bytes for compressed, 65 for uncompressed)
sequence (4 bytes)

= 147 or 148

スクリプトバイト数は147 ~ 148なので148とします

P2PKHのトランザクションバイト数は以下のような計算式になります

s = 148
txbyte = (s * i) + (34 * o) + 10

P2SH

2of3マルチシグの場合のP2SHは以下のようなフォーマットです

PREVOUT: hash (32 bytes)
         index (4 bytes)
SCRIPTSIG: length(3byte)
           OP_0(1byte)
           sig1(73byte) sig2(73byte) OP_2(1byte)
           pubkey1(34byte) pubkey2(34byte) pubkey3(34byte) OP_3(1byte)
           CHECKMULTISIG(1byte)
sequence (4 bytes)

= 295byte

マルチシグトランザクションのスクリプトバイト数は以下の計算式で求められます

m = 署名の数
n = 公開鍵の数
s = (73 * m) + (34 * n) + 47

P2SHのトランザクションバイト数は以下のような計算式になります

s = (73 * m) + (34 * n) + 47
txbyte = (s * i) + (34 * o) + 10

参考資料

JS実装

詳しい実装は以下を参照

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4