虛擬位元組vBytes換算完整教學 從交易重量到比特幣手續費率的計算邏輯

虛擬位元組vBytes換算完整教學 從交易重量到比特幣手續費率的計算邏輯
字号
【导读】完整解析虛擬位元組vBytes換算:從交易重量公式 weight = 基礎大小×4 + 見證大小×1、vsize = ceil(weight÷4),到各類地址輸入輸出體積、sat/vB費率單位換算與RBF、CPFP加速時的費用重算,幫你精準估算比特幣手續費。

打開任何一個比特幣區塊瀏覽器,你會同時看到三個核心數字:交易大小(Size)、虛擬大小(Virtual Size,vsize)以及費率(sat/vB)。許多初學者常直接將「交易大小」乘上費率來估算成本,結果發現錢包扣除的金額遠低於計算值。要掌握真實成本,核心在於理解比特幣底層的虛擬位元組vBytes換算與交易重量架構。

區塊容量改用重量計算之後,字節數不再等於成本

2017 年 8 月隔離見證(SegWit,BIP141)在主網正式啟用,比特幣網絡的計量標準迎來重大升級。早期規則十分直觀:單個區塊上限為 1 MB,交易序列化後的原始字節數即等於佔用的區塊空間,費率單位以 sat/B(每位元組多少聰)計量。隔離見證將簽名與見證資料(Witness)自交易基礎資料中剝離,改由重量單位(Weight Units,WU)作為全網共識標準。

這項改動使交易具備兩種不同維度的尺寸:一個是在節點網絡間傳輸時實際消耗頻寬的原始大小(Raw Size),另一個則是經由折扣規則折算後的區塊配額。礦工打包交易收取手續費時,僅依據後者計費。在各類錢包中設定的「12 sat/vB」,分母即為虛擬位元組(vBytes,簡寫為 vB),與未折算的原始大小並不相等。

透徹掌握此項機制,有助於精確控制轉賬支出、預估確認時間,並在鏈上壅塞需要加速排隊時,精準算出最經濟的補貼金額。

交易重量與虛擬大小的換算公式

比特幣主網限制每個區塊的重量上限為 4,000,000 WU,折算為虛擬空間即為常見的 1,000,000 vB 額度。交易總重量由基礎部分與見證部分相加得出:

weight = 基礎大小 × 4 + 見證大小 × 1

vsize = ceil(weight ÷ 4)

基礎大小(Base Size / Stripped Size)指剔除見證資料後的核心交易體積;marker 與 flag 兩個位元組計入見證側,共佔 2 WU。

見證資料在計算中享受四分之一的重量折扣。交易中的簽名比例越高,折算後的 vB 相對原始體積就越精簡。需特別注意的是,公式中的 ceil() 為無條件進位函數。若一筆交易的重量為 562 WU,562 ÷ 4 = 140.5,最終的 vsize 必須進位判定為 141 vB。如果省略進位直接按浮點數計算,在大批量交易中會產生累積誤差。

比特幣交易基礎資料與見證資料按比例折算虛擬位元組vBytes換算邏輯架構
見證資料在重量計量中享有四分之一折扣,結合基礎資料加總後進位得出最終計費空間。

四種容量指標定義

計量名稱 涵蓋範疇 實際用途
原始大小(Raw Size) 完整字節串列,包含見證簽名 P2P 節點傳播與頻寬計算
基礎大小(Base Size) 去除見證簽名後的結構資料 重量權重的主要乘數(× 4)
重量(Weight,WU) Base × 4 + Witness × 1 比特幣區塊上限的法定標準(4M WU)
虛擬位元組(vBytes / vsize) ceil(Weight ÷ 4) 手續費率計價的核心分母

常見地址類型的輸入與輸出成本

交易的最終 vsize 是由「基礎固定開銷 + 各輸入花費成本 + 各輸出構造成本」加總後計算得出。選用的腳本類型會顯著影響體積分佈:

地址格式名稱 地址特徵 單個輸入體積 單個輸出體積
傳統地址(P2PKH) 以 1 開頭 約 148 vB 約 34 vB
嵌套隔離見證(P2SH-P2WPKH) 以 3 開頭 約 91 vB 約 32 vB
原生隔離見證(P2WPKH) 以 bc1q 開頭 約 68 vB 約 31 vB
Taproot 密鑰路徑(P2TR) 以 bc1p 開頭 約 57.5 vB 約 43 vB

很多人認為 Taproot(P2TR)在任何維度都是最省的,其實不然。P2TR 的輸出體積為 43 vB,高於 P2WPKH 的 31 vB;但在花費該資金時,P2TR 的密鑰路徑輸入僅需約 57.5 vB,大幅低於舊格式。此外,Schnorr 簽名在預設使用 SIGHASH_DEFAULT 時固定為 64 位元組,若帶有顯式 sighash 旗標則為 65 位元組,波動幅度遠小於 DER 編碼的 ECDSA 簽名(71 至 72 位元組)。整筆交易是否划算,需結合收付雙方的輸入與輸出數量綜合評估。

