什麼是隔離見證(SegWit)


隔離見證,通常縮寫為SegWit,是2017 年在Bitcoin Core 中激活的協議更新。隔離見證改進了比特幣的幾個方面,並為進一步更新打開了大門,包括Taproot。

首先,也是最重要的,SegWit 解決了交易的可塑性問題。此更新還增加了塊大小限制,允許在每個塊中包含更多事務。最後,通過隔離見證,引入了兩種新類型的腳本——發送和接收比特幣的方式——以及一種新的編碼方案:bech32。

SegWit 更新一直飽受爭議,其激活在比特幣社區引起了深刻爭議。然而,結果卻使比特幣變得更強大、更具可擴展性,同時證明其去中心化模型能夠成功承受來自礦工和社區領袖的最大壓力。

什麼是交易可塑性?

交易可塑性是指一筆交易擁有多個有效txid 的能力。當交易的一部分可以在簽名後更改而不會使簽名無效時,就會出現可塑性。由於txid 是交易的哈希值,因此對交易的任何更改都會更改其txid。但是,更改txid 並使簽名無效的更改不是問題; 可塑性問題僅由更改txid 的更改產生,但不會使交易簽名無效。

為什麼交易可塑性是一個問題

交易可塑性對於開發人員和用戶來說是一個問題,他們在新的費用交易中希望在區塊鏈上確認之前參考之前的交易。問題出現是因為為了使用前一個交易生成的輸出,費用交易必須引用前一個交易的txid。如果之前交易的txid 發生變化,鏈接將失效,新的費用交易也將失效。

尤其是交易可塑性問題阻礙了閃電網絡的成功實施,閃電網絡主要基於未經鏈上確認的比特幣交易的交易所。

SegWit 如何解決交易可塑性問題

導致塑性問題的方法有兩種。首先,在交易簽署後,可以將附加數據添加到scriptSig,即包含簽名和用於解鎖比特幣的其他數據的交易部分。其次,可以更改包含在scriptSig 中的簽名本身。這兩個選項都是可能的,因為簽名不能確認自己,因此不能確保其自身的不變性。由於scriptSig 及其包含的簽名是txid 原像的一部分,如果它們發生變化,txid 也會發生變化。

隔離見證通過從scriptSig 中刪除所有數據來消除這種可能性。這是通過移動scriptSig 數據——通常是簽名和公鑰——來實現的,這是SegWit 交易的新部分,在計算txid 時沒有散列。因此,SegWit 輸入的scriptSig 在交易簽署後變得不可變,解鎖比特幣所需的數據(不是不可變的)包含在見證部分中。在此配置中,scriptSig 無法更改,這意味著在不使整個交易無效的情況下無法更改txid。

隔離見證使閃電網絡成為可能

隔離見證激活允許啟動閃電網絡,這是一個運行在比特幣網絡之上的第2 層協議。在SegWit 激活之前,這是不可能的,因為閃電網絡主要基於未經證實的比特幣交易,而塑料交易會為網絡攻擊創造機會。

使用SegWit 增加區塊大小

雖然隔離見證在技術上是一個軟分叉,但它以向後兼容的方式修改了一項重要的比特幣共識規則,以增加每個區塊中可以包含的交易數量。

在SegWit 被激活之前,每個區塊的大小被限制為1 MB,這對應於一個完整區塊中大約1650 筆交易。隔離見證引入了塊權重的概念,它取代了塊大小作為限制因素。今天,完整的區塊包含大約2,700 筆交易。

塊大小是對事務中總字節數的度量。在SegWit 之前,此限制設置為1 MB,即100 萬字節。

塊重量以重量單位計算(wu,來自重量單位)。 1字節的交易數據,加上witness部分,對應4個wu,1個字節的witness數據對應1個wu。最大塊權重設置為400 萬吳。重要的是,對於僅包含舊類型(非SegWit)交易的塊,此400 萬wu 的限制將等同於100 萬字節的舊限制。

這種新的測量方法允許以向後兼容的方式增加塊大小,以便更新可以在沒有硬分叉的情況下進行軟分叉,但它也為比特幣礦工和用戶使用SegWit 創造了經濟激勵。用戶通過發送SegWit 交易可以節省佣金,因為見證數據花費更少的塊權重,並且礦工,包括在塊中的SegWit 交易,可以將更多的交易放入他們的塊中,從而增加佣金收入。

隔離見證中的新腳本類型

腳本類型是使用比特幣腳本腳本語言跨區塊鏈發送比特幣的不同方式。隨著交易中witness字段的引入,SegWit引入了兩種使用它的新腳本類型:Pay-to-Witness-Pubkey-Hash (P2WPKH)和Pay-to-Witness-Script-Hash (P2WSH)。

付費見證公鑰哈希(P2WPKH)

在SegWit 之前,絕大多數用戶使用Pay-to-Pubkey-Hash (P2PKH) 腳本將比特幣綁定到公鑰哈希。 SegWit 引入的Pay-to-Witness-Pubkey-Hash (P2WPKH) 的功能與P2PKH 幾乎相同,但有一個重要區別。當用戶使用P2WPKH 輸出時,簽名和公鑰——解鎖P2PKH 和P2WPKH 輸出所需的兩個數據點——存儲在見證字段中,scriptSig 留空。如前所述,這樣做是為了防止txid 可塑性。

