Transactions
如何準確計算一筆交易的vsize?
有一個交易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
- 交易版本、基本大小和總大小 += 400
- 隔離見證標記,總大小 += 101
- 隔離見證標誌,總大小 += 101
- 輸入計數、基本大小和總大小 += 17fb11165fc5a6edf3bf06176c8915b22e20c3c48966d1d5c5673d4bc76a98c6e
- 以前的 txid、基本大小和總大小 += 3201000000
- 輸出索引、基本尺寸和總尺寸 += 400
- scriptSig 的長度、基本大小和總大小 += 1fdffffff
- 序列號、鹼基大小和總大小 += 402
- 輸出計數、基本尺寸和總尺寸 += 14a14000000000000
- 輸出量、基本尺寸和總尺寸 += 819
= scriptPubKey 長度、基本大小和總大小 += 176a9145e3a929c6f941ad02c352b47d33a65bd160afe2f88ac
- scriptPubKey,基本大小和總大小 += 25cc8c070000000000
- 輸出量、基本尺寸和總尺寸 += 816
- scriptPubKey 長度、基本大小和總大小 += 100149aba0ec86126b94b4dfdff48c4855ec49975c8e5
- scriptPubKey,基本大小和總大小 += 2202
- 見證堆棧項目計數,總大小 += 147
- 見證堆棧項目長度,總大小 += 1304402200615b90428b7e857d074ef17da69d5d533adc2c02fb739b04ecb88e38723afcd022070f30781a8020ba0330a96b2a58358c5b5073ed391cee50ea1650e3972fcb0d01
- 見證堆棧項目,總大小 += 7121
- 見證堆棧項目長度,總大小 += 102030df0337a88e6f5c77f593eeb8b9d425742fbee78a4dcfeb66f90dec8e30bf2
- 見證堆棧項目,總大小 += 335d560b00
- 鎖定時間、基本大小和總大小 += 4所以基礎尺寸是 116,總尺寸是 225。重量是
3 * 116 + 225 = 573
。從權重計算出來的 vsize 是
(573 + 4 - 1) / 4 = 144
。從尺寸計算 vsize 是ceil(116 + (225 - 116) / 4) = 144
.