交易固定結構開銷

  • 版本號(Version):4 位元組
  • 輸入計數器(Input Counter):1 至 3 位元組(通常為 1 位元組,超過 252 個輸入時擴增)
  • 輸出計數器(Output Counter):1 至 3 位元組
  • 鎖定時間(Locktime):4 位元組
  • 隔離見證旗標(Marker & Flag):見證交易專用,貢獻 2 WU(折算名義值約 0.5 vB)

傳統交易的基本固定開銷為 10 位元組(40 WU)。隔離見證交易在折算後基礎開銷約 10.5 vB,這是一個在參與進位前的折算名義值,必須與所有輸入輸出的總重量相加後統一向上取整。

實戰換算:兩組真實交易推導演練

案例一:標準 1 輸入、2 輸出(P2WPKH)

情境設定為使用一個原生隔離見證 UTXO 付款,產生一個收款地址與一個找零地址:

  • 基礎資料結構:版本號 4 位元組 + 輸入計數 1 位元組 + 輸入主體 41 位元組(TXID 32 + VOUT 4 + 空 scriptSig 1 + Sequence 4)+ 輸出計數 1 位元組 + 兩組 P2WPKH 輸出 62 位元組(各 31 位元組)+ Locktime 4 位元組 = 113 位元組。基礎重量為 113 × 4 = 452 WU。
  • 見證資料結構:Marker & Flag 佔 2 WU;見證棧內容包含項目數、簽名長度、DER 簽名、公鑰長度及壓縮公鑰,合計 108 WU。見證總重量為 2 + 108 = 110 WU。
  • 總重量與 vsize:總重量 = 452 + 110 = 562 WU。虛擬大小 = ceil(562 ÷ 4) = 140.5,進位取整為 141 vB。

若設定費率為 12 sat/vB,總手續費為 141 × 12 = 1,692 聰(Sats)。此交易序列化後的原始體積(Raw Size)為 113 + 110 = 223 位元組。若誤將原始體積直接乘上 12,會得出 2,676 聰,估算值偏高達 58%。

案例二:3 輸入、2 輸出的格式成本對比

若因資金零碎,需要花費 3 個 UTXO 來完成一筆 2 輸出的轉賬:

方案 A(全 P2WPKH):基礎大小為 4 + 1 + (41 × 3) + 1 + (31 × 2) + 4 = 195 位元組(780 WU);見證大小為 2 + (108 × 3) = 326 WU。總重量為 1,106 WU。vsize = ceil(1106 ÷ 4) = 276.5,進位為 277 vB。在 12 sat/vB 下手續費為 3,324 聰。

方案 B(全傳統 P2PKH):基礎大小為 4 + 1 + (148 × 3) + 1 + (34 × 2) + 4 = 522 位元組。由於無見證資料,重量為 522 × 4 = 2,088 WU。vsize 即為其原始大小 522 vB。相同費率下成本跳升至 6,264 聰,成本增加近 88%。

虛擬位元組vBytes換算:傳統交易與隔離見證格式在多輸入場景下的區塊空間佔用對比
隔離見證技術分離簽名開銷,在多輸入交易情境下能大幅降低鏈上打包體積與手續費支出。

常見費率單位換算指南

開發者介面與區塊瀏覽器呈現費率的口徑各不相同。Bitcoin Core RPC 介面常用 BTC/kvB,瀏覽器通常顯示 sat/vB,混淆單位極易導致手續費高付或轉賬停滯。

計費單位 完整含義 換算關係
sat/vB 每虛擬位元組多少聰 基準計價單位
sat/kvB 每千虛擬位元組多少聰 = sat/vB × 1,000
BTC/kvB 每千虛擬位元組多少比特幣 = (sat/vB × 1,000) ÷ 100,000,000

若節點返回 0.00015 BTC/kvB,換算過程為:0.00015 × 100,000,000 ÷ 1,000 = 15 sat/vB。手動計算時,務必將各部分重量完整匯總後再行除以 4 取整,切勿逐項取整累加,以避免產生人為進位誤差。

粉塵閾值與找零處置邏輯

構建交易時,若收款後剩餘的金額極小,是否應生成找零輸出需要謹慎權衡。新增一個輸出會增加約 31 vB(P2WPKH)至 43 vB(P2TR)的體積,而該輸出本身的金額若低於節點的「粉塵門檻(Dust Limit)」,整個交易將被節點拒絕廣播。

