トランザクション手数料を計算する

ビットコイン・トランザクション手数料の仕組み - インプット、アウトプット、トランザクション・サイズ、手数料率の関係。

0ステップ ·

進捗 0/0

何を学ぶか

  • 基本的な手数料方程式:インプット - アウトプット = 手数料
  • 手数料率(sat/vB)が確認優先度を決める仕組み
  • ブロードキャストの前にトランザクションのサイズを見積もる方法

手数料方程式

ビットコイン・トランザクションには明示的な「手数料」フィールドがありません。手数料は暗黙的です:

Fee = Sum of Input Values - Sum of Output Values

インプット総額が500,000サトシで、アウトプット総額が490,000サトシなら、手数料は10,000サトシです。マイナーはこの差額をあなたのトランザクションをブロックに含める報酬として集めます。

これがおつりアウトプットを忘れることが破滅的な理由です。1 BTCのインプットを持ち0.001 BTCのアウトプットだけを作ると、あなたは0.999 BTCの手数料を払ったことになります - 典型的な価格でおよそ$60,000です。

手数料率:sat/vB

マイナーは総手数料ではなく手数料密度を最適化します。500 vBytesを取り10,000 satsを支払うトランザクションは、100 vBytesを取り5,000 satsを支払うトランザクションより魅力が少ないです。

標準単位は**仮想バイトあたりのサトシ(sat/vB)**です:

Fee Rate = Total Fee ÷ Transaction Size (vBytes)

現在の手数料率はネットワーク需要に伴って変動します。ライブ・レートはmempool.spaceで確認できます:

優先度典型範囲ユースケース
20-100+ sat/vB次ブロック確認
5-20 sat/vB数時間以内
1-5 sat/vB一日以上待てる

トランザクション・サイズの見積もり

トランザクションを作る前に手数料を計算するには、サイズを見積もる必要があります。一般的なコンポーネントの典型サイズ:

レガシー(非SegWit)トランザクション

コンポーネントサイズ
Version4 バイト
インプット数1 バイト
各インプット (P2PKH)~148 バイト
アウトプット数1 バイト
各アウトプット (P2PKH)34 バイト
Locktime4 バイト

典型的な1インプット、2アウトプットのレガシー・トランザクション:~226 バイト

SegWitトランザクション

SegWitはウィットネス・データに割引を適用する**仮想バイト(vBytes)**を導入しました:

vBytes = (Weight Units) ÷ 4
Weight = (non-witness bytes × 4) + (witness bytes × 1)
コンポーネントWeight
Version16 WU (4 bytes × 4)
Marker + Flag2 WU (2 bytes × 1, witness)
各インプット (P2WPKH)~164 WU base + ~108 WU witness
各アウトプット (P2WPKH)124 WU (31 bytes × 4)
Locktime16 WU

典型的な1インプット、2アウトプットのP2WPKHトランザクション:~141 vBytes(レガシー226バイトと比べて)。SegWitは手数料でおよそ38%を節約します。

実践的な手数料計算

チュートリアル・トランザクションの手数料を計算してみましょう:

Transaction: 1 P2WPKH input, 2 P2WPKH outputs
Estimated size: ~141 vBytes
Target fee rate: 10 sat/vB

Fee = 141 × 10 = 1,410 satoshis

これでおつりアウトプットを設定できます:

Input value:     500,000 sats
Payment output:  300,000 sats
Fee:               1,410 sats
Change output:   198,590 sats  (500,000 - 300,000 - 1,410)

ダスト限界

一定の閾値を下回るアウトプットはダスト(dust)と見なされます - それらは価値よりも使うのにかかる手数料の方が多いのです。Bitcoin Coreのデフォルト・ダスト限界はP2PKHで546サトシ、P2WPKHで294サトシです。ダスト・アウトプットを作るトランザクションはほとんどのノードに拒否されます。

計算されたおつり金額がダスト限界を下回る場合、小さくて使えないアウトプットを作る代わりに手数料に追加する方が良いです。

RBFによる手数料バンピング

手数料率を低く設定しすぎてトランザクションが詰まったら、Replace-By-Feeを使ってより高い手数料で置換トランザクションを作れます。これがステップ3でシーケンス番号を0xfffffffdに設定した理由です - RBFの適格性を示します。

次のステップ

生トランザクションのシリアライゼーションに進み、インプット、アウトプット、メタデータを単一の16進文字列に結合しましょう。