BTC手續費計算


BTC 交易過程中是需要支付手續費的,而開發人員在開發過程中只需要了解手續費的計算公式就可以了。本文主要講述一下手續費的計算規則,以及計算規則中的參數來源。
注:參考文檔精通比特幣

一、BTC 的手續費計算規則

BTC 在交易時時需要手續費的,而手續費的產生是與交易金額沒有關系的, 所以不要以為交易金額越高,手續費就越高。

BTC 在交易的時候,手續費與交易產生的字節數大小和當時交易池內的數據量多少有關。

字節數代幣交易打包的大小,單位是 byte。

字節數的計算公式:字節數 = 輸入數量 * 148 + 34 * 輸出數量 + 10
手續費的計算公式:手續費 = 字節數 * X satoshis / byte
其中 X 為計算手續費時的費率,x 的值交易時由用戶選擇的,根據交易所需時長的不同,費率不同。

二、費率的來源

手續費費率計算,與當時交易池內的交易數量有關,同時也與交易的打包速度有關。如下圖所示:

有上圖可以看出,打包時間越長,手續費越低。

三、字節數的計算

上面所述,字節數的計算公式為字節數 = 輸入數量 * 148 + 34 * 輸出數量 + 10。如下圖所示的一次交易,字節數 = 1 * 148 + 2 * 34 + 10(其中交易輸入為 1 個,交易輸出 2 個)。

10字節 來源

一次交易的JSON數據

{
  "version": 1,
  "locktime": 0,
  "vin": [
    {
      "txid":"7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18",
      "vout": 0,
      "scriptSig": "3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813[ALL] 0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf",
      "sequence": 4294967295
    }
 ],
  "vout": [
    {
      "value": 0.01500000,
      "scriptPubKey": "OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG"
    },
    {
      "value": 0.08450000,
      "scriptPubKey": "OP_DUP OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG",
    }
  ]
}

提示,10 字節的由來:

1. (4 字節)版本號
2. (4 字節)鎖定時間
3. (1 字節)輸入數量,1-9 字節可變長整型,用來顯示交易輸入數量。
4. (1 字節)輸出數量,1-9 字節可變長整型,用來顯示交易輸出數量。
總共:10 字節

148字節來源(交易輸入大小)

交易輸入的數據結構

"vin":
[
  {
    "txid": "7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18",
    "vout": 0,
    "scriptSig" : "3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813[ALL] 0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf",
    "sequence": 4294967295
  }
]

交易輸入序列化之后的大小如圖:

提示,148 的由來:

1.(32 字節)交易ID
2.(4 字節)輸出索引,用於反推本次交易來源與之間的哪個交易輸出
3. (1 字節)解鎖腳本大小,1 ~ 9 字節,使用時選擇 1。
4. (107 字節)scriptSig的長度為139個字節,或十六進制為8b
    - (1 字節)DER 格式簽名長度
    - (72 字節)DER 格式簽名
    -  (1 字節)公鑰長度
    - (33 字節)公鑰
5.(4 字節)序列號
總共:148 字節

34字節來源(交易輸出大小)

交易輸出數據結構為:

"vout": [
   {
     "value": 0.10000000,
     "scriptPubKey": "OP_DUP OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG"
   }
 ]

交易輸出各部分字節大小,如下圖:

提示,34 的由來:

1. (8 字節)交易金額
2. (1 字節)鎖定腳本大小,1 ~ 9 字節,計算式選擇最小值 1
3. (25 字節)鎖定腳本:25 字節
      - (4 字節)4 個操作碼,每個 1 字節
      - (1 字節)公鑰長度 
      - (20 字節)收款方公鑰
總共:34 字節


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM