通俗易懂解釋下bitcoin 的 segwit ?

想聽聽前應後果和一些黑歷史。

Segregated Witness Costs and Risks


Table of Contents ▼

常聽到比特幣需要「擴容」、然後又討論要不要支援「SegWit 隔離見證」,到底這個「SegWit 隔離見證」是甚麼?它對比特幣會有甚麼影響?

隔離見證(SegWit)背景

「隔離見證」的英文是「Segregated Witness」,一般會簡稱為「SegWit」,是 Bitcoin Core 團隊提出的比特幣擴容方案之一,目前最多人使用的 比特幣節點(node)軟體就是 Bitcoin Core 所開發的,他們 團隊 裡面也有很多知名的比特幣與區塊鏈開發者,所以他們在比特幣社區的「江湖地位」也比較高。

隔離見證起初的目標是為了解決比特幣的 交易延展性(transaction malleability)攻擊問題,但因為隔離見證所用到的技術也可以令比特幣交易功能更多樣化,所以逐漸變成解決擴容問題的其中一個可行方案。

比特幣擴容問題

有用比特幣的朋友或許會察覺到,近年傳送比特幣都需要等好一段時間對方才會收到,如果不幸設定的手續費過低,甚至可能會等上好幾天才能完成交易。

出現這種狀況是因為比特幣網路正面對「擴容問題」,因為比特幣區塊鏈每個區塊的容量有限(目前是 1MB),如果鏈上交易要求數量太多,一個區塊容不下所有交易,手續費較低的交易會先被忽略,直到有區塊有空間可以容下它們,這些交易才會被處理。

試想像比特幣的區塊是一架公車,而每一筆交易都是一個人,當要乘公車的人超過公車容量,不能上車的人就要等下一班,如果公車容許付較高車資的人先上車,那不願付高車資的人就要一直等下去。

那把區塊容量增加不就將問題解決了嗎?有些比特幣的開發者也是這麼想,所以在比特幣歷史中,就出現過幾個增加容量的建議方案,包括 Bitcoin Classic(2MB)、Bitcoin XT(8MB/20MB)和最近出現的 Bitcoin Unlimited(無限容量)。

那為什麼 Bitcoin Core 堅持保留 1MB 容量、還特意外加一個 SegWit,而這個看似比較複雜的方案,竟然是目前支持度最高的?

隔離見證擴容方案

隔離見證的擴容方案主要分兩個部份,第一個部份是將區塊上限提升到最多 4MB… 喂!等一下!剛不是說 Bitcoin Core 堅持保留 1MB 容量嗎?沒錯!隔離見證並沒有把比特幣原來的區塊容量改變,1MB 這個容量是被保留下來,但在這 1MB 之上,外加一個 3MB 的 SegWit 資料區塊,利用英文可能會表達得簡潔一點:

SegWit replaces the 1MB block-size limit with a 4MB block-weight limit

大家應該會察覺到「block-size」與「block-weight」兩個不同的字,所以隔離見證不像其他擴容方案那麼直覺地把區塊容量(block-size)變大,而是把區塊的「載量」(block-weight)增加。聽起來很複雜?沒搞懂我在講甚麼?

我們把公車的例子再搬過來講吧!現在公車大小沒有變,要搭車的人還是一樣多,擠不上去的還是一大堆;這個時候我們在公車後面掛一個像露營車的貨車(SegWit 車箱!),所有上公車的人都要把背包和行李放到這個貨車上面,因為少了隨身物品,每個人佔的空間變少了,那公車就可以多載一些人,乘載量就變多了。

隔離見證的 3MB 區塊會把交易細明包括交易地址、金額、認證資料等分開來處理,從而提升原有 1MB 區塊能盛載的交易數量,效果跟直接把區塊變大差不多,而且這些本來雜七雜八的交易資料被分開處理掉,解決垃圾交易訊息擠滿原有區塊的問題。

閃電網路(Lightning Network)

說了這麼多還是在講隔離見證方案的「第一個部份」(這部分確實比較難理解),方案第二個部份是在比特幣網路上再外加一個「閃電網路(Lightning Network)」的東西,把原有比特幣鏈上金額較少的交易,轉移到這個閃電網路來處理,完成後再記錄到原鏈上。

這是一種「鏈外交易(Off-chain transaction)」,目的是解決「微支付(micropayment)」所遇上的問題,加快交易速度,以太坊(Ethereum)也有類似的方案叫「Raiden Network」,我們之後會再詳細探討這種技術。

在公車路線旁邊再架一條鐵路,讓擠不上公車的人直接去坐火車,這樣子解決掉太多人要搭公車、而公車太小的問題。

隔離見證主要就是透過這兩種方法,雙管齊下去把擴容問題解決,因為在理論與技術層面都把比特幣交易網路提昇到另一個層次,讓比特幣可以跟一般電子支付的功能和速度媲美,所以被認為是最好的解決方案,目前支持度比較高。

隔離見證啟動時間

Bitcoin Core 團隊給了一個啟動隔離見證的時機,就是當 95%的網路算力都支持啟動,隔離見證就會被實裝。

為甚麼要 95%呢?因為如果支持度不夠,整個比特幣網路就有機會被分裂成兩半,然後就會出現兩種不同的比特幣,嚴重影響比特幣的生態和經濟價值;但只要有 95%的算力支持,其餘的 5%會因為算力不足、沒有足夠礦工處理交易和保障網路安全而慢慢被淘汰。


