什麼是隔離驗證:一個小舉動顯著提升比特幣的潛力

買賣虛擬貨幣
如果說2015年在香港舉行的“比特幣擴容研討會”上最令人興奮的提議,那毋庸置疑是開發者Pieter Wuille博士提出的隔離驗證(Segregated Witness)。這個提議受到技術界人士的好評,隔離驗證有望能改善比特幣的效能表現,而有些人甚至希望它能提供一種擴容的解決方案,幫助比特幣社羣恢復一定的和諧。
我將在Bitcoin Magazine上用上中下三篇來解釋隔離驗證是如何運作的,這篇文章是上篇。什麼是比特幣交易?為了更好理解隔離驗證,最好先了解技術層面上的比特幣交易。(如果你對這方面並不陌生,可以直接跳到本文的最後一部分。)對於初學者而言,要認識到很重要的一點,比特幣協議的核心是交易。實際上,點對點網路上的節點並不會相互傳送比特幣,而是互相傳送包含交易資料的包(packages)。
在某種程度上,比特幣交易實際上是一套一套的“鎖”。更具體點說,每筆交易包含兩個主要組成部分。其中一半能有效解鎖之前交易中鎖定的比特幣,使用的資料片段被稱為輸入,輸入包括指令碼和如何解鎖輸入的說明(稱為scriptSigs)。另外一半由一個或多個被稱為輸出的新鎖組成,這些鎖會再次鎖定相同或更少數量的比特幣,輸出包括名為scriptPubKeys的指令碼。因此,比特幣在單筆交易中有效地從輸入轉移到輸出,並同時從一筆交易跳轉到另一筆交易。這條規則有一種主要的例外。一筆coinbase交易(不要與coinbase交易所混淆了)是礦工在找到新區塊時建立的交易,並且當中包含了區塊獎勵:撰文時為25個比特幣(現在是12.5)。此外,礦工可以將交易中解鎖了但沒有再次鎖定的比特幣增加到coinbase獎勵當中:簡單來說就是輸入和輸出的差額,即交易手續費。所有這些比特幣的“解鎖”和“鎖定”都是由交易傳送方完成的,隨後以資料包的形式透過比特幣網路進行傳輸。然後,網路上的所有節點都會檢查這個解鎖和鎖定過程是否正確完成。如果沒有問題,他們會將交易轉發給其他節點。如果某個節點同時也是一個礦工,那它就可能會將交易打包到區塊中。然而,是否會被打包進區塊取決於礦工,這就是給礦工手續費的原因。非常重要的一點是,所有節點遵循的交易驗證規則與(幾乎)所有礦工使用的規則是相容的。如果某些礦工將交易打包進其他節點拒絕的區塊中,則整個區塊將被該節點視為無效。如果該節點是礦工,則可能導致雙花和網路分叉。共識規則允許交易同時以幾種不同的方式來鎖定(和解鎖)比特幣。但鎖定比特幣的輸出通常至少包括一個scriptPubKey:“證明你擁有(或者知道)對應於該比特幣地址的公鑰的私鑰。”
(用私鑰推匯出公鑰很容易,但幾乎不可能透過公鑰推匯出私鑰。同樣,透過公鑰計算出比特幣地址很容易,但很難透過比特幣地推匯出公鑰。因此,從私鑰計算出比特幣地址也很容易,但不可能透過比特幣地址推匯出私鑰。這是“單向的”。)當然,用於將比特幣鎖定在scriptPubKey中的比特幣地址是交易接收方提供的。由於接收方使用只有他自己知道的私鑰建立出這個比特幣地址,因此他是唯一可以建立有效scriptSig的人,也是唯一可以建立新交易並使用被鎖定比特幣的人。簽名是怎麼來的?為了證明對應於與比特幣地址的私鑰的所有權,理論上可以在交易的scriptSig中包含私鑰,但是這樣一點都不安全。最重要的是,任何看到交易的人都可以獲取私鑰,並建立一筆新的交易(或更改原始交易),將原始交易中的接收方改成自己。如果真是這樣的話,對礦工而言偷比特幣就會是小菜一碟了,因為他們是挑選交易進行確認的人。因此,scriptPubys通常要求scriptSig包含一個或多個簽名來解鎖比特幣。簽名是一種密碼學技巧,使用私鑰與任意其他資料組合來計算出唯一的數字字串。並且,根據密碼學原理,可以使用對應的公鑰來驗證簽名是不是使用該私鑰建立的。因此,簽名既證明了私鑰的所有權,又證明了該私鑰的所有者對特定資料片段的批准,同時不需要洩露私鑰。
在比特幣中,私鑰通常用於對交易資料進行簽名來減去交易輸入。(包括,scriptPubKeys、鎖定的數量和一些其他細節。)隨後,將簽名和用於使用比特幣的公鑰新增到交易的輸入欄位中。這樣也證明了私鑰的所有者確實打算建立交易並確保它不會被篡改。然後,將所有這些交易資料(包括此時的交易輸入)一併雜湊運算,建立出交易ID,用於標識出特定交易。如果交易隨後被打包入塊,那麼礦工會將交易ID與另一個交易ID一起雜湊運算產生新的雜湊值。如果有其他兩個交易ID的雜湊值,則再次進行雜湊處理,一直持續到只剩下一個雜湊值為止。這種雜湊結構稱為默克爾樹(Merkle Tree),最終產生的雜湊值為默克爾根(Merkle Root)。該默克爾根與其他區塊資料組合以形成區塊頭(header),用於標識特定區塊。最後,這個區塊頭的雜湊值會被包含在下一個區塊的區塊頭中,從而將區塊連結在一起。比特幣被認為是不可篡改的,因為追溯性地更改任意交易的任何部分都會改變交易ID,進而改變區塊頭。而改變了的區塊頭不再符合工作量證明的要求,並且由於區塊頭會影響後續區塊頭的組成,因此它們中的任何一個都會被視為無效。什麼是隔離驗證?由Wuille在香港提出的隔離驗證提議是基於Blockstream的側鏈Elements中所使用的一個概念,再結合比特幣核心開發人員Luke Dashjr的補充構思。在過去的幾個月中,Wuille與比特幣核心開發人員Gregory Maxwell和Eric Lombrozo合作對隔離驗證進行了概念化,並計劃在2016年推出。因此,對於不使用隔離驗證的比特幣節點(我們稱之為“舊節點”)的而言,接下來一些新建立的交易輸出中可能會使用奇怪的scriptPubKeys。之所以奇怪,是因為這些scriptPubKeys幾乎不能被認為是鎖,基本上標明瞭它們不需要簽名,或者說看起來就像“任何人都可以花”。此外,它們還包括一些無意義的文字。
從舊節點看來,這些交易是瘋狂的。他們會以為任何人都可以建立一個新的scriptSig,來解鎖這些交易輸出,這意味著這些交易非常不安全。但與此同時,舊節點也依然會照常執行。畢竟,又不是他們自己的交易出問題了。無意義的文字雖然奇怪,但也不會導致什麼問題。因此,它們依然會確認交易有效,並將其轉發給其他節點。但是,使用了隔離驗證的節點(我們稱之為“新節點”)會識別出其他東西。他們會在scriptPubKey中看到那些“無意義的文字”,但並不會認為它們毫無意義。相反,新節點會將這段文字識別為另一種非常特殊的輸出型別。與典型的交易輸出類似,這種新型別的輸出需要一個或多個簽名才能解鎖比特幣。但與典型輸出不同,這種新型別的輸出不需要將簽名包含在後續事務的scriptSig中。相反,它需要將簽名包含在交易之外的全新區域中:隔離見證資料區域。這個隔離驗證資料區基本上就是一個帶有簽名和一些附加資料的“附加元件”。重要的是,隔離驗證區域被舊節點完全忽略,但會被新節點識別。此外,它們攜帶的資料不會與交易的其他部分一起雜湊處理到交易ID中。因此,舊節點和新節點都將會認為包含隔離驗證中的簽名的交易有效。舊節點會驗證它們,因為從他們的角度來看,這些交易根本不需要簽名(他們也看不到簽名),而新節點也會驗證它們,因為所需的簽名位於隔離驗證區域中。並且由於舊節點和新節點都將交易資料雜湊處理到相同的交易ID中,所以每個節點都認可這些區塊的組成,乃至整個區塊鏈的結構。(值得注意的是,所有或者絕大多數礦工都應該使用隔離驗證,以防止雙花和硬分叉,要麼就都不使用。如果所有礦工都使用了隔離驗證,儘管網路上的舊節點可能會想知道為什麼有些交易沒有被打包,但由於打包哪些交易是由礦工決定的,而且這些交易也不是他們的交易,所以舊節點也不會介意。)
但是還存在一個問題:如果簽名對區塊鏈的構成沒有影響,那麼區塊鏈就不能證明交易中包含正確的簽名了。為了確保簽名都被嵌入到區塊鏈中,啟用隔離驗證的礦工也需要新增一種手段。不僅在所有交易中建立默克爾樹,還要從所有隔離驗證中建立一個默克爾樹,來將交易的樹進行映象。然後,將隔離驗證的默克爾根包含在coinbase交易的輸入欄位中。因此,隔離驗證的默克爾根會改變coinbase交易的交易資料以及其交易ID,從而影響區塊頭,並最終影響區塊鏈的構成。Wuille的隔離驗證提議能夠實現從比特幣交易中將簽名刪除,同時保持比特幣的不可篡改,並且不違反任何現有的共識機制。更多數字貨幣資訊:www.qukuaiwang.com.cn/news

免責聲明:

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

推荐阅读

;