• <blockquote id="p4xxi"><xmp id="p4xxi">

    <em id="p4xxi"></em>
    <abbr id="p4xxi"><noframes id="p4xxi">
    <em id="p4xxi"></em>

    升級比特幣協議-分叉詳細說明

    摘要:然后這個主開發者會審批這個“pullrequest”,如果合格了,他就會將這部分代碼合并到主代碼庫,這個過程叫“merge”,中文譯成“合并”。如果主開發者認為這個“pullrequest”不合理,他就會拒絕,英文叫“Close”。...

    引言

    比特幣分叉是一個非常復雜的工程。任何一次比特幣分叉,從理念提出,到社區討論,到代碼設計,到宣傳和推廣,到礦工和用戶部署,這是一個非常復雜的工程。這樣的工程其實在人類的分工協作歷史當中甚至是算得上是史無前例的。參與比特幣的人和公司太多了,不同文,不同種,各自的背景相差太遠太遠,但卻要協調一致。我們人類作為一個物種,歷史上這是第一次干這樣的事。我們現在是歷史的見證人。無論我們怎么吵翻臉,執有不同理念的人相互罵傻逼,都是可以理解的。哪怕是比特幣最后被我們搞失敗了,我認為也是可以理解的。

    其他區塊鏈產品的升級也差不多。

    升級比特幣協議-分叉詳細說明

    比特幣

    第1章 比特幣分叉就是比特幣軟件升級

    在這么復雜的工程面前,我們作為普通的用戶,可以做的第一件事就是清晰了解這個工程里的概念。這些概念是溝通的語言,是我們參與討論的基礎。好,我們先來搞清楚比特幣分叉這個最基礎的概念。到底什么是分叉?

    比特幣就是一套軟件,這套軟件很復雜。我們這些玩比特幣的人,在各自的電腦上和手機上運行這些比特幣相關的軟件,這些軟件要能相互連接,形成一個網絡。比特幣分叉就是比特幣這些軟件升級的過程。

    我們使用微信,微信每隔幾個星期就要升級一個版本,增加些新功能啦,改改字體了,修修bug之類的。比特幣這套軟件同樣是要升級的,也想增加新功能,也要修改漏洞,也要做界面的美化。

    你看我們在手機上裝一個微信,騰訊公司發布新版本時,其實我們往往是愿意升級就升級的,不愿意就拉倒。只不過是新功能你用不著而已。如果你用很老版本的微信,你不升級,如果我用最新的微信想跟你視頻,可能就會提示,對方微信版本太低,不支持視頻通話。

    但比特幣網絡這套軟件,要比微信這樣的單一公司發布的產品要復雜很多很多。比特幣的升級也要復雜很多。比特幣大部分的特性升級,是和微信的升級差不多,用戶可以選擇升和不升,影響不大,只不過你能不能享受新特性的區別罷了。但涉及到一些核心層面的特性升級,以及一些重大漏洞的升級,那幾乎是要絕大多數人同時升級,才能勝利讓比特幣這套軟件勝利運行下去。如果你不升級很可能就會出問題。一旦涉及到比特幣核心層面特性的變動,這樣的升級,往往就被稱為分叉。

    所以不要怕分叉,比特幣要分叉了,就是要做一次重要的特性升級了。如果你是用微信,我們都喜歡新版本對吧,我們也需要新的手機對吧,為什么啊,因為有升級啊。比特幣分叉,就是比特幣升級啊,這是好事兒。怕什么怕,沒見過軟件升級嗎?得多沒見過世面,才會怕啊,鄉巴佬才怕。

    升級比特幣協議-分叉詳細說明

    比特幣分叉

    第2章 比特幣分叉的前半部分——設計分叉

    下面我們要高清楚的一些分叉過程的更細節的概念。因為比特幣分叉,畢竟是一個很復雜的系統工程,為了完成這個工作要分很多步驟的。我以前是機械設計工程師,當過好幾年的項目經理,要管好一個項目,可難了,不過有方法論,叫項目管理,這是一套科學,有很多書要讀。比特幣分叉也是一個項目,怎么執行,怎么管理,也是要講科學的。我們先來講這套科學知識體系中的設計部分。

    比特幣協議升級,一般是有人先提出一個概念,然后很多很多人都會去討論,然后有人寫成代碼,然后有礦工和用戶去測試和執行代碼,然后就是分叉結束了。但慢慢來,我們先說前半部分,就是從概念提出到寫好代碼這部分。因為我們絕大多數人其實不知道這些開發者是在干嗎的,到底怎么提概念,怎么討論,怎么寫代碼,最后誰的代碼說了算。

    好,為了講明白比特幣分叉的前部分,我先給大家講一個故事,一個辦公室的故事。

    你在一家公司的一個部門,比如火幣的產品研發部,部門一共5個同事,其中一個部門經理。現在部門要向公司提交下個月的辦公用品采購計劃。部門經理先用wrod文檔寫了一份采購申請單,并且在申請單上填上了自己計劃要買的東西。然后經理將這個文檔上傳到部門的共享文檔上。

    同事A將文檔復制了一份,然后在后面添加了自己想要采購的東西,然后上傳到共享文檔申請經理審批。同事B、C、D也分別復制了一份,分別添加了自己想要買的東西,并且申請審批。

    部門經理審批了A的采購計劃,認為合理,他就將A的需求合并到自己的那份申請單后面。接著部門經理又審批了同事B的計劃,他認為不合理,他就拒絕了B的需求,直接丟棄了B的計劃單。然后繼續審批C和D的。要么合并,要么丟棄。

    然后這個同事B就很生氣,認為這不合理,他就越過部門經理,直接向公司提交了一份單獨的采購申請單。

    好故事講完了,同志們,上面這個故事,就是一個典型的比特幣分叉的設計過程。把以上這個例子中的“采購申請單”,換成一個“程序開發項目”,上述過程就是一個典型的“立項”、“分支”、“請求”、“合并”、“分叉”的過程。

    2009年有一個程序員,叫中本聰,寫了一個程序,叫bitcoin,將代碼上傳到了github,公開出去,形成一個主代碼倉庫,這個主代碼倉庫就叫bitcoin

    然后有很多其他程序員看到了這個bitcoin代碼倉庫,覺得很有意思,就分別將這個代碼復制下來研究,形成一個“branch”(中文譯成分支),在分支上加上自己想要的特性,然后向主代碼管理員提交申請,叫“pull request”,中文叫“請求”。申請將自己的修改部分合并到主代碼倉庫里。

    然后這個主開發者會審批這個“pull request”,如果合格了,他就會將這部分代碼合并到主代碼庫,這個過程叫“merge”,中文譯成“合并”。

    如果主開發者認為這個“pull request”不合理,他就會拒絕,英文叫“Close”。

    但如果提這個“pull request”的人覺得他是對的,他可以獨立出去,不和這個主開發者玩了,自己立個項,取個別的名字,然后自己合并代碼。這樣就形成了一個“fork”,中文譯成分叉。這個分叉和比特幣協議升級的那個分叉不是同一個東西啊,名字相同,含義不同。

    以上是所有參與者都是有開發權限的流程,但如果是一個項目組外的人,看到了這個項目,并且想提交一份特性的代碼“pull request”,那他就得先對這個主代碼倉庫進行“fork”,然后再提交“pull request”。這個沒有開發權限的人叫沒有提交代碼權,提交代碼權英文叫commit權限。

    這就是開源軟件管理的過程。開源軟件的代碼更新,和漏洞修復都是使用這一套流程。

    比特幣就是一套開源軟件,一開始有只有一個代碼倉庫,是中本聰建立的,叫Bitcoin,后來有很多人"fork"了Bitcoin,并提交了“pull requests”,然后被合并新代碼,比特幣就一直這樣走了很多年,特性變的越來越多,代碼也越來越復雜。也有人程序的請求沒有被合并,甚至有些人干脆自己“fork”并獨立出去,形成新的分叉。就形成了一個包含新特性升級的版本的比特幣軟件。

    現在比特幣這套開源軟件有非常多的分叉,最著名的就是bitcoin core、bitcoin unlimited、bitcoin classic、bitcoin XT、Bcoin……

    第3章 比特幣分叉的后半部分——執行分叉

    好,我們搞懂了比特幣分叉前半部分,那接下來就是分叉的后半部分。這就是中國人的主場了。這個分叉前半部分啊,其實沒啥咱中國人的事兒,都是人家美國人和歐洲的人主場,這就和中國足球隊跑到巴薩羅那去踢球,一丁點兒存在感都不會有。就是去被人欺負的。在2015年和2016年中國礦池老板和交易所還組織去美國跟開發者談判,人家吊都不吊你,根本就不帶你玩,就叫你玩泥巴。分叉這事啊,一直是老外欺負中國人。但到了分叉后半部分,老外就說,媽的,日了狗了,到了中國人的主場。

    比特幣分叉的前半部分是將代碼寫好了,這時候比特幣軟件至少會有兩個版本,一個是不包含分叉的新特性的老版本,一個是包含分叉特性的新版本。有時候啊,分叉特性還會有好幾種不同的特性呢。就比如bitcoin core, Bitcoin unlimited、bitcoin classic、bitcoin XT、Bitcoin abc都是包含了不同特性的比特幣軟件。

    比特幣分叉的后半部分就是用戶,特別是礦池和交易所要安裝這些分叉前半部分寫好的軟件版本,這里就存在你是否安裝新版本,還是要留在老版本上,如果你安裝新版本,你又是想安裝哪一個新版本呢?

    這時候麻煩就來了,鐺鐺鐺鐺。。。。。比特幣分叉的前半部分是設計圖紙,后半部分是按讓圖紙上的設計工作起來,這是實際生產環節,這個過程搞不好就會出問題的。

    如果大家不統一安裝一個版本的比特幣軟件,就有可能會造成比特幣網絡的分裂,就會分成兩個幣。如果大家能夠統一安裝一個版本的比特幣軟件,或者安裝可以相互兼容的版本,那比特幣分叉勝利完成,比特幣網絡就會升級到新的版本。

    BCC的分裂就是礦工們分成了兩波,其中一小波安裝了bitcoin abc這個包含了新特性版本的比特幣軟件,另一大波還留在原來的不包含新特性的比特幣軟件版本。從而導致了分裂的出現。

    談到這個分不分裂的問題,就到了今天的高潮了。但是,高潮之前我們先來點前戲,我們先來搞懂兩個組織比特幣協議升級的工具,軟分叉和硬分叉。

    第4章 比特幣分叉工具——軟分叉和硬分叉

    我們講比特幣協議升級,什么叫升級啊,先拋開“升級”這個明顯帶有褒義的詞,我們說成是比特幣協議的修改,對吧。所謂的升級就是對協議的修改。

    好問題來了,修改的具體含義是什么?請大家認真思考,并謹慎回答這個問題,修改比特幣協議的具體含義是什么?給大家100秒的時間,現在倒計時,一百,一,時間到。答案揭曉。對任何協議的改變就存在兩種,一是規則收緊;二是規則放寬。對不對,對不對。對。

    比如對比特幣區塊大小這個規則來說,現在的協議里的規則size<=1M,如果要擴容,將區塊上限設定為size<=2M,這就是規則放寬。如果要縮容,將區塊上限設定為size<=5K,就是規則縮小。

    另外還能派生出其他方法,比如先規則收緊,再規則放寬;或者先規則放寬,再規則收緊。但這本質上是兩次規則修改,可以拆分來分析。

    這種對規則的放寬舊節點是能識別的,因為新規則會超越老規則的范圍嘛,這樣舊節點會拒絕承認。就比如老規則要求比特幣區塊大小<=1M,然后按新規則打包出一個2M的區塊,那老規則肯定拒絕承認啊。

    而對規則的收緊舊節點則無法識別,所以舊節點不會拒絕,但新節點會識別出超越了規則收緊后的舊節點行為,就會對舊節點進行拒絕。

    以上這兩段話非常重要啊,我再重復一下下,OK,現在我是復讀機,復讀上面兩個氣泡。

    對規則的放寬舊節點是能識別的,并且舊節點會拒絕承認。而對規則的收緊舊節點則無法識別,所以舊節點不會拒絕,但新節點會識別出超越了規則收緊后的舊節點行為,就會對舊節點進行拒絕。

    結論來了,規則收緊就是軟分叉,規則放寬就是硬分叉。

    為了更清晰地說明這個軟分叉還是硬分叉,我打一個比方。我們假設微信的視頻通話功能設了IP過濾功能,老版本呢,只能允許中國的IP地址使用視頻通話功能。如果馬化騰搞出一個新版本來,將視頻通話功能的IP列表加上了美國的IP,那就是規則放寬了。這時候老版本就不讓啊,哎,怎么有來自美國的IP,給Y屏蔽了,不讓它跟我們視頻,分叉。這就是硬分叉。

    但如果馬化騰搞了一個新版本的微信,并且只允許北京市的IP地址才可以視頻通話,其他的地方都不能視頻通話,那這就是規則縮小。老版本一看,哎呀,來自北京的朋友啊,來來來,我們來視頻通話,接受啊,不分叉。這就是軟分叉。但新版本一看,你妹,你的IP來自廣東,給你屏蔽了,分叉。所以對新版本來說,老版本就是一個硬分叉。

    OK,但是,先別開心,還有更復雜的設計 。

    但這兩種都是對現有的規則進行修改,如果在現有規則的基礎上再增補新規則呢?或者對現有規則的基礎上進行刪除規則呢?這種情況就非常特殊了。

    如果要對比特幣部署一個協議改變,這個改變是增加一個新規則,請問,這是規則收緊呢,還是規則放寬呢?答案是要看情況。

    如果老規則明確定義清楚了,不允許出現這個新規則,答案就是規則放寬,如果老規則的定義不清楚,對這個新規則是模糊的,出了就視而不見,那就是規則收緊。而同樣的,前者就是一個硬分叉,后者就是一個軟分叉。

    隔離見證就是一個典型的增加新規則的分叉。在比特幣交易驗證的老規則下,是有一個叫anyonecanspend的交易,就是發一筆交易,這筆交易任何人都可以花,這種交易在老規則下是合法的。然后隔離見證就是利用這個老規則,增加了一個新規則,驗證這個anyonecanspend的交易需求額外增加一個條件,就是難度見證數據,就是witness數據。這就是規則的增補,但因為老規則是不知道witness這個數據的,所以老規則視而不見。這就是一個軟分叉。

    好,現在我們講完了比特幣的軟分叉和硬分叉這兩個工具。這就是兩個工具,本質上是沒有詞性的,但現在好像硬分叉成了貶義詞,大家聽到硬分叉就害怕。這就是要講高潮部分了,比特幣分裂。讓我們來說明,比特幣的軟分叉和硬分叉這兩個比特幣協議升級工具,到底怎么對比特幣進行分裂和不分裂的。

    硬分叉和軟分叉都是比特幣協議升級的部署方式。比特幣協議不作更改時,即絕大多數時間里比特幣系統運行時,所有節點追隨最長鏈。除非最長鏈在節點看來是包含了非法的區塊。

    硬分叉是指協議規則放寬。這樣新規則部署后,如果有節點沒有升級,針對新的規則的區塊未升級的節點會認定其為非法。這個時候,舊節點就會放棄追隨這條包含非法規則的鏈,哪怕它是最長鏈也一樣會放棄。這種情況下,未升級的節點就會主動分裂出去。

    軟分叉是指協議規則收緊。這樣新規則部署后,新規則是舊規則的一個子集,未升級的節點并不會認為新規則的區塊是非法的。所以簡單想,軟分叉不升級的節點并不會主動分裂出去,并且依然追隨最長鏈規則。但軟分叉也有可能會造成區塊鏈分裂。只要加上追隨最長鏈這個規則就可以想明白。

    軟分叉是規則收緊,即新規則是舊規則的子集。所以未升級的節點會視已經升級的節點打包的區塊是合法的區塊。但已升級的節點卻會視未升級的節點打包的區塊是非法的區塊。所以未升級的節點繼續堅持最長鏈原則,但已經升級的節點則會無視未升級的節點是否是最長鏈。

    如果已經升級的節點的算力更大,那未升級的節點打包出的區塊會因為它們追隨最長鏈而被孤立。但如果是已經升級的節點的算力更小呢?結局就是已經升級的節點會獨立挖一條鏈而分裂出去。

    軟分叉造成區塊鏈分裂的風險主要是升級過程中支持的算力過小。只要執行軟分叉的算力不占有絕對的優勢,無法使用追隨最長鏈規則孤立掉不升級的算力打包的區塊,那就會分裂。所以說,軟分叉無論多小的算力都是可以成功發起對比特幣的分裂。

    這和硬分叉造成分裂的風險是一樣的。因為從原理上,硬分叉中不升級的節點就是對已經升級的節點發起的一次軟分叉(規則收緊)。

    避免硬分叉和軟分叉造成分裂的辦法也都是一樣——使用更大的算力閾值才允許部署。考慮到出塊幸運值的原因,至少要75%算力才可以保持安全。

    升級比特幣協議-分叉詳細說明

    第5章 普通用戶在分叉期間應該注意什么

    基本上比特幣分叉就是這樣了。我喝杯水先,然后我講最后一個部分,分叉過程中,我們普通用戶該怎么辦。這個部分很簡單的。所以水還是不喝了。

    比特幣分叉就是軟件升級的過程用戶需要注意的最重要的知識點有兩個,第一個是掌握私鑰。第二個是做好重防保護。

    因為比特幣分叉,無論是軟分叉還是硬分叉,都有可能會帶來分裂。但只要用戶拿著私鑰,那怎么分,都是自動擁有了分裂后的所有的幣。所以拿著私鑰很重要。

    使用一個鏈上錢包保存你的幣,就根本不用擔心分裂問題,就比如這次演講的組織者賣的庫神硬件錢包,這就是一個鏈上錢包。這還是一個冷錢包,安全性不錯。挺好用的。

    不過我們還是要面對現實,比特幣確實很難用,對很多用戶來說,可能真的搞不清楚私鑰是個啥玩意。第一推薦真的自己去搞清楚來,如果實在是搞不清楚,那就存放在講信用的交易所吧。比如火幣網,他們會幫用戶分離好幣。

    后一個知識點叫重防保護。

    首先講明白,重放攻擊其實根本就不是攻擊。目前幣圈流傳的各種關于重放攻擊的言論有點過于危言聳聽了。

    重放攻擊,這里的“攻擊”根本就不是別人對你發起的某種侵略或偷盜行為。而是因為比特幣區塊鏈分裂后的兩個分支鏈,都有相同的地址、私鑰和交易格式。你在分裂點前的幣,自動會被分裂后的兩條鏈都承認。

    如果你使用分裂點前的幣發起一筆交易,在兩條鏈上這筆交易都會有效。這就是顯得你發了兩筆交易,這里的另外一筆,就是“重放”。

    我打個比方來解釋這個,在國軍退守臺灣后,蔣公將大陸的很多機構都照樣在臺灣復制了一遍。比如在臺灣也建了清華大學。而在大陸的北京,也是有一個清華大學。

    如果你在美國給清華大學寫一封信,就是用紙,讓郵遞員送的那種信。但收件地址上只寫了“中國清華大學XXX收”

    這個收件地址即可以解讀為是北京的清華大學,也可以解讀為臺灣的清華大學。這下郵遞員麻煩了,他干脆將你的信復印一遍,送到兩個大學去。

    這就是重放攻擊。因為本來你只想寄給臺灣的清華大學,但現在卻被重放到了北京的清華大學。

    所謂的防范重放攻擊,就是想辦法讓你發的交易,只在一條鏈上有效,在另一條鏈上無效。從而可以避免“重放”。

    大多數比特幣的分叉是不需要用戶擔心啥重放保護的。首先是分叉并不一定會分裂,沒分裂就不會有重放,其次是如果會分裂,那分叉的代碼往往會寫好防重防攻擊,用戶不需要擔心。但如果遇到了分裂了,而且任何一個幣都沒有包含重放代碼,那用戶是需要自己處理好重放保護。

    處理的辦法很多,也非常簡單的。可以使用一種叫讓分裂后的兩條鏈上的幣污染分裂前的幣的辦法。

    分裂后,你可以分別從分裂后的兩條鏈上分別買一點幣,發到你分裂前的地址上,以污染你的幣。這樣你將分裂前的幣發送交易時,因為輸入帶有了污染源,這樣就只能在其中一條鏈上有效了。具體的操作也非常簡單。我們拿BCH和BTC的分裂來說,我們假設BCH是需要用戶做重放保護的,實際上是不需求的。

    分裂前你要將幣存在自己掌握私鑰的錢包里。分裂后,你去交易所分別將買一點BTC和BCC,然后發到你的地址上。然后你再去下載一個BCC錢包,將私鑰導進這個錢包。對BCC錢包來說,它只能接受到來自分裂后的BCC鏈上發來的那一點幣,而對于BTC錢包來說,它只能接受到來自分裂后的BTC鏈上的那一點幣。

    這樣你的兩個錢包里的幣,分別包含了一點來自“未來(分裂后)”的幣,從而導致各自在對方鏈上是無效的。這樣你的幣就安全了。

    第6章 結束語

    分叉是必須的,只要市場接受,分裂也是好東西,祝比特幣和分裂幣都越來越好。

    相關推薦
    久久天天躁狠狠躁夜夜2020老熟妇 | 国产成人综合久久综合| 国内精品久久久久久久久电影网| 亚洲va久久久久| 国产精品99久久免费观看| 久久婷婷久久一区二区三区| segui久久国产精品| 久久只有这里有精品4| 国产精品久久影院| 三级韩国一区久久二区综合 | 国产精品欧美久久久久天天影视| 中文精品99久久国产 | 久久se精品一区二区| 免费一级欧美大片久久网| 久久精品99久久香蕉国产色戒 | 久久精品国产只有精品2020| 久久久久久久亚洲精品| 乱亲女H秽乱长久久久| 亚洲欧美国产日韩综合久久 | 久久久精品久久久久久| 国产亚洲精品美女久久久| 国产精品久久久久a影院| 国产亚州精品女人久久久久久 | 日韩人妻无码精品久久免费一 | 国产韩国精品一区二区三区久久| 性做久久久久久免费观看| 久久青草国产精品一区| 无码超乳爆乳中文字幕久久| 亚洲?V乱码久久精品蜜桃| 蜜桃麻豆www久久国产精品| 国产精品青草久久久久福利99 | 久久婷婷五月综合97色直播| 欧美伊香蕉久久综合类网站| jizzjizz国产精品久久| 久久一日本道色综合久久| 久久精品国产AV一区二区三区 | 2020久久精品亚洲热综合一本| 久久毛片免费看一区二区三区| 国产激情久久久久影院小草 | 亚洲色大成网站WWW久久九九| 麻豆久久久9性大片|