Segwit塊大小(Block Size)和區塊重量(Block Weights)

買賣虛擬貨幣
這是一個古老的話題,然而,我覺得它必須被分享,因為在Segwit實現之後仍然聽到一些關於塊容量和塊載量的困惑。要理解這些,我們必須首先了解在Segwit之後對事務結構所做的更改。Segwit之前和之後的交易· 在Segwit之前:每個事務都有一個事務雜湊值、輸入指令碼、指令碼簽名和輸出指令碼。

· 在Segwit之後:為每個事務輸入指令碼和指令碼簽名,在Segwit中這些指令碼簽名被替換為EMPTY和OP_TRUE。在另一個名為Witness的部分中替換了輸入指令碼和指令碼簽名。Witness可選儲存。這意味著您可以選擇儲存或不儲存證人。這可能會提出一個問題,如果你不儲存證人,你如何驗證交易?事實上,我們不能。如果您不儲存證人,您無法驗證該事務,您的節點將把該事務視為空投。在我寫這篇文章時,90%的節點是Segwit,其餘10%不是。這意味著,這10%的節點不儲存證人。

在Segwit中,證人用scriptSig分隔,input_script分別用塊中的OP_TRUE和EMPTY替換
區塊中的Segwit交易眾所周知,每個Merkle根是每次獲取兩個事務的雜湊值。如前所述,除了輸入指令碼和指令碼簽名之外,witness與事務本身是分離的。  現在構造了一個單獨的Witness trie,它附加在Coinbase事務的末尾。就像交易條件一樣,證人也有證人條件。Witness Trie Root現在也包含在塊頭中。

如前所述,證人是可選的。這意味著,如果您正在執行非segwit或遺留節點,則可以刪除/不下載圖中綠色表示的Witness Trie。這樣做是為了確保Segwit是向後相容的,因此它是軟叉。

交易容量和交易載量的概念

Segwit被引入後,一個新的載重概念被引入。

segwit交易分為兩部分:

· 交易的Segwit部分:交易的證人被劃分為交易的Segwit部分。
· 交易的Segwit部分:除證人外的所有其他部分都屬於交易的非Segwit部分。

這意味著,Segwit事務有兩個部分,即Segwit部分和非Segwit部分,而非Segwit事務只有一個部分(預設情況下,這是事務的非Segwit部分)

任何交易的載重由一個簡單的公式定義:

3*(non-segwit-part-of-transaction) + 1*(segwit-part-of-transaction)

這意味著,如果一個交易是遺留交易,那麼它的載重更大,因為它的所有部分都是非部分交易

Tx的總權值= 1*(segwit-data) + 3*(non-segwit-data)。
塊權值定義為塊中所有事務的權值之和。塊大小、Segwit塊大小和區塊重量現在一個塊可以包含遺留事務和segwit交易。在我們繼續之前,我們必須知道這三個術語的簡單定義。(注:以上為粗略定義,僅供簡單解釋):· 塊大小: 塊中所有非segwit資料的大小之和+ 塊頭。
· Segwit塊大小: 塊中所有非Segwit資料的大小之和+塊中所有Segwit資料的大小之和+塊頭· 區塊重量: 塊中所有事務的權值只和。比特幣對塊大小的限制是1MB。在我撰寫本文時,這裡的示例塊大小為1204.232 Kb。這是指Segwit塊的容量。如果從這個塊中刪除segwit資料,那麼塊大小將小於1Mb。塊的最大載重可以是4MBU下面的圖說明了一個塊如何具有segwit和非segwit事務,以及如何計算塊大小、segwit塊大小和塊載重。(本例中為2個Segwit事務和4個非Segwit事務)
實現segwit後的常規塊,以及如何計算塊遺留塊大小、segwit塊大小和塊載重。
這表明,在遺留塊的大小小於1MB之前,它是鏈上的有效塊。其中segwit塊大小可以大於1mb,但必須確保塊載量小於4MB。我們可以將圖表等同如下:legacy_block_size = Σ(size_of_non-segwit-data_of_each_transaction)segwit_block_size = legacy_block_size + Σ(size_of_segwit-data_of_each_transaction)一個塊,non_segwit_weight segwit_weight被定義為non_segwit_weight = 3*∑(size_of_non-segwit-data_of_each_transaction)
segwit_weight = 1*∑(size_of_segwit-data_of_each_transaction)block_weight = non_segwit_weight + segwit_weight一個塊是有效的:legacy_block_size <= 1 MBblock_weight <= 4MBU結論
· 如果您執行一個Segwit節點,您將收到可能大於1MB的Segwit塊,而如果您執行一個非Segwit節點,Segwit塊中的所有證人都將被刪除,該塊將成為遺留塊。這個遺留塊小於1MB。· Segwit是一個軟分支,這意味著不從遺留節點更改為Segwit仍然會使您的節點在鏈上成為一個有效的、及時的節點。但是,您將無法驗證該塊中segwit事務的有效性。· 對於非挖掘節點,segwit是一個優勢,因為現在隨著證人的移除,更多的事務被放入塊中。· 然而,這並沒有被普遍接受,因為社羣中的一些人對Segwit感到不舒服,原因是一些節點沒有證人/簽名。這導致了鏈分裂,並創造了比特幣現金。比特幣現金現在有一個可調整的塊大小。· 就像遺留地址一樣,Segwit地址也存在。對於遺留地址,P2PKH和P2SH分別代表“支付到公鑰雜湊值”和“支付到指令碼雜湊值”。對於Segwit地址,P2WPKH和P2WSK分別代表“付費見證Pubkey Hash”和“付費見證Script Hash”。至於每一地址的製作方法將在另一篇文章中討論。更多數字貨幣資訊:www.qukuaiwang.com.cn/news

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;