支付給見證人腳本哈希(P2WSH)

第二個最流行的舊腳本類型是Pay-to-Script-Hash (P2SH),它允許你將比特幣綁定到一個名為redeemScript 的任意腳本的哈希值。然後,任何可以提交適當的贖回腳本並滿足其中指定要求的人都可以解鎖這些比特幣。

在SegWit 之前,P2SH 最常用於多重簽名,因為它比簡單多重簽名等替代方案節省了空間。

SegWit 實現了Pay-to-Witness-Script-Hash (P2WSH),其功能類似於P2SH。 P2WSH 輸出可以通過提供witnessScript(SegWit 相當於redeemScript)和witnessScript 中定義的簽名和公鑰來使用。

點評隔離見證

兩種新型腳本的引入是比特幣協議的一項重大創新,不能指望許多不同的錢包、應用程序和服務立即適應這一重大變化。為了簡化SegWit 的實現並使其更加漸進,在遺留腳本類型和SegWit 腳本類型之間建立了一座“橋樑”。

該橋稱為Wrapped SegWit,是舊P2SH 腳本的一種形式。封裝的SegWit 腳本採用原生SegWit 腳本、P2WPKH 或P2WSH,並將其用作P2SH 腳本的贖回腳本。因此,兩種類型的Wrapped SegWit 腳本是P2SH-P2WPKH 和P2SH-P2WSH。

這種設計允許舊錢包和其他軟件將比特幣發送到SegWit 地址,即使它們本身不支持SegWit。 Wrapped SegWit 交易的接收者可以使用比特幣作為SegWit 登錄名,從而節省費用。

新的SegWit 編碼方案

SegWit 更新還為SegWit 地址引入了一種新的編碼方案,稱為bech32。在SegWit 之前,比特幣地址和密鑰使用Base58 方案進行編碼,該方案使用大寫和小寫字母。

Bech32 被提出並被接受為對Base58 的改進,因為它從不使用混合大小寫,使其更易於閱讀或破譯,更適合QR 編碼。此外,bech32 具有內置的錯誤檢測機制,可幫助用戶和錢包檢測甚至更正比特幣地址的拼寫錯誤或更改。

Bech32 還使原生SegWit 地址易於識別,因為它們以bc1 開頭並且僅使用小寫字母。由於bech32 只使用了32 個字母,這些地址比Base58 地址略長,但它們在區塊鏈本身上佔用的空間更少。

隔離見證歷史和激活

SegWit 更新引起了極大的爭議,並對比特幣的開發過程及其社區產生了持久的影響。然而,面對這樣的挑戰,比特幣的成功已經證明了它對許多人的適應能力。

SegWit 於2015 年首次為Bitcoin Core 提出,旨在解決交易可塑性問題,釋放更多區塊鏈空間。然而,在此期間,比特幣社區擔心比特幣擴展和處理越來越多交易的能力。

為了擴大比特幣的規模,一些社區成員提出了對Segwit2x 的更新,該更新將引入SegWit 支持並將塊權重限制加倍至8 wu,相當於2 MB。基於網絡哈希率,SegWit2x 得到了95% 礦工的支持。來自比特幣行業的50 多家公司簽署了所謂的紐約協議,承諾激活Segwit2x 並將區塊大小增加一倍。

紐約協議背離了比特幣的開放共識流程,因此沒有得到節點運營商和開發者的足夠支持,最終以失敗告終。

取而代之的是,一個匿名的、以前不為人知的開發者推動了BIP 148,它得到了節點運營商的支持並成功激活了SegWit,顯然拒絕了Segwit2x。為了推動這一變化,許多節點採用了替代的比特幣核心實現,迫使礦工在面臨區塊被網絡拒絕的風險時採用SegWit。

為什麼節點運營商反對Segwit2x

節點運營商保留區塊鏈的完整副本,其中許多人為此使用小型低功耗機器。激活Segwit2x 將使區塊鏈的增長率增加一倍以上,迫使運營商存儲快速增長的數據量。這將增加節點運營商的成本,減慢區塊的初始加載速度,並阻止用戶啟動自己的節點。

大多數開發人員也出於類似的原因反對SegWit2x。他們擔心,如果能夠運行他們的節點的人變少,網絡可能會變得更加中心化,從而降低對審查和捕獲的抵抗力。

隔離見證教會了我們什麼

SegWit 和Segwit2x 之間的競爭結果表明,真正控製網絡的是節點,而不是礦工、企業甚至開發人員。節點使用自己選擇的軟件,能夠在絕大多數礦工面前捍衛自己的意願並激活SegWit,拒絕Segwit2x。

這讓人們相信,未經節點運營商的同意,比特幣共識規則,包括2100 萬個總供應量的硬上限,是無法改變的。

資訊來源:由0x資訊編譯自BITNOVOSTI。版權歸作者vargoz所有,未經許可,不得轉載

Total
0
Shares
Related Posts