摘要:然后這個(gè)主開(kāi)發(fā)者會(huì)審批這個(gè)“pullrequest”,如果合格了,他就會(huì)將這部分代碼合并到主代碼庫(kù),這個(gè)過(guò)程叫“merge”,中文譯成“合并”。如果主開(kāi)發(fā)者認(rèn)為這個(gè)“pullrequest”不合理,他就會(huì)拒絕,英文叫“Close”。...
引言
比特幣分叉是一個(gè)非常復(fù)雜的工程。任何一次比特幣分叉,從理念提出,到社區(qū)討論,到代碼設(shè)計(jì),到宣傳和推廣,到礦工和用戶部署,這是一個(gè)非常復(fù)雜的工程。這樣的工程其實(shí)在人類(lèi)的分工協(xié)作歷史當(dāng)中甚至是算得上是史無(wú)前例的。參與比特幣的人和公司太多了,不同文,不同種,各自的背景相差太遠(yuǎn)太遠(yuǎn),但卻要協(xié)調(diào)一致。我們?nèi)祟?lèi)作為一個(gè)物種,歷史上這是第一次干這樣的事。我們現(xiàn)在是歷史的見(jiàn)證人。無(wú)論我們?cè)趺闯撤槪瑘?zhí)有不同理念的人相互罵傻逼,都是可以理解的。哪怕是比特幣最后被我們搞失敗了,我認(rèn)為也是可以理解的。
其他區(qū)塊鏈產(chǎn)品的升級(jí)也差不多。
比特幣
第1章 比特幣分叉就是比特幣軟件升級(jí)
在這么復(fù)雜的工程面前,我們作為普通的用戶,可以做的第一件事就是清晰了解這個(gè)工程里的概念。這些概念是溝通的語(yǔ)言,是我們參與討論的基礎(chǔ)。好,我們先來(lái)搞清楚比特幣分叉這個(gè)最基礎(chǔ)的概念。到底什么是分叉?
比特幣就是一套軟件,這套軟件很復(fù)雜。我們這些玩比特幣的人,在各自的電腦上和手機(jī)上運(yùn)行這些比特幣相關(guān)的軟件,這些軟件要能相互連接,形成一個(gè)網(wǎng)絡(luò)。比特幣分叉就是比特幣這些軟件升級(jí)的過(guò)程。
我們使用微信,微信每隔幾個(gè)星期就要升級(jí)一個(gè)版本,增加些新功能啦,改改字體了,修修bug之類(lèi)的。比特幣這套軟件同樣是要升級(jí)的,也想增加新功能,也要修改漏洞,也要做界面的美化。
你看我們?cè)谑謾C(jī)上裝一個(gè)微信,騰訊公司發(fā)布新版本時(shí),其實(shí)我們往往是愿意升級(jí)就升級(jí)的,不愿意就拉倒。只不過(guò)是新功能你用不著而已。如果你用很老版本的微信,你不升級(jí),如果我用最新的微信想跟你視頻,可能就會(huì)提示,對(duì)方微信版本太低,不支持視頻通話。
但比特幣網(wǎng)絡(luò)這套軟件,要比微信這樣的單一公司發(fā)布的產(chǎn)品要復(fù)雜很多很多。比特幣的升級(jí)也要復(fù)雜很多。比特幣大部分的特性升級(jí),是和微信的升級(jí)差不多,用戶可以選擇升和不升,影響不大,只不過(guò)你能不能享受新特性的區(qū)別罷了。但涉及到一些核心層面的特性升級(jí),以及一些重大漏洞的升級(jí),那幾乎是要絕大多數(shù)人同時(shí)升級(jí),才能勝利讓比特幣這套軟件勝利運(yùn)行下去。如果你不升級(jí)很可能就會(huì)出問(wèn)題。一旦涉及到比特幣核心層面特性的變動(dòng),這樣的升級(jí),往往就被稱(chēng)為分叉。
所以不要怕分叉,比特幣要分叉了,就是要做一次重要的特性升級(jí)了。如果你是用微信,我們都喜歡新版本對(duì)吧,我們也需要新的手機(jī)對(duì)吧,為什么啊,因?yàn)橛猩?jí)啊。比特幣分叉,就是比特幣升級(jí)啊,這是好事兒。怕什么怕,沒(méi)見(jiàn)過(guò)軟件升級(jí)嗎?得多沒(méi)見(jiàn)過(guò)世面,才會(huì)怕啊,鄉(xiāng)巴佬才怕。
比特幣分叉
第2章 比特幣分叉的前半部分——設(shè)計(jì)分叉
下面我們要高清楚的一些分叉過(guò)程的更細(xì)節(jié)的概念。因?yàn)楸忍貛欧植?,畢竟是一個(gè)很復(fù)雜的系統(tǒng)工程,為了完成這個(gè)工作要分很多步驟的。我以前是機(jī)械設(shè)計(jì)工程師,當(dāng)過(guò)好幾年的項(xiàng)目經(jīng)理,要管好一個(gè)項(xiàng)目,可難了,不過(guò)有方法論,叫項(xiàng)目管理,這是一套科學(xué),有很多書(shū)要讀。比特幣分叉也是一個(gè)項(xiàng)目,怎么執(zhí)行,怎么管理,也是要講科學(xué)的。我們先來(lái)講這套科學(xué)知識(shí)體系中的設(shè)計(jì)部分。
比特幣協(xié)議升級(jí),一般是有人先提出一個(gè)概念,然后很多很多人都會(huì)去討論,然后有人寫(xiě)成代碼,然后有礦工和用戶去測(cè)試和執(zhí)行代碼,然后就是分叉結(jié)束了。但慢慢來(lái),我們先說(shuō)前半部分,就是從概念提出到寫(xiě)好代碼這部分。因?yàn)槲覀兘^大多數(shù)人其實(shí)不知道這些開(kāi)發(fā)者是在干嗎的,到底怎么提概念,怎么討論,怎么寫(xiě)代碼,最后誰(shuí)的代碼說(shuō)了算。
好,為了講明白比特幣分叉的前部分,我先給大家講一個(gè)故事,一個(gè)辦公室的故事。
你在一家公司的一個(gè)部門(mén),比如火幣的產(chǎn)品研發(fā)部,部門(mén)一共5個(gè)同事,其中一個(gè)部門(mén)經(jīng)理?,F(xiàn)在部門(mén)要向公司提交下個(gè)月的辦公用品采購(gòu)計(jì)劃。部門(mén)經(jīng)理先用wrod文檔寫(xiě)了一份采購(gòu)申請(qǐng)單,并且在申請(qǐng)單上填上了自己計(jì)劃要買(mǎi)的東西。然后經(jīng)理將這個(gè)文檔上傳到部門(mén)的共享文檔上。
同事A將文檔復(fù)制了一份,然后在后面添加了自己想要采購(gòu)的東西,然后上傳到共享文檔申請(qǐng)經(jīng)理審批。同事B、C、D也分別復(fù)制了一份,分別添加了自己想要買(mǎi)的東西,并且申請(qǐng)審批。
部門(mén)經(jīng)理審批了A的采購(gòu)計(jì)劃,認(rèn)為合理,他就將A的需求合并到自己的那份申請(qǐng)單后面。接著部門(mén)經(jīng)理又審批了同事B的計(jì)劃,他認(rèn)為不合理,他就拒絕了B的需求,直接丟棄了B的計(jì)劃單。然后繼續(xù)審批C和D的。要么合并,要么丟棄。
然后這個(gè)同事B就很生氣,認(rèn)為這不合理,他就越過(guò)部門(mén)經(jīng)理,直接向公司提交了一份單獨(dú)的采購(gòu)申請(qǐng)單。
好故事講完了,同志們,上面這個(gè)故事,就是一個(gè)典型的比特幣分叉的設(shè)計(jì)過(guò)程。把以上這個(gè)例子中的“采購(gòu)申請(qǐng)單”,換成一個(gè)“程序開(kāi)發(fā)項(xiàng)目”,上述過(guò)程就是一個(gè)典型的“立項(xiàng)”、“分支”、“請(qǐng)求”、“合并”、“分叉”的過(guò)程。
2009年有一個(gè)程序員,叫中本聰,寫(xiě)了一個(gè)程序,叫bitcoin,將代碼上傳到了github,公開(kāi)出去,形成一個(gè)主代碼倉(cāng)庫(kù),這個(gè)主代碼倉(cāng)庫(kù)就叫bitcoin
然后有很多其他程序員看到了這個(gè)bitcoin代碼倉(cāng)庫(kù),覺(jué)得很有意思,就分別將這個(gè)代碼復(fù)制下來(lái)研究,形成一個(gè)“branch”(中文譯成分支),在分支上加上自己想要的特性,然后向主代碼管理員提交申請(qǐng),叫“pull request”,中文叫“請(qǐng)求”。申請(qǐng)將自己的修改部分合并到主代碼倉(cāng)庫(kù)里。
然后這個(gè)主開(kāi)發(fā)者會(huì)審批這個(gè)“pull request”,如果合格了,他就會(huì)將這部分代碼合并到主代碼庫(kù),這個(gè)過(guò)程叫“merge”,中文譯成“合并”。
如果主開(kāi)發(fā)者認(rèn)為這個(gè)“pull request”不合理,他就會(huì)拒絕,英文叫“Close”。
但如果提這個(gè)“pull request”的人覺(jué)得他是對(duì)的,他可以獨(dú)立出去,不和這個(gè)主開(kāi)發(fā)者玩了,自己立個(gè)項(xiàng),取個(gè)別的名字,然后自己合并代碼。這樣就形成了一個(gè)“fork”,中文譯成分叉。這個(gè)分叉和比特幣協(xié)議升級(jí)的那個(gè)分叉不是同一個(gè)東西啊,名字相同,含義不同。
以上是所有參與者都是有開(kāi)發(fā)權(quán)限的流程,但如果是一個(gè)項(xiàng)目組外的人,看到了這個(gè)項(xiàng)目,并且想提交一份特性的代碼“pull request”,那他就得先對(duì)這個(gè)主代碼倉(cāng)庫(kù)進(jìn)行“fork”,然后再提交“pull request”。這個(gè)沒(méi)有開(kāi)發(fā)權(quán)限的人叫沒(méi)有提交代碼權(quán),提交代碼權(quán)英文叫commit權(quán)限。
這就是開(kāi)源軟件管理的過(guò)程。開(kāi)源軟件的代碼更新,和漏洞修復(fù)都是使用這一套流程。
比特幣就是一套開(kāi)源軟件,一開(kāi)始有只有一個(gè)代碼倉(cāng)庫(kù),是中本聰建立的,叫Bitcoin,后來(lái)有很多人"fork"了Bitcoin,并提交了“pull requests”,然后被合并新代碼,比特幣就一直這樣走了很多年,特性變的越來(lái)越多,代碼也越來(lái)越復(fù)雜。也有人程序的請(qǐng)求沒(méi)有被合并,甚至有些人干脆自己“fork”并獨(dú)立出去,形成新的分叉。就形成了一個(gè)包含新特性升級(jí)的版本的比特幣軟件。
現(xiàn)在比特幣這套開(kāi)源軟件有非常多的分叉,最著名的就是bitcoin core、bitcoin unlimited、bitcoin classic、bitcoin XT、Bcoin……
第3章 比特幣分叉的后半部分——執(zhí)行分叉
好,我們搞懂了比特幣分叉前半部分,那接下來(lái)就是分叉的后半部分。這就是中國(guó)人的主場(chǎng)了。這個(gè)分叉前半部分啊,其實(shí)沒(méi)啥咱中國(guó)人的事兒,都是人家美國(guó)人和歐洲的人主場(chǎng),這就和中國(guó)足球隊(duì)跑到巴薩羅那去踢球,一丁點(diǎn)兒存在感都不會(huì)有。就是去被人欺負(fù)的。在2015年和2016年中國(guó)礦池老板和交易所還組織去美國(guó)跟開(kāi)發(fā)者談判,人家吊都不吊你,根本就不帶你玩,就叫你玩泥巴。分叉這事啊,一直是老外欺負(fù)中國(guó)人。但到了分叉后半部分,老外就說(shuō),媽的,日了狗了,到了中國(guó)人的主場(chǎng)。
比特幣分叉的前半部分是將代碼寫(xiě)好了,這時(shí)候比特幣軟件至少會(huì)有兩個(gè)版本,一個(gè)是不包含分叉的新特性的老版本,一個(gè)是包含分叉特性的新版本。有時(shí)候啊,分叉特性還會(huì)有好幾種不同的特性呢。就比如bitcoin core, Bitcoin unlimited、bitcoin classic、bitcoin XT、Bitcoin abc都是包含了不同特性的比特幣軟件。
比特幣分叉的后半部分就是用戶,特別是礦池和交易所要安裝這些分叉前半部分寫(xiě)好的軟件版本,這里就存在你是否安裝新版本,還是要留在老版本上,如果你安裝新版本,你又是想安裝哪一個(gè)新版本呢?
這時(shí)候麻煩就來(lái)了,鐺鐺鐺鐺。。。。。比特幣分叉的前半部分是設(shè)計(jì)圖紙,后半部分是按讓圖紙上的設(shè)計(jì)工作起來(lái),這是實(shí)際生產(chǎn)環(huán)節(jié),這個(gè)過(guò)程搞不好就會(huì)出問(wèn)題的。
如果大家不統(tǒng)一安裝一個(gè)版本的比特幣軟件,就有可能會(huì)造成比特幣網(wǎng)絡(luò)的分裂,就會(huì)分成兩個(gè)幣。如果大家能夠統(tǒng)一安裝一個(gè)版本的比特幣軟件,或者安裝可以相互兼容的版本,那比特幣分叉勝利完成,比特幣網(wǎng)絡(luò)就會(huì)升級(jí)到新的版本。
BCC的分裂就是礦工們分成了兩波,其中一小波安裝了bitcoin abc這個(gè)包含了新特性版本的比特幣軟件,另一大波還留在原來(lái)的不包含新特性的比特幣軟件版本。從而導(dǎo)致了分裂的出現(xiàn)。
談到這個(gè)分不分裂的問(wèn)題,就到了今天的高潮了。但是,高潮之前我們先來(lái)點(diǎn)前戲,我們先來(lái)搞懂兩個(gè)組織比特幣協(xié)議升級(jí)的工具,軟分叉和硬分叉。
第4章 比特幣分叉工具——軟分叉和硬分叉
我們講比特幣協(xié)議升級(jí),什么叫升級(jí)啊,先拋開(kāi)“升級(jí)”這個(gè)明顯帶有褒義的詞,我們說(shuō)成是比特幣協(xié)議的修改,對(duì)吧。所謂的升級(jí)就是對(duì)協(xié)議的修改。
好問(wèn)題來(lái)了,修改的具體含義是什么?請(qǐng)大家認(rèn)真思考,并謹(jǐn)慎回答這個(gè)問(wèn)題,修改比特幣協(xié)議的具體含義是什么?給大家100秒的時(shí)間,現(xiàn)在倒計(jì)時(shí),一百,一,時(shí)間到。答案揭曉。對(duì)任何協(xié)議的改變就存在兩種,一是規(guī)則收緊;二是規(guī)則放寬。對(duì)不對(duì),對(duì)不對(duì)。對(duì)。
比如對(duì)比特幣區(qū)塊大小這個(gè)規(guī)則來(lái)說(shuō),現(xiàn)在的協(xié)議里的規(guī)則size<=1M,如果要擴(kuò)容,將區(qū)塊上限設(shè)定為size<=2M,這就是規(guī)則放寬。如果要縮容,將區(qū)塊上限設(shè)定為size<=5K,就是規(guī)則縮小。
另外還能派生出其他方法,比如先規(guī)則收緊,再規(guī)則放寬;或者先規(guī)則放寬,再規(guī)則收緊。但這本質(zhì)上是兩次規(guī)則修改,可以拆分來(lái)分析。
這種對(duì)規(guī)則的放寬舊節(jié)點(diǎn)是能識(shí)別的,因?yàn)樾乱?guī)則會(huì)超越老規(guī)則的范圍嘛,這樣舊節(jié)點(diǎn)會(huì)拒絕承認(rèn)。就比如老規(guī)則要求比特幣區(qū)塊大小<=1M,然后按新規(guī)則打包出一個(gè)2M的區(qū)塊,那老規(guī)則肯定拒絕承認(rèn)啊。
而對(duì)規(guī)則的收緊舊節(jié)點(diǎn)則無(wú)法識(shí)別,所以舊節(jié)點(diǎn)不會(huì)拒絕,但新節(jié)點(diǎn)會(huì)識(shí)別出超越了規(guī)則收緊后的舊節(jié)點(diǎn)行為,就會(huì)對(duì)舊節(jié)點(diǎn)進(jìn)行拒絕。
以上這兩段話非常重要啊,我再重復(fù)一下下,OK,現(xiàn)在我是復(fù)讀機(jī),復(fù)讀上面兩個(gè)氣泡。
對(duì)規(guī)則的放寬舊節(jié)點(diǎn)是能識(shí)別的,并且舊節(jié)點(diǎn)會(huì)拒絕承認(rèn)。而對(duì)規(guī)則的收緊舊節(jié)點(diǎn)則無(wú)法識(shí)別,所以舊節(jié)點(diǎn)不會(huì)拒絕,但新節(jié)點(diǎn)會(huì)識(shí)別出超越了規(guī)則收緊后的舊節(jié)點(diǎn)行為,就會(huì)對(duì)舊節(jié)點(diǎn)進(jìn)行拒絕。
結(jié)論來(lái)了,規(guī)則收緊就是軟分叉,規(guī)則放寬就是硬分叉。
為了更清晰地說(shuō)明這個(gè)軟分叉還是硬分叉,我打一個(gè)比方。我們假設(shè)微信的視頻通話功能設(shè)了IP過(guò)濾功能,老版本呢,只能允許中國(guó)的IP地址使用視頻通話功能。如果馬化騰搞出一個(gè)新版本來(lái),將視頻通話功能的IP列表加上了美國(guó)的IP,那就是規(guī)則放寬了。這時(shí)候老版本就不讓啊,哎,怎么有來(lái)自美國(guó)的IP,給Y屏蔽了,不讓它跟我們視頻,分叉。這就是硬分叉。
但如果馬化騰搞了一個(gè)新版本的微信,并且只允許北京市的IP地址才可以視頻通話,其他的地方都不能視頻通話,那這就是規(guī)則縮小。老版本一看,哎呀,來(lái)自北京的朋友啊,來(lái)來(lái)來(lái),我們來(lái)視頻通話,接受啊,不分叉。這就是軟分叉。但新版本一看,你妹,你的IP來(lái)自廣東,給你屏蔽了,分叉。所以對(duì)新版本來(lái)說(shuō),老版本就是一個(gè)硬分叉。
OK,但是,先別開(kāi)心,還有更復(fù)雜的設(shè)計(jì) 。
但這兩種都是對(duì)現(xiàn)有的規(guī)則進(jìn)行修改,如果在現(xiàn)有規(guī)則的基礎(chǔ)上再增補(bǔ)新規(guī)則呢?或者對(duì)現(xiàn)有規(guī)則的基礎(chǔ)上進(jìn)行刪除規(guī)則呢?這種情況就非常特殊了。
如果要對(duì)比特幣部署一個(gè)協(xié)議改變,這個(gè)改變是增加一個(gè)新規(guī)則,請(qǐng)問(wèn),這是規(guī)則收緊呢,還是規(guī)則放寬呢?答案是要看情況。
如果老規(guī)則明確定義清楚了,不允許出現(xiàn)這個(gè)新規(guī)則,答案就是規(guī)則放寬,如果老規(guī)則的定義不清楚,對(duì)這個(gè)新規(guī)則是模糊的,出了就視而不見(jiàn),那就是規(guī)則收緊。而同樣的,前者就是一個(gè)硬分叉,后者就是一個(gè)軟分叉。
隔離見(jiàn)證就是一個(gè)典型的增加新規(guī)則的分叉。在比特幣交易驗(yàn)證的老規(guī)則下,是有一個(gè)叫anyonecanspend的交易,就是發(fā)一筆交易,這筆交易任何人都可以花,這種交易在老規(guī)則下是合法的。然后隔離見(jiàn)證就是利用這個(gè)老規(guī)則,增加了一個(gè)新規(guī)則,驗(yàn)證這個(gè)anyonecanspend的交易需求額外增加一個(gè)條件,就是難度見(jiàn)證數(shù)據(jù),就是witness數(shù)據(jù)。這就是規(guī)則的增補(bǔ),但因?yàn)槔弦?guī)則是不知道witness這個(gè)數(shù)據(jù)的,所以老規(guī)則視而不見(jiàn)。這就是一個(gè)軟分叉。
好,現(xiàn)在我們講完了比特幣的軟分叉和硬分叉這兩個(gè)工具。這就是兩個(gè)工具,本質(zhì)上是沒(méi)有詞性的,但現(xiàn)在好像硬分叉成了貶義詞,大家聽(tīng)到硬分叉就害怕。這就是要講高潮部分了,比特幣分裂。讓我們來(lái)說(shuō)明,比特幣的軟分叉和硬分叉這兩個(gè)比特幣協(xié)議升級(jí)工具,到底怎么對(duì)比特幣進(jìn)行分裂和不分裂的。
硬分叉和軟分叉都是比特幣協(xié)議升級(jí)的部署方式。比特幣協(xié)議不作更改時(shí),即絕大多數(shù)時(shí)間里比特幣系統(tǒng)運(yùn)行時(shí),所有節(jié)點(diǎn)追隨最長(zhǎng)鏈。除非最長(zhǎng)鏈在節(jié)點(diǎn)看來(lái)是包含了非法的區(qū)塊。
硬分叉是指協(xié)議規(guī)則放寬。這樣新規(guī)則部署后,如果有節(jié)點(diǎn)沒(méi)有升級(jí),針對(duì)新的規(guī)則的區(qū)塊未升級(jí)的節(jié)點(diǎn)會(huì)認(rèn)定其為非法。這個(gè)時(shí)候,舊節(jié)點(diǎn)就會(huì)放棄追隨這條包含非法規(guī)則的鏈,哪怕它是最長(zhǎng)鏈也一樣會(huì)放棄。這種情況下,未升級(jí)的節(jié)點(diǎn)就會(huì)主動(dòng)分裂出去。
軟分叉是指協(xié)議規(guī)則收緊。這樣新規(guī)則部署后,新規(guī)則是舊規(guī)則的一個(gè)子集,未升級(jí)的節(jié)點(diǎn)并不會(huì)認(rèn)為新規(guī)則的區(qū)塊是非法的。所以簡(jiǎn)單想,軟分叉不升級(jí)的節(jié)點(diǎn)并不會(huì)主動(dòng)分裂出去,并且依然追隨最長(zhǎng)鏈規(guī)則。但軟分叉也有可能會(huì)造成區(qū)塊鏈分裂。只要加上追隨最長(zhǎng)鏈這個(gè)規(guī)則就可以想明白。
軟分叉是規(guī)則收緊,即新規(guī)則是舊規(guī)則的子集。所以未升級(jí)的節(jié)點(diǎn)會(huì)視已經(jīng)升級(jí)的節(jié)點(diǎn)打包的區(qū)塊是合法的區(qū)塊。但已升級(jí)的節(jié)點(diǎn)卻會(huì)視未升級(jí)的節(jié)點(diǎn)打包的區(qū)塊是非法的區(qū)塊。所以未升級(jí)的節(jié)點(diǎn)繼續(xù)堅(jiān)持最長(zhǎng)鏈原則,但已經(jīng)升級(jí)的節(jié)點(diǎn)則會(huì)無(wú)視未升級(jí)的節(jié)點(diǎn)是否是最長(zhǎng)鏈。
如果已經(jīng)升級(jí)的節(jié)點(diǎn)的算力更大,那未升級(jí)的節(jié)點(diǎn)打包出的區(qū)塊會(huì)因?yàn)樗鼈冏冯S最長(zhǎng)鏈而被孤立。但如果是已經(jīng)升級(jí)的節(jié)點(diǎn)的算力更小呢?結(jié)局就是已經(jīng)升級(jí)的節(jié)點(diǎn)會(huì)獨(dú)立挖一條鏈而分裂出去。
軟分叉造成區(qū)塊鏈分裂的風(fēng)險(xiǎn)主要是升級(jí)過(guò)程中支持的算力過(guò)小。只要執(zhí)行軟分叉的算力不占有絕對(duì)的優(yōu)勢(shì),無(wú)法使用追隨最長(zhǎng)鏈規(guī)則孤立掉不升級(jí)的算力打包的區(qū)塊,那就會(huì)分裂。所以說(shuō),軟分叉無(wú)論多小的算力都是可以成功發(fā)起對(duì)比特幣的分裂。
這和硬分叉造成分裂的風(fēng)險(xiǎn)是一樣的。因?yàn)閺脑砩希卜植嬷胁簧?jí)的節(jié)點(diǎn)就是對(duì)已經(jīng)升級(jí)的節(jié)點(diǎn)發(fā)起的一次軟分叉(規(guī)則收緊)。
避免硬分叉和軟分叉造成分裂的辦法也都是一樣——使用更大的算力閾值才允許部署。考慮到出塊幸運(yùn)值的原因,至少要75%算力才可以保持安全。
第5章 普通用戶在分叉期間應(yīng)該注意什么
基本上比特幣分叉就是這樣了。我喝杯水先,然后我講最后一個(gè)部分,分叉過(guò)程中,我們普通用戶該怎么辦。這個(gè)部分很簡(jiǎn)單的。所以水還是不喝了。
比特幣分叉就是軟件升級(jí)的過(guò)程用戶需要注意的最重要的知識(shí)點(diǎn)有兩個(gè),第一個(gè)是掌握私鑰。第二個(gè)是做好重防保護(hù)。
因?yàn)楸忍貛欧植妫瑹o(wú)論是軟分叉還是硬分叉,都有可能會(huì)帶來(lái)分裂。但只要用戶拿著私鑰,那怎么分,都是自動(dòng)擁有了分裂后的所有的幣。所以拿著私鑰很重要。
使用一個(gè)鏈上錢(qián)包保存你的幣,就根本不用擔(dān)心分裂問(wèn)題,就比如這次演講的組織者賣(mài)的庫(kù)神硬件錢(qián)包,這就是一個(gè)鏈上錢(qián)包。這還是一個(gè)冷錢(qián)包,安全性不錯(cuò)。挺好用的。
不過(guò)我們還是要面對(duì)現(xiàn)實(shí),比特幣確實(shí)很難用,對(duì)很多用戶來(lái)說(shuō),可能真的搞不清楚私鑰是個(gè)啥玩意。第一推薦真的自己去搞清楚來(lái),如果實(shí)在是搞不清楚,那就存放在講信用的交易所吧。比如火幣網(wǎng),他們會(huì)幫用戶分離好幣。
后一個(gè)知識(shí)點(diǎn)叫重防保護(hù)。
首先講明白,重放攻擊其實(shí)根本就不是攻擊。目前幣圈流傳的各種關(guān)于重放攻擊的言論有點(diǎn)過(guò)于危言聳聽(tīng)了。
重放攻擊,這里的“攻擊”根本就不是別人對(duì)你發(fā)起的某種侵略或偷盜行為。而是因?yàn)楸忍貛艆^(qū)塊鏈分裂后的兩個(gè)分支鏈,都有相同的地址、私鑰和交易格式。你在分裂點(diǎn)前的幣,自動(dòng)會(huì)被分裂后的兩條鏈都承認(rèn)。
如果你使用分裂點(diǎn)前的幣發(fā)起一筆交易,在兩條鏈上這筆交易都會(huì)有效。這就是顯得你發(fā)了兩筆交易,這里的另外一筆,就是“重放”。
我打個(gè)比方來(lái)解釋這個(gè),在國(guó)軍退守臺(tái)灣后,蔣公將大陸的很多機(jī)構(gòu)都照樣在臺(tái)灣復(fù)制了一遍。比如在臺(tái)灣也建了清華大學(xué)。而在大陸的北京,也是有一個(gè)清華大學(xué)。
如果你在美國(guó)給清華大學(xué)寫(xiě)一封信,就是用紙,讓郵遞員送的那種信。但收件地址上只寫(xiě)了“中國(guó)清華大學(xué)XXX收”
這個(gè)收件地址即可以解讀為是北京的清華大學(xué),也可以解讀為臺(tái)灣的清華大學(xué)。這下郵遞員麻煩了,他干脆將你的信復(fù)印一遍,送到兩個(gè)大學(xué)去。
這就是重放攻擊。因?yàn)楸緛?lái)你只想寄給臺(tái)灣的清華大學(xué),但現(xiàn)在卻被重放到了北京的清華大學(xué)。
所謂的防范重放攻擊,就是想辦法讓你發(fā)的交易,只在一條鏈上有效,在另一條鏈上無(wú)效。從而可以避免“重放”。
大多數(shù)比特幣的分叉是不需要用戶擔(dān)心啥重放保護(hù)的。首先是分叉并不一定會(huì)分裂,沒(méi)分裂就不會(huì)有重放,其次是如果會(huì)分裂,那分叉的代碼往往會(huì)寫(xiě)好防重防攻擊,用戶不需要擔(dān)心。但如果遇到了分裂了,而且任何一個(gè)幣都沒(méi)有包含重放代碼,那用戶是需要自己處理好重放保護(hù)。
處理的辦法很多,也非常簡(jiǎn)單的??梢允褂靡环N叫讓分裂后的兩條鏈上的幣污染分裂前的幣的辦法。
分裂后,你可以分別從分裂后的兩條鏈上分別買(mǎi)一點(diǎn)幣,發(fā)到你分裂前的地址上,以污染你的幣。這樣你將分裂前的幣發(fā)送交易時(shí),因?yàn)檩斎霂в辛宋廴驹?,這樣就只能在其中一條鏈上有效了。具體的操作也非常簡(jiǎn)單。我們拿BCH和BTC的分裂來(lái)說(shuō),我們假設(shè)BCH是需要用戶做重放保護(hù)的,實(shí)際上是不需求的。
分裂前你要將幣存在自己掌握私鑰的錢(qián)包里。分裂后,你去交易所分別將買(mǎi)一點(diǎn)BTC和BCC,然后發(fā)到你的地址上。然后你再去下載一個(gè)BCC錢(qián)包,將私鑰導(dǎo)進(jìn)這個(gè)錢(qián)包。對(duì)BCC錢(qián)包來(lái)說(shuō),它只能接受到來(lái)自分裂后的BCC鏈上發(fā)來(lái)的那一點(diǎn)幣,而對(duì)于BTC錢(qián)包來(lái)說(shuō),它只能接受到來(lái)自分裂后的BTC鏈上的那一點(diǎn)幣。
這樣你的兩個(gè)錢(qián)包里的幣,分別包含了一點(diǎn)來(lái)自“未來(lái)(分裂后)”的幣,從而導(dǎo)致各自在對(duì)方鏈上是無(wú)效的。這樣你的幣就安全了。
第6章 結(jié)束語(yǔ)
分叉是必須的,只要市場(chǎng)接受,分裂也是好東西,祝比特幣和分裂幣都越來(lái)越好。