比特幣的隔離見證,究竟把什麼隔離了?

比特幣的隔離見證,究竟把什麼隔離了?的文章封面插畫

有些比特幣錢包會把 bc1q 地址標成「SegWit」,送出時也可能顯示較低的手續費或不同的交易大小。隔離見證(Segregated Witness,SegWit)這個名稱很容易讓人想像:簽章是不是被刪掉、藏到鏈外,或不再占用區塊空間?

不過,一筆支出若沒有合格證據,全節點就無法確認它獲得授權。隔離見證沒有讓簽章、公鑰與其他解鎖資料變得可有可無;它改變的是這些資料在交易中的編排方式、識別方式與計量方式。

因此,「隔離」最適合理解成把交易造成的帳本變化,和證明這項變化有效所需的見證資料分開處理。見證仍會跟著交易傳播、被礦工收進區塊,也會由升級後的驗證者檢查。這項調整同時縮小了交易識別碼遭第三方改動的空間,並建立較細緻的區塊容量計量方式。

見證資料用來證明支出符合條件

一筆普通交易會引用既有 UTXO 作為輸入,再建立新的輸出。輸入指出準備花掉哪筆資產,輸出則寫下金額與未來花用條件;這些欄位共同描述交易要讓可花費狀態發生什麼變化。

可是,指出一筆 UTXO 並不代表有權花它。支出者還要提供能滿足原條件的資料,常見內容包括由私鑰產生的簽章、對應公鑰,以及較複雜條件需要的腳本資料。這些用來讓驗證者判斷「支出是否有資格成立」的材料,就是見證的核心用途。

在早期交易格式中,許多解鎖資料放在輸入的 scriptSig。SegWit 為每個輸入增加獨立的 witness 欄位,讓見證型支出把簽章等資料放到那裡。基礎交易仍保留輸入參照、輸出、金額與其他影響狀態的欄位,所以資料只是分層編排,沒有被網路免除。

TXID 和 wtxid 看的是不同資料範圍

傳統交易識別碼 TXID 由交易序列化資料計算而來。早期格式把簽章表示也放進這份資料,於是第三方有時能改動不影響付款結果的簽章表示,讓交易仍然有效,TXID 卻跟著改變。這類交易可塑性不會憑空改走收款金額,仍會破壞依賴原 TXID 的追蹤與未確認後續交易。

SegWit 交易保留兩種識別範圍。txid 不納入獨立見證資料,用來穩定表示交易的基礎效果;wtxid 則連見證資料一起計算,用來識別包含完整見證的版本。若交易沒有任何見證輸入,兩者會得到相同結果。

當輸入使用 SegWit 並正確簽署時,旁人只改動見證表示,不能再讓一個有效版本換出另一個 TXID。這大幅處理了非自願的交易可塑性,也讓尚未確認交易形成的相依鏈更可靠,成為 Lightning 等協議的重要基礎之一。它沒有阻止資產控制者自行建立另一筆衝突交易,也沒有把 TXID 變成交易確認證明。

分開計量沒有讓見證變成免費資料

SegWit 啟用後,區塊上限改用「重量」計算。每個基礎資料位元組計入四個重量單位,每個見證資料位元組計入一個單位,整個區塊最多四百萬重量單位。錢包常把交易重量除以四並向上取整,顯示為虛擬位元組(virtual byte,vB),再用每 vB 的費率估算總費用。

見證權重較低,反映它和長期可花費狀態的作用不同,也讓相同付款在採用 SegWit 輸入時常能使用較少虛擬空間。不過,實際差異仍取決於輸入與輸出數量、腳本類型和簽署路徑。只看地址字首,無法保證每筆付款都省下固定比例;以 3 開頭的地址也可能承載其他腳本,不能一律當成 SegWit。

較低權重同樣不等於零成本。完整驗證者仍要接收見證、檢查簽章,區塊也會透過特殊承諾把見證交易識別綁進有效資料。見證會消耗網路傳輸、驗證時間與儲存空間,只是在容量限制裡採用不同權重。

向下相容來自新舊規則看到不同層次

SegWit 透過軟分叉部署。舊版節點能繼續辨認交易的基礎部分,並把新的見證程式看成自己不理解的條件;升級後的節點則額外要求見證內容必須通過新規則。於是,新規則接受的區塊仍落在舊規則容許範圍內,網路不必在同一天要求所有軟體同步更換格式。

這種相容安排有明確邊界。舊版軟體無法完整驗證 SegWit 見證,也可能不會替新的原生地址建立付款;要取得完整的共識檢查與地址支援,仍需要升級。軟分叉降低協調門檻,沒有讓舊軟體自動理解新功能。

SegWit 也沒有把交易內容加密,金額、輸入與輸出關係仍會留下公開線索,因此不會自動改善隱私。它沒有保證下一位礦工收錄交易,也不會讓一次確認變成絕對不可逆。地址格式、費用效率、交易識別與結算穩定度,仍是幾個需要分開判斷的問題。

所以,隔離見證真正隔離的是資料角色與序列化位置:描述資產如何變動的基礎欄位留在 TXID 範圍內,證明支出有效的見證資料則放進獨立結構,並由 wtxid 與區塊承諾完整涵蓋。簽章沒有消失,驗證責任也沒有被移出比特幣網路;改變的是如何組織、識別和計量這些資料。