侯佳憶 吳剛 藺靜茹
摘 要
區(qū)塊鏈開創(chuàng)性地利用密碼學(xué)元素和共識機(jī)制構(gòu)建了一個安全的去中心化系統(tǒng)。區(qū)塊鏈?zhǔn)潜忍貛诺暮诵模命c(diǎn)對點(diǎn)網(wǎng)絡(luò)通信,讓區(qū)塊鏈中的每一個參與的節(jié)點(diǎn),對每個區(qū)塊提案進(jìn)行確認(rèn)共識,將最后的共識區(qū)塊信息存儲在區(qū)塊鏈的各個節(jié)點(diǎn)的本地?cái)?shù)據(jù)庫中,這樣就能夠保證數(shù)據(jù)的防篡改,公開透明性,同時能夠保證交易的正常進(jìn)行,但是由于區(qū)塊鏈的技術(shù)升級,會導(dǎo)致每個節(jié)點(diǎn)的升級出現(xiàn)異步問題,對一致性產(chǎn)生威脅,導(dǎo)致區(qū)塊鏈出現(xiàn)分叉的問題,最終導(dǎo)致區(qū)塊鏈的安全,可信受到威脅,本文對區(qū)塊鏈分叉問題進(jìn)行研究,給出了一個解決區(qū)塊鏈分叉問題的方案。
關(guān)鍵詞
區(qū)塊鏈;分叉;分析研究
中圖分類號: TP311.13 ? ?? ? ? ?文獻(xiàn)標(biāo)識碼: A
DOI:10.19694/j.cnki.issn2095-2457.2020.09.063
0 概述
理想情況下的比特幣區(qū)塊鏈?zhǔn)且粋€同步的網(wǎng)絡(luò)環(huán)境,假設(shè)各個副本節(jié)點(diǎn)在區(qū)塊鏈中的信息交換和區(qū)塊的添加沒有任何的延時,那么在這種情況下,如果不發(fā)生區(qū)塊鏈的系統(tǒng)升級,那么每個副本節(jié)點(diǎn)上的數(shù)據(jù)塊會是相同的,但是現(xiàn)實(shí)的區(qū)塊鏈場景中,由于區(qū)塊鏈的副本節(jié)點(diǎn)在挖礦的過程中,存在著同時的情況,而且節(jié)點(diǎn)與節(jié)點(diǎn)的信息廣播也存在網(wǎng)絡(luò)時延,那么在這樣一個場景下,區(qū)塊的信息驗(yàn)證就會出現(xiàn)錯誤的情況,如果這種情況發(fā)生,區(qū)塊鏈分叉問題就出現(xiàn)了,下面我們對區(qū)塊鏈分叉問題進(jìn)行詳細(xì)的分析。
單純的分析比特幣挖礦的模型,出現(xiàn)鏈的分叉是一個必然結(jié)果,早期的區(qū)塊鏈挖礦的設(shè)計(jì),是礦工與礦工之間獨(dú)立地進(jìn)行,下面我們進(jìn)行實(shí)驗(yàn)分析,實(shí)驗(yàn)條件是,已存在區(qū)塊長度為10的區(qū)塊鏈,比特幣礦工只有10人,區(qū)塊鏈的尾塊暫且定為a,實(shí)驗(yàn)假定,10個比特幣的礦工,其中有兩個礦工同時達(dá)到了獲取比特幣的條件,即同時產(chǎn)生了新的比特幣區(qū)塊信息節(jié)點(diǎn),分別為i和j。而此時由于雙方都不知道對方是否挖礦成功,兩個礦工都默認(rèn)地向全網(wǎng)廣播了i和j,此時區(qū)塊鏈網(wǎng)絡(luò)中出現(xiàn)了兩個區(qū)塊,兩個區(qū)塊的指向的尾塊都是a,于是區(qū)塊鏈網(wǎng)絡(luò)會出現(xiàn)以i和j為尾塊的兩條鏈,而且兩條鏈都是合法的鏈,于是區(qū)塊鏈就出現(xiàn)了分叉的問題。
這個問題是單純的挖礦模型必然產(chǎn)生的問題,該區(qū)塊鏈分叉的問題會導(dǎo)致兩條分叉鏈,最終比特幣的消費(fèi)會出現(xiàn)重復(fù)消費(fèi)的風(fēng)險,如果一直持續(xù)下去,整個區(qū)塊鏈的分叉網(wǎng)絡(luò)鏈將會越來越多,使得區(qū)塊鏈中的節(jié)點(diǎn)網(wǎng)絡(luò)的通訊開銷呈指數(shù)級的增長,系統(tǒng)運(yùn)行效率急劇下降,最終會將網(wǎng)絡(luò)的性能拖垮,區(qū)塊鏈比特幣技術(shù)為了解決這個問題,引入了區(qū)塊鏈高度的變量,為共識檢測點(diǎn),每隔一段時間,區(qū)塊鏈網(wǎng)絡(luò)會同步一下區(qū)塊鏈的高度,將高度異常的區(qū)塊鏈定義為非法區(qū)塊鏈,這樣,非法區(qū)塊鏈上的區(qū)塊信息即為無意義區(qū)塊,對整個區(qū)塊鏈將不會產(chǎn)生任何影響,同步區(qū)塊鏈的高度過程,成為共識過程,比特幣區(qū)塊鏈實(shí)用共識技術(shù),解決了挖礦模型的分叉問題。
由于使用了共識的檢測節(jié)點(diǎn)作為處理分叉的方案,區(qū)塊的分叉并不是實(shí)時的同步,在某一時間節(jié)點(diǎn)下,每個區(qū)塊鏈的尾部部分的區(qū)塊可能是分叉區(qū)塊,在共識同步之前,還會有新的區(qū)塊信息追加在分叉的鏈后,但是因?yàn)橥焦沧R檢測點(diǎn)的存在,分叉鏈的無限增長的概率會指數(shù)下降,在這樣一個實(shí)際情況下,比特幣組織在處理比特幣交易的時候,采用的是延時交易確認(rèn),即發(fā)起比特幣交易到交易成功中間需要有時間間隔,時間間隔的長短正好是區(qū)塊鏈共識檢測點(diǎn)時間間隔。
1 區(qū)塊鏈的分叉類型
比特幣區(qū)塊鏈不僅僅是自身運(yùn)行會產(chǎn)生分叉,同時比特幣區(qū)塊鏈會在技術(shù)升級時人為的產(chǎn)生區(qū)塊鏈分叉問題,因?yàn)楸忍貛艆^(qū)塊鏈的組成是很多個共識節(jié)點(diǎn),當(dāng)技術(shù)升級時,每個共識節(jié)點(diǎn)會出現(xiàn)升級的分歧意見,導(dǎo)致每個共識節(jié)點(diǎn)在升級之后的驗(yàn)證行為發(fā)生了不同,在之后的運(yùn)行過程中將會產(chǎn)生多個區(qū)塊鏈,這樣就出現(xiàn)了人為的區(qū)塊鏈分叉,這種分叉是允許的,同時該分叉的類型分為硬分叉和軟分叉兩種。
硬分叉指的是升級前的舊區(qū)塊共識節(jié)點(diǎn)和升級后的新區(qū)塊共識節(jié)點(diǎn)的鏈的分叉,在比特幣區(qū)塊鏈進(jìn)行技術(shù)升級之前,會將方案提交,盡量地征求大部分的比特幣區(qū)塊鏈共識節(jié)點(diǎn)的省級統(tǒng)一,這是硬分叉的前提條件,當(dāng)大部分共識節(jié)點(diǎn)同意升級請求后,會進(jìn)行升級,升級過后,新的區(qū)塊鏈的區(qū)塊驗(yàn)證機(jī)制將會有別于就的區(qū)塊驗(yàn)證機(jī)制,比特幣區(qū)塊鏈此時會存在兩條區(qū)塊鏈,但是兩條鏈的區(qū)塊共識節(jié)點(diǎn)是不成比例的,在系統(tǒng)之后的運(yùn)行過程中,舊的區(qū)塊鏈節(jié)點(diǎn)會越來越少,挖礦的礦工會逐步的升級到新的區(qū)塊鏈中,硬分叉在最終將會被共識統(tǒng)一,前提是升級方案得到大多數(shù)節(jié)點(diǎn)的同意,硬分叉地出現(xiàn)在2017年,當(dāng)時力推了SegWit2x的升級,產(chǎn)生硬分叉,此次的升級時為了提高區(qū)塊鏈的區(qū)塊信息大小。但是目前各方的反應(yīng)都不同,其中BTCC交易所的聯(lián)合創(chuàng)始人兼首席執(zhí)行官鮑比·李,從最初的贊同升級,到現(xiàn)在反對和擔(dān)憂本次的硬分叉升級。
軟分叉的實(shí)質(zhì)相對硬分叉來說,沒有實(shí)際產(chǎn)生多條分叉區(qū)塊鏈,是一種在區(qū)塊信息驗(yàn)證機(jī)制上的分歧,但是新的區(qū)塊驗(yàn)證機(jī)制會去向下兼容就的區(qū)塊驗(yàn)證機(jī)制,這樣雖然在整個區(qū)塊鏈中,同時有兩種區(qū)塊驗(yàn)證方式,但是實(shí)際上不會產(chǎn)生新的區(qū)塊鏈分叉,軟分叉的產(chǎn)生比硬分叉要早,在2012年產(chǎn)生過一次,是比特幣的BIP升級項(xiàng)目,當(dāng)時使用的就是軟分叉方案。軟分叉的不足之處是在于區(qū)塊驗(yàn)證協(xié)議的兼容性和驗(yàn)證協(xié)議的安全性之間的矛盾,很難在兩者之間取一個合適的平衡點(diǎn),所以實(shí)際過程中,軟分叉不太好設(shè)計(jì)。
2 基于隨機(jī)公證節(jié)點(diǎn)機(jī)制算法
為了解決區(qū)塊鏈硬分叉的問題,作者提出了一種算法機(jī)制,隨機(jī)公證節(jié)點(diǎn)機(jī)制來解決區(qū)塊鏈分叉問題,該算法的具體定義流程如下,分為兩個部分,一個是隨機(jī)公證節(jié)點(diǎn)的選取,一個是新區(qū)塊的產(chǎn)生。
選取隨機(jī)公證節(jié)點(diǎn)的步驟如圖1所示。
首先需要選取一個節(jié)點(diǎn)作為算法的開始,由該節(jié)點(diǎn)進(jìn)行隨機(jī)挑選,產(chǎn)生一個公證節(jié)點(diǎn)a,同時將選取結(jié)果和節(jié)點(diǎn)a的信息一并廣播到區(qū)塊鏈網(wǎng)絡(luò)中,當(dāng)區(qū)塊鏈節(jié)點(diǎn)接收到廣播信息時,未被選中的節(jié)點(diǎn)驗(yàn)證廣播信息,如果驗(yàn)證不通過,則丟棄信息,算法結(jié)束,如果驗(yàn)證通過,則將信息更新至本地日志,記錄公證節(jié)點(diǎn)編號,被選中的節(jié)點(diǎn)驗(yàn)證廣播信息,如果驗(yàn)證不通過,則丟棄信息,算法結(jié)束,如果驗(yàn)證通過,則標(biāo)記自身為公證節(jié)點(diǎn),更新本地日志信息,同時會停止產(chǎn)生新區(qū)塊的功能。
新區(qū)塊的產(chǎn)生步驟如圖2所示。
新區(qū)塊產(chǎn)生機(jī)制其實(shí)有兩條分支在運(yùn)行,當(dāng)非公證節(jié)點(diǎn)產(chǎn)生新區(qū)塊之后,會廣播新區(qū)塊信息提案到區(qū)塊鏈,由區(qū)塊鏈網(wǎng)絡(luò)進(jìn)行公示提案,同時還會將新區(qū)塊信息發(fā)送給公證節(jié)點(diǎn)進(jìn)行公證。
當(dāng)公證節(jié)點(diǎn)收到新區(qū)塊信息,會對區(qū)塊信息進(jìn)行驗(yàn)證,如果驗(yàn)證不通過,會將新區(qū)塊丟棄,同時會將該丟棄的記錄廣播給全網(wǎng),使新區(qū)塊不可信,新區(qū)塊信息的共識過程就會被終止。如果驗(yàn)證通過,會將新區(qū)塊更新添加記錄在公證節(jié)點(diǎn)本地的區(qū)塊鏈尾部,同時會將該驗(yàn)證消息廣播給全網(wǎng),使新區(qū)塊可信,新區(qū)塊信息的共識過程正常進(jìn)行。當(dāng)公證節(jié)點(diǎn)在同一個共識過程中,收到了多個新區(qū)塊的驗(yàn)證請求,當(dāng)都通過驗(yàn)證后,公證節(jié)點(diǎn)會發(fā)起全網(wǎng)投票,通過投票結(jié)果,決定新區(qū)塊是否可信,重復(fù)上述的動作。當(dāng)新區(qū)塊全部產(chǎn)生,共識結(jié)束后,算法正常退出。
3 結(jié)論
論文論述了區(qū)塊鏈分叉的背景,區(qū)塊鏈分叉中的硬分叉和軟分叉,在此基礎(chǔ)上提出了一種基于隨機(jī)公證節(jié)點(diǎn)機(jī)制的算法,該算法能夠有效地避免區(qū)塊鏈的硬分叉鏈的不斷增長,當(dāng)區(qū)塊鏈出現(xiàn)硬分叉時,同一共識視圖過程中,出現(xiàn)多個可信的新區(qū)塊的情況,能夠通過公證節(jié)點(diǎn)的裁決和投票,讓新區(qū)塊的盡量地轉(zhuǎn)移到大多數(shù)節(jié)點(diǎn)的主區(qū)塊鏈中,當(dāng)區(qū)塊鏈運(yùn)行一段時間過后,硬分叉的情況會逐步地減少,最終消除。該算法的公證裁決建立在本身的區(qū)塊鏈節(jié)點(diǎn),能夠消除區(qū)塊鏈分叉的同時,保證了區(qū)塊鏈的去中心化特性,對區(qū)塊鏈中的區(qū)塊信息的安全性得到了保證,本文對于區(qū)塊鏈的分叉問題的分析研究,是為了給其他相關(guān)的研究人員一個借鑒思路,為以后提出更加成熟的解決方案奠定基礎(chǔ),這是本文研究的目的所在。
參考文獻(xiàn)
[1]張龑,劉德.區(qū)塊鏈中的安全問題研究[J].數(shù)字技術(shù)與應(yīng)用,2017(8):199-200.
[2]韓璇,劉亞敏.區(qū)塊鏈技術(shù)中的共識機(jī)制研究[J].信息網(wǎng)絡(luò)安全,2017(9).
[3]馬昂,潘曉,吳雷,et al.區(qū)塊鏈技術(shù)基礎(chǔ)及應(yīng)用研究綜述[J].信息安全研究,2017, 3(11).
[4]賈引獅.基于區(qū)塊鏈技術(shù)的網(wǎng)絡(luò)版權(quán)交易問題研究[J].科技與出版,2018(7).
[5]劉肖飛.基于動態(tài)授權(quán)的拜占庭容錯共識算法的區(qū)塊鏈性能改進(jìn)研究[D]. ?2017.
[6]王健,陳恭亮.比特幣區(qū)塊鏈分叉研究[J].通信技術(shù),2018.
[7]海沫,朱建明.區(qū)塊鏈網(wǎng)絡(luò)最優(yōu)傳播路徑和激勵相結(jié)合的傳播機(jī)制[J].計(jì)算機(jī)研究與發(fā)展,2019,56(6):1205-1218.
[8]卿蘇德,姜瑩,王秋野.區(qū)塊鏈的技術(shù)原理和意義[J].電信網(wǎng)技術(shù),2016(12):14-20.
[9]袁超.區(qū)塊鏈中硬分叉期間的防御方案[J].現(xiàn)代計(jì)算機(jī)(專業(yè)版),2019(09):5-9+15.
[10]劉曉蕾.區(qū)塊鏈社區(qū):一種新型的組織模式[J].人民論壇·學(xué)術(shù)前沿,2018,No.148(12):13-19.