Transactions

如何準確計算一筆交易的vsize?

  • July 7, 2022

有一個交易txid是fa3467452918627ebd63a3e8570e70d38b0eefef683347510b204ba6962ebe44,使用bitcoin-cli我們可以看到它的大小,vsize和重量

在此處輸入圖像描述

我們可以得到它的十六進制,它是準確的 225。使用公式 vsize=(weight+4-1)/4=576/4=144,沒有問題

但是在計算vsize字節時,應該是(573-225)/3=116,但是這個交易中的見證數據是 在此處輸入圖像描述

當我從原始十六進制(225 字節)中刪除 txinwitness 十六進制數據(在下圖中選擇)時,我無法得到結果 116。哪裡出錯了?誰能告訴我如何計算?非常感謝。 在此處輸入圖像描述

由於 JSON 解碼不輸出各種計數器的十六進制值以及隔離見證標記和標誌字節,因此無法僅從交易的 JSON 解碼計算大小、重量或 vsize。如果您嘗試僅使用輸出的資訊來重建事務,您最終會得到一個小於實際大小的總大小。

在您的範例中,事務十六進制是

020000000001017fb11165fc5a6edf3bf06176c8915b22e20c3c48966d1d5c5673d4bc76a98c6e0100000000fdffffff024a140000000000001976a9145e3a929c6f941ad02c352b47d33a65bd160afe2f88accc8c0700000000001600149aba0ec86126b94b4dfdff48c4855ec49975c8e50247304402200615b90428b7e857d074ef17da69d5d533adc2c02fb739b04ecb88e38723afcd0220070f30781a8020ba0330a96b2a58358c5b5073ed391cee50ea1650e3972fcb0d012102030df0337a88e6f5c77f593eeb8b9d425742fbee78a4dcfeb66f90dec8e30bf25d560b00

讓我們將其分解為單獨的欄位,以便我們可以區分哪些是基本大小的一部分。

  • 02000000- 交易版本、基本大小和總大小 += 4
  • 00- 隔離見證標記,總大小 += 1
  • 01- 隔離見證標誌,總大小 += 1
  • 01- 輸入計數、基本大小和總大小 += 1
  • 7fb11165fc5a6edf3bf06176c8915b22e20c3c48966d1d5c5673d4bc76a98c6e- 以前的 txid、基本大小和總大小 += 32
  • 01000000- 輸出索引、基本尺寸和總尺寸 += 4
  • 00- scriptSig 的長度、基本大小和總大小 += 1
  • fdffffff- 序列號、鹼基大小和總大小 += 4
  • 02- 輸出計數、基本尺寸和總尺寸 += 1
  • 4a14000000000000- 輸出量、基本尺寸和總尺寸 += 8
  • 19= scriptPubKey 長度、基本大小和總大小 += 1
  • 76a9145e3a929c6f941ad02c352b47d33a65bd160afe2f88ac- scriptPubKey,基本大小和總大小 += 25
  • cc8c070000000000- 輸出量、基本尺寸和總尺寸 += 8
  • 16- scriptPubKey 長度、基本大小和總大小 += 1
  • 00149aba0ec86126b94b4dfdff48c4855ec49975c8e5- scriptPubKey,基本大小和總大小 += 22
  • 02- 見證堆棧項目計數,總大小 += 1
  • 47- 見證堆棧項目長度,總大小 += 1
  • 304402200615b90428b7e857d074ef17da69d5d533adc2c02fb739b04ecb88e38723afcd022070f30781a8020ba0330a96b2a58358c5b5073ed391cee50ea1650e3972fcb0d01- 見證堆棧項目,總大小 += 71
  • 21- 見證堆棧項目長度,總大小 += 1
  • 02030df0337a88e6f5c77f593eeb8b9d425742fbee78a4dcfeb66f90dec8e30bf2 - 見證堆棧項目,總大小 += 33
  • 5d560b00- 鎖定時間、基本大小和總大小 += 4

所以基礎尺寸是 116,總尺寸是 225。重量是3 * 116 + 225 = 573

從權重計算出來的 vsize 是(573 + 4 - 1) / 4 = 144。從尺寸計算 vsize 是ceil(116 + (225 - 116) / 4) = 144.

引用自:https://bitcoin.stackexchange.com/questions/114375