比特幣現金新增的Checkpoint到底是什麼有什麼影響?
在11月份BCH的硬分叉升級時,產生了兩個幣,BCH和BSV。abc開發組為BCH添加了一個叫Checkpoint的東西,BSV社群各種嘲諷。本文解釋Checkpoint到底是啥。
第1章比特幣節點如何驗證一個區塊
任何一個下載並安裝執行的完整節點都會從比特幣網路中獲取區塊,並驗證區塊,以此更新節點的賬本。當一個節點通過p2p網路獲得一個新區塊時,都會執行驗證程式,以識別這個區塊是不是有效的區塊。比特幣區塊的驗證標準如下:
1、驗證工作量證明,即驗證區塊頭的雜湊值小於當前目標值。
2、驗證MerkleRoot是否是由區塊體中的交易得到的,即重構區塊Merkle樹得到的樹根,看是否和區塊頭中的hashMerkleRoot值相等。
3、驗證區塊大,即看區塊大小是否在設定範圍之內。(BTC是資料區塊體不能大於1M,隔離驗證區塊不能大於3M;BCH是區塊不能大於32M;BSV現在是不能大於128M)
4、驗證是否只有一個Coinbase交易,即一個區塊,礦工只能給自己獎勵一次。
5、驗證所有的交易,即遍歷區塊內所有的交易,檢查是否是合法的交易。
以上就是比特幣節點(BTC、BCH、BSV都一樣)標準的驗證區塊程式,這部分程式碼叫CheckBlock函式。
第2章增加Checkpoint檢查點驗證規則
比特幣節點在絕大多數情況下都是按上面的標準的驗證區塊程式進行驗證區塊的,但可以加入額外的規則,就是加入一個Checkpoint。
Checkpoint就是節點驗證區塊中的一個補充規則。這個補充規則是:
Checkpoint就是指定一個區塊高度的區塊雜湊必須等於某個雜湊值。
Checkpoint是一個數據,這個資料就是一個區塊高度值和對應的雜湊值構成,所有Checkpoint會被儲存在一個叫CheckpointData的資料塊裡。
我們可以看到,在11111高度就有一個Checkpoint,這是在2009年4月16日挖出來的,這估計是中本聰他們最早的幾個人挖的。
上圖中最後那一個Checkpoint就是11月15日BCH硬分叉時新增的,區塊高度556767就是BCH和BSV分裂後BCH挖出的第一個區塊高度,這個區塊被BSV拒絕了。
Checkpoint是由開發組寫入節點軟體的,也可以是開發編寫一個函式指定出現某種情況後就由函式新增一個Checkpoint。節點軟體在驗證區塊時,就會搜尋CheckpointData資料,以確定某一區塊高度是否需要加入Checkpoint這個驗證規則。
Checkpoint裡指定的區塊高度那肯定是在寫入之前就已經挖出來的。
當節點軟體搜尋CheckpointData發現了某個區塊高度是一個Checkpoint時,那這個節點在驗證這一個區塊時,就會在上一章的5條驗證規則中加入第6條,即這個區塊的hash值必須等於Checkpoint裡指定的雜湊值。如果不相等,那就是一個廢塊,會被拋棄掉。
第3章Checkpoint有什麼用?
一個節點只要承認了Checkpoint的區塊為合法的區塊,那就可以避免這個高度以之前的所有的區塊被其他力量重組,特別是可以避免被51%優勢算力攻擊重組區塊。
我們必須確認的是一個區塊的雜湊是無法偽造的。當指定一個區塊高度就是某一個雜湊值,這意味著這個區塊高度的區塊就是無法更改了。哪怕是你擁有超過51%的算力,也是不能讓這些擁有Checkpoint的節點軟體服從你更改這個區塊。
任何一個區塊中又包括了前一個區塊的雜湊值,這樣就相當於執行Checkpoint的節點認定了指定的區塊,也就認定了此區塊之前的所有區塊。
Checkpoint在一定程度上改變了最長鏈為有效鏈的原則,改成了只有包含了Checkpoint的最長鏈才是有效鏈。
Checkpoint可以用來部署協議分叉,所有節點都統一執行帶有Checkpoint的完整節點軟體,然後一旦Checkpoint的區塊被挖出,那此後所有的協議就可以被統一更改。這也是UAHF的原理,這是BCH從2017年8月1日分裂出來後每一次分叉升級都使用Checkpoint來部署。
帶有Checkpoint的協議變化,就是明確告訴整個生態在此區塊高度後協議就會有變化了,你們要注意升級。
第4章Checkpoint有什麼不好?
需要澄清的是,很多人認為Checkpoint給了開發者更高的權力,我認為沒有。因為節點軟體都是開發者寫的,Checkpoint只是開發明確標記了一個接下來協議會怎麼改。這相當於我們寫文章的人,使用加粗標紅高亮來標註一個重點內容。Checkpoint是用來告訴礦工和其他生態節點,我們要明確改一些什麼東西,並且改的這些東西還不允許通過51%算力來進行鏈上否決。
請注意,上面講的是“鏈上否決”,就是一旦有算力選擇認同了Checkpoint的節點軟體,那無論這部分算力是多大,那這條帶Checkpoint的鏈都是可以獨立挖下去的,不可能會被更大的算力通過51%攻擊的方式重組掉這個Checkpoint之前的區塊。只能重組之後的區塊。
這就意味著,Checkpoint本身是一個鏈下的治理工具。大家通過鏈下討論是否接受Checkpoint以及之後的所有協議規則更改,如果接受,並且部署,那就沒有回頭路了。
所以Checkpoint有什麼不好?那隻能是針對熱愛純粹的通過鏈上算力投票的礦工來說是不好的,信算力有決定權的人會認為Checkpoint不好,而熱愛鏈下治理的人則會認為Checkpoint是一個好工具。