區(qū)塊鏈分叉
分叉,并不是區(qū)塊鏈的專有名詞。
在軟件工程中,當(dāng)開發(fā)人員從一個軟件包中獲得一份源代碼副本,并基于此開始獨(dú)立開發(fā),從而創(chuàng)建另一個軟件程序時(shí),就會出現(xiàn)一個獨(dú)立的項(xiàng)目分支。
區(qū)塊鏈分叉就像是應(yīng)用程序的升級更新。
對于中心化的系統(tǒng),其升級比較簡單,可分為:服務(wù)器升級和終端升級。對于服務(wù)器升級來說,只要在后臺部署好,即可一鍵升級;對于終端升級來說,可以選擇在軟件庫或應(yīng)用商店直接升級。并且,終端版本的不一致并不會影響客戶使用其服務(wù)。
對于區(qū)塊鏈這種去中心化的系統(tǒng),其升級比較復(fù)雜。由于其沒有中心機(jī)構(gòu),沒有中心服務(wù)器,每次“代碼升級”都需要獲得網(wǎng)絡(luò)參與者的一致認(rèn)可,如果大家無法達(dá)成一致,區(qū)塊鏈就會形成分叉,即終端版本不一致。這里需要注意的是:終端版本的不一致,可能會影響客戶使用其服務(wù)。
簡單來說,分叉會在以下情況下發(fā)生:
任何時(shí)候,兩個“礦工”(記賬權(quán)爭奪者)幾乎同時(shí)發(fā)現(xiàn)一個區(qū)塊。
開發(fā)人員,試圖改變決定交易是否有效的規(guī)則。
當(dāng)然,并不是所有的分叉都會成功。不同礦工在大致相同的時(shí)間生產(chǎn)一個區(qū)塊是很常見的,這就在區(qū)塊鏈中創(chuàng)建了一個明顯的分叉,如下圖所示。但當(dāng)新的替代塊是由一個不可靠的礦工生成時(shí),系統(tǒng)會一致認(rèn)為這個塊是無效的,并且這個“孤立塊”很快就會被其他礦工拋棄。只有在新的協(xié)議得到部分人的一致認(rèn)可時(shí),這條分叉鏈才算真正形成。
本質(zhì)上,區(qū)塊鏈分叉是對協(xié)議的更改。因?yàn)閰^(qū)塊鏈?zhǔn)墙⒃诠餐?guī)則之上的,所以改進(jìn)它們的最簡單的方法,似乎就是引入新的規(guī)則或改變現(xiàn)有的規(guī)則。長期以來,這種機(jī)制被認(rèn)為是危險(xiǎn)的,或者至少是破壞性的,但對于升級區(qū)塊鏈來說,它也是一種更直觀的機(jī)制。
這就像我們走在一條路上,到達(dá)一個交叉路口,面前是兩條分岔路。我們可以選擇其中一條路,這并不會影響此前的旅程。由于兩條分岔路的不同性質(zhì),不同選擇將把我們帶向不同的終點(diǎn)。
硬分叉與軟分叉
盡管有相似的名稱,但根據(jù)新舊版本是否可以交互,區(qū)塊鏈分叉可分為兩種類型:硬分叉和軟分叉。
硬分叉
硬分叉是引入一套全新規(guī)則,它與舊的網(wǎng)絡(luò)協(xié)議互不兼容。換句話說,硬分叉是一種向后不兼容的升級。所有網(wǎng)絡(luò)參與者都必須升級到最新版本,遵循新的一致規(guī)則,以便繼續(xù)驗(yàn)證和驗(yàn)證新的事務(wù)塊。當(dāng)然,在硬分叉的情況下,如果仍有人對舊版本持續(xù)支持,那么兩個區(qū)塊鏈可以同時(shí)存在:一個使用舊規(guī)則,另一個使用新規(guī)則。
硬分叉即可以是有計(jì)劃的硬分叉:這通常是指在硬分叉出現(xiàn)之前,項(xiàng)目開發(fā)人員和社區(qū)已經(jīng)達(dá)成了高度的共識,事先已經(jīng)有明確的升級協(xié)議。例如Monero公司在2017年1月推出的“硬分叉”,它增加了一項(xiàng)新的隱私特性,即環(huán)機(jī)密交易(Ring Confidential Transactions,RingCT)。
它也可以是有爭議的硬分叉:當(dāng)項(xiàng)目中各參與方(包括:項(xiàng)目開發(fā)人員、網(wǎng)絡(luò)用戶和節(jié)點(diǎn))之間存在嚴(yán)重分歧時(shí),就會出現(xiàn)這種類型的硬分叉。著名例子是比特幣現(xiàn)金硬叉,2017比特幣被分成兩個獨(dú)立的鏈——最初的比特幣(BTC)和新的比特幣現(xiàn)金(BCH)。這是因?yàn)樯鐓^(qū)的部分人認(rèn)為,將比特幣的區(qū)塊大小從1MB增加到8MB將使網(wǎng)絡(luò)上的交易處理速度更快。
軟分叉
通常來講,軟分叉是一種向后兼容的升級。這意味著軟分叉不需要網(wǎng)絡(luò)上的節(jié)點(diǎn)升級來維護(hù)一致性,它一般只是添加一個與舊規(guī)則不沖突的新規(guī)則。因此軟分叉區(qū)塊鏈上的所有塊都遵循舊的一致性規(guī)則集以及新的一致性規(guī)則集。
例如,塊大小(每個塊中保存的數(shù)據(jù)量)變化可以通過軟分叉來實(shí)現(xiàn)。如果你只想接受小于一定大小的塊,那么只需要拒絕較大的塊即可。
但實(shí)際上,符合舊規(guī)則集節(jié)點(diǎn)產(chǎn)生的塊將會違反新規(guī)則集,因此很可能會隨著新節(jié)點(diǎn)的增多而變得陳舊。這是因?yàn)?,要?ldquo;軟叉”發(fā)揮作用,大家會承認(rèn)并執(zhí)行一套新的共識規(guī)則。如果達(dá)到了這一比例,那么舊的區(qū)塊鏈就會被淘汰,而新的區(qū)塊鏈就會被認(rèn)可為“真正的”區(qū)塊鏈。
可以看出,無論是硬分叉還是軟分叉,其持久性取決于規(guī)則變化的性質(zhì)以及與資源的相對分配。但分叉自身所帶來的創(chuàng)新突破,將助力于區(qū)塊鏈技術(shù)的發(fā)展。