在預設的 3 sat/vB 粉塵中繼費率下,各類型輸出的標準防粉塵下限為:

  • P2PKH 輸出:546 聰
  • P2WPKH 輸出:294 聰
  • P2TR 輸出:330 聰

建立找零輸出的邊際成本由「輸出 vB × 當前費率 + 粉塵下限」共同決定。在 50 sat/vB 的高費率環境下,建立一個 P2WPKH 找零的最低損益平衡點為 31 × 50 + 294 = 1,844 聰。若找零金額低於該數值,將該找零直接讓利充當手續費,反而能省去日後高額花費該 UTXO 的開銷。

交易受阻時的 vBytes 重新推算

鏈上費率飆升導致交易滯留在內存池(Mempool)時,主要透過費用替換(RBF)或以子貴父(CPFP)進行加速處理,兩者均深度依賴精確的虛擬大小重算。

費用替換(RBF)

自 Bitcoin Core 28.0 起,內存池預設啟用完全費用替換(Full RBF),不再嚴格依賴原交易是否包含 BIP125 信號。替換原則要求新交易支付更高的總費額,且增加的費用必須滿足最低增量中繼費率的要求。若原交易為 141 vB、支付了 1,692 聰(12 sat/vB),若欲提升至 30 sat/vB,只需廣播相同結構的新交易並支付 141 × 30 = 4,230 聰即可。

以子貴父(CPFP)

當無法發起 RBF 時,可花費未確認父交易的輸出建立子交易。礦工會將兩筆交易視為一個整體套件(Package)來評估平均費率:

有效組合費率 =(父交易手續費 + 子交易手續費)÷(父交易 vsize + 子交易 vsize)

若父交易為 141 vB、已付 1,692 聰,新建的 1 輸入 1 輸出 P2WPKH 子交易體積為 110 vB,二者合併 vsize 為 251 vB。若目標套件費率為 30 sat/vB,總費用需達 251 × 30 = 7,530 聰。扣除父交易已付部分,子交易必須單獨負擔 5,838 聰,其自身名義費率高達 5,838 ÷ 110 ≈ 53.1 sat/vB。

手算速查基準常數表

進行日常快速估算時,可運用下列經驗常數先行累加,最後統一向上取整:

元件類別 P2PKH (1) P2SH-P2WPKH (3) P2WPKH (bc1q) P2TR (bc1p Key-path)
單個輸入(Input) ~148 vB ~91 vB ~68 vB ~57.5 vB
單個輸出(Output) ~34 vB ~32 vB ~31 vB ~43 vB
固定開銷基準 見證交易折算名義開銷約 10.5 vB(非見證交易約 10 vB)

例如:2 個 P2WPKH 輸入、1 個 P2TR 輸出、1 個 P2WPKH 找零輸出,總體積估算為:10.5 + (68 × 2) + 43 + 31 = 220.5 vB,向上取整為 221 vB。若輸入超過 252 個或使用複雜腳本花費(Script-path),因計數器擴增及腳本證明體積上升,則應回歸原始重量公式逐項求和。

常見問題解答(FAQ)

Q1:為什麼同一筆交易在區塊瀏覽器中看到的 Size 和 Virtual Size 不一樣?

Size 代表序列化後的原始位元組數(Raw Size),直接反映傳輸頻寬需求;Virtual Size(vsize)則是引入隔離見證折扣後的名義計費大小。因見證數據享有 75% 的重量折扣,所有包含見證資料的現代交易,其 vsize 均會明顯小於原始 Size。

Q2:將地址全面升級為 Taproot(bc1p)是否一定能節省更多手續費?

不一定。Taproot 的主要優勢在於輸入端(約 57.5 vB),但其輸出體積(約 43 vB)高於原生隔離見證 P2WPKH(約 31 vB)。若轉賬場景為 1 輸入多輸出,使用 P2WPKH 反而更具成本優勢;只有在輸入數量較多或使用複雜多簽腳本時,Taproot 才能發揮最大的費率節省效益。

Q3:手動計算 vsize 時,為什麼必須在最後一步才進行向上取整?

比特幣共識規則是以全交易的總重量(WU)為單位進行校驗,公式為 ceil(weight ÷ 4)。若在計算各個輸入與輸出的過程中提早進位,會人為虛增 1 到 2 vB;在高頻或批量轉賬業務中,此類累積誤差會直接轉化為不必要的成本支出。

Q4:為什麼設定了足額費率,交易依然可能在內存池中長時間擱置?

內存池的競爭是即時變動的。若廣播後全網突發大批高費率交易,礦工會優先打包費率更高的交易。此外,若錢包在估算時少算了實際簽名輸入數量,會導致最終廣播的交易體積超出預期,進而稀釋了實際生效的 sat/vB 費率。

admin

作者负责资讯整理、核查与撰写。 · 已发布 93 篇文章

查看作者全部文章