每一個比特幣交易,其實可以分為兩部份。第一部份是說明結餘的進出,第二部份是用來證明這個交易的合法性 (主要是簽署)。第一部份可稱為「交易狀態」,第二部份就是所謂的「見證」(witness)。如果你只關心每個賬戶的結餘,其實交易狀態資料就已經足夠。只有部份人(主要是礦工) 才有必要取得交易見證。

中本聰設計比特幣系統時,並沒有把兩部份資料分開處理,導致交易ID的計算混合了交易狀態和見證。因為見證本身包括簽署,而簽署不可能對其自身進行簽署,因此見證是可以由任何人在沒有交易雙方同意下可以改變的,造成所謂交易可變性 (malleability)。在交易發出後,確認前的交易ID可以被任意更改,因此基於未確認交易的交易是絕對不安全的。在2014年就曾有人利用這漏洞大規模攻擊比特幣網路,然而這問題一直至今沒有解決。

比特幣核心開發員Pieter Wuille 在2015年12月於香港提出的隔離見證 (Segregated Witness,以下簡稱SW) 軟分叉非常巧妙地徹底解決了這個問題。SW用戶在交易時,會把比特幣傳送到有別於傳統的地址。當要使用這些比特幣的時候,其簽署 (即見證) 並不會記錄為交易ID的一部份,而是另外處理。也就是說,交易ID完全是由交易狀態 (即結餘的進出) 決定,不受見證部份影響。這做法有幾個重要的結果:

  1. 可以用軟分叉增加最大區塊容量: 因為舊有節點根本看不到這些被隔離的見證,即使真實的區塊已超過1MB,它們仍會以為沒有超過限制而會接受區塊。在整場有關區塊容量的辯論中,最大的難點就是硬分叉。SW可以提供約2MB的有效區塊空間而沒有任何硬分叉風險
  2. 從此以後,只有發出交易的人才可以改變交易ID,沒有任何第三方可以做到。如果是多重簽名交易,就只有多名簽署人同意才能改變交易ID。這可以保證一連串的未確認交易的有效性,是雙向支付通道或閃電網路所必須的功能。有了雙向支付通道或閃電網路,二人或多人之間就可以實際上進行無限次交易,而無需把大量零碎交易放在區塊鏈,大為減低區塊空間壓力
  3. 輕量錢包可以變得更輕量,因為它們無需再接收見證數據
  4. 可以大幅改善簽署結構。在區塊鏈上,曾經有一個超過5000個輸入的交易,因為簽署設計缺憾,需要半分鐘才能完成檢查。在建議中的SW軟分叉會把這個問題解決掉。

而在該次軟分叉完成後,核心開發者們已有計划進一步完善整個系統的可用性和安全性:

  1. 全節點可以為輕量錢包提供很簡潔的證明,以檢查交易是否合法。以後的節點就不再局限於完全驗證和完全不驗證,而是可以按個人的資源作部份驗證,也就是說一台手機也可以參與保障系統安全。這可以大為降低系統對全節點的依賴,即使以後區塊容量提升了,我們仍能保持安全。
  2. 將會推出全新的交易腳本語言,例如可以把數以千計的不同腳本通過MAST技術壓縮至只有32位元組; 亦可以把不同簽署合併檢查,令檢查交易的速度再以倍數上升。

事後孔明的說,其實比特幣一開始就應該是要隔離見證。以上的計劃,是核心開發者們在過去數年對系統的了解日增而得到的成果。SW的測試網已在2015年12月開始運作,本人也有參與第一手測試,對2016年4月推出的目標感到樂觀。實行SW將是比特幣技術的一大飛躍,希望中國幣圈的各位能多加關注和支持。

有關隔離見證的比特幣改善方案:

  1. 隔離見證軟分叉 https://github.com/CodeShark/bips/blob/segwit/bip-codeshark-jl2012-segwit.mediawiki
  2. 隔離見證通信層 https://github.com/CodeShark/bips/blob/segwit_peer_services/bip-codeshark-segwit-peer-services.mediawiki
  3. 隔離見證交易地址 https://github.com/jl2012/bips/blob/segwit-address/bip-segwitaddress.mediawiki
  4. 隔離見證簽署檢查 https://github.com/jl2012/bips/blob/segwit-checksig/bip-segwit-checksig.mediawiki
  5. 系統擴展常見問題解答: https://bitcoin.org/zh_CN/bitcoin-core/capacity-increases-faq
  6. 需要30秒檢查的交易:https://blockchain.info/tx/bb41a757f405890fb0f5856228e23b715702d714d59bf2b1feb70d8b2b4e3e08

原文鏈接:http://8btc.com/thread-27560-1-1.html


推薦閱讀:

在比特幣相關的公司工作是一種怎樣的體驗?
EOS怎麼做映射?
區塊鏈技術如此有前景,為什麼國內沒有專門做這方面應用的公司?
為什麼國人普遍對區塊鏈或者比特幣這種改變未來的巨型創新了解的這麼愚昧?
有哪些項目是做區塊鏈3.0的?

TAG:比特幣Bitcoin | 區塊鏈Blockchain |