Segregated-Witness

字節和虛擬字節(vbytes)之間有區別嗎?

  • September 29, 2021

在 Optech 時事通訊中,使用 vbytes 來表示大小。vbytes 和 bytes 之間有區別嗎?如果是這樣,有什麼區別?

是的,他們指的是兩個不同的指標:sizevirtual size (vsize)

  • 交易的[bytes]大小是指其序列化格式的原始字節長度。它用於衡量交易在網路上中繼或儲存在磁碟上時的數據足跡。
  • [ vbytes ] 中的vsize 是指交易在隔離見證規則下的加權大小。它用於比較需要分配多少塊權來確認交易。

塊重量限制

比特幣區塊的交易容量有限。在啟動隔離見證 (segwit) 之前,區塊大小被限制為1,000,000字節。在該範式下,事務的大小對應於其序列化格式的字節數。

segwit 軟分叉的啟動將塊大小限制替換為 4,000,000 [重量單位 (wu)]的塊**重量限制。**新的協議規則將交易的權重定義為以 1 倍計數的見證字節和以 4 倍計數的非見證字節的總和。

weight [wu] = 4 [wu/B] × non-witness length [B] + 1 [wu/B] × witness length [B]

由於非隔離見證交易沒有任何見證數據,因此在規則更改前後非隔離見證區塊的規則相同:

1 B / 1,000,000 B = 4 wu / 4,000,000 wu

一個字節與先前塊大小限制的部分相同,與新塊重量限制的四個權重單位相同。沒有見證人的交易、非隔離見證交易所佔用的區塊重量部分與他們在隔離見證啟動之前所佔用的區塊大小完全相同。這允許將 segwit 作為向前兼容的軟分叉引入。

其次是折扣

對於包含見證數據的 segwit 交易,生成的交易權重嚴格小於4 × size由於見證字節的貢獻率較低而導致的交易權重。這導致包含隔離見證交易的區塊權的相對比例低於同等的非隔離見證交易。採用隔離見證輸出格式可以有效增加容量。隔離見證塊可能超過 1,000,000 字節的原始字節大小,例如,迄今為止最大的塊達到了 2,424,027 字節的原始字節大小。

費率及其單位

在 segwit 啟動之前,使用者以 [bytes] 為單位測量交易大小,以 [satoshis per byte] 為單位測量費用。由於 segwit 啟動,協議以 [重量單位] 為單位按重量測量交易。在協議級別,這將費率值的範圍移動了四倍。

Segwit 在 [virtual bytes (vbytes)] 中引入了測量**虛擬大小 (vsize)**以方便比較 segwit 啟動前後的費用。vsize是通過將交易權重除以四來計算的:vsize [vB] = weight [wu] / 4

因此 的值fee per vsize範圍與 pre-segwit 的範圍相匹配fee per size。直到今天(2020 年 10 月),以 [satoshis per vbyte] 為單位跟踪費率仍然很流行。

如果您正在尋找一個平易近人的例子,請查看這個與具體值的詳細比較: 如何比較傳統地址格式和原生 segwit 之間的虛擬大小、剝離大小和原始大小?

對於非跟隨事務,vbytes = 字節。

隨著 SegWit 的實施,我們現在可以看到塊/交易的權重,而不是看到線路上的絕對大小。在計算交易的權重時,我們對正常交易組件(例如簽名)使用權重 4,對見證組件使用權重 1。現在 vbyte 總是等於 weight/4。

以下將計算區分線上的 vbytes 和實際字節數。令 St 為以傳統格式(不包括見證)序列化事務所需的字節數,而 Sw 為序列化見證組件所需的字節數。

Weight of the transaction = St*4 + Sw
vbytes = (St*4 + Sw)/4 = St + Sw/4
actual size on wire = St + Sw
difference = (3/4)*Sw

由於非 SegWit 交易不會將簽名隔離到見證組件 Sw = 0,因此 vbyte 等於正常字節。

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