2017/09/17追記
以下のロジックはCoin Age Priorityという仕組みで、これはBitcoin Core 0.15.0で完全に削除されました。今後以下の優先度で判断されることはありません。
トランザクションの手数料や優先度についての知識がぼんやりしてたのでまとめてみる。
Bitcoinの取引を行う際に一定額以下の取引については手数料が発生する。
取引手数料はマイナーが処理し受け取るもので、ハッシュの生成に成功して新しいブロックができると、トランザクションの全ての情報はブロックに含まれ、全ての取引手数料はブロックを生成したマイナーに収集される。
Transaction fees - Bitcoin Wiki
参照実装の v 0.10.0の手数料と優先度に関する扱いは以下のとおり。
Bitcoinの送付
以下の条件が満たされる場合は、トランザクションを手数料無しで送信できる。
- 1000 バイト以下
- 全ての出力が0.01BTC以上
- トランザクションの優先度が充分大きい(優先度の算出方法は最後に記載)
↑以外のケースでは、トランザクションサイズが1000バイト毎に0.0001BTCが追加される。例えば、746 byteのトランザクションの手数料は0.0001BTCで1001バイトのトランザクションの手数料は0.0002BTCになる。
ユーザは1KBあたり0.0001 BTCというデフォルトの手数料設定値を増やすことができるけど、各トランザクションの取引手数料をコントロールすることはできない。Bitcon-QTの場合、(手数料が納得できない場合にトランザクションを取り消すことができるよう)トランザクションを送信する前にユーザに手数料を提示して送信するかどうか確認することができる。
典型的なトランザクションのサイズは500バイトくらいで、送付されたBTCの量に関係なく、低優先度のトランザクションのための典型的な手数料は0.0001 BTCとなる。
トランザクションのサイズはbitcoin-rubyであれば↓な感じで確認できる。
serialized = '0100000001517e5ee58a116c38227ebc798c2be0d04d516cef14020f3998f611a55247aa97020000006a47304402201ef071f974592da3acf6d879fb4d7ebed19ff3d19d96ea3ed747c4d09a7e71de022003bd1fa9c0b5311c956223a9b45e05901004b6be39cc7cac73d75580d082290f0121026454f388522601a9c035f03f7d0efb6f82c40ae65079249c31b4e668581357ddffffffff08c84b0000000000001976a91424b3d405bc60bd9628691fe28bb00f6800e1480688ac7b210000000000001976a91424b3d405bc60bd9628691fe28bb00f6800e1480688ac7b210000000000001976a91424b3d405bc60bd9628691fe28bb00f6800e1480688ac7b210000000000001976a91424b3d405bc60bd9628691fe28bb00f6800e1480688ac7b210000000000001976a91424b3d405bc60bd9628691fe28bb00f6800e1480688ac7b210000000000001976a91424b3d405bc60bd9628691fe28bb00f6800e1480688ac7b210000000000001976a91424b3d405bc60bd9628691fe28bb00f6800e1480688ac7e210000000000001976a91424b3d405bc60bd9628691fe28bb00f6800e1480688ac00000000' tx = Bitcoin::Protocol::Tx.new(serialized.htb) tx.to_payload.bytesize # ←このサイズ
ブロックに含める
参照実装で、どのトランザクションが新しいブロックに取り込まれるかは以下のルールで決まる。(以下はデフォルト設定で、マイナーによって設定は異なる)
リレー
P2Pネットワークを介してトランザクションを中継する際の参照実装のルールは、↑のBitcoin送付時のトランザクションのルールに似ていてトランザクションの値として0.00001 BTC が使われてるかどうかでそのトランザクションが無料かどうか判定する。ただしこのとき全ての出力が0.01BTC以上でなければ、このルールは適用されない。
デフォルト設定値
項目 | デフォルト値 |
---|---|
pattxfee | 0.0000 BTC |
mintxfee | 0.0001 BTC |
limitfreerelay | 15(1分あたり15000バイト) |
minrelaytxfee | 0.00001 BTC |
blockmaxsize | 750000 バイト |
blockminsize | 0バイト |
blockprioritysize | 50000バイト |