首先明白:軟分叉升級主要是在原有的主鏈上增加共識規則。
versionbits
軟分叉的目的是為了讓老版本的客戶端能夠兼容。我們人為設定一個開始時間和結束時間,表示在這個范圍內,我們進行軟分叉升級,我們規定每到2016的整數倍作為一個升級的周期,那么在這個周期內,如果有80%的算力認可我的提議,那么就代表升級成功,將該提議添加為共識規則的一部分,如果不夠80%,就進入下一個周期,也就是,在結束時間到達之前,我有可能已經升級成功,也有可能升級不成功。在升級過程中,沒有成功的block,我按照原先的規則保留,但是升級成功之后,假設我又來來之前的一個block,我會進行check,然后將其拋棄掉。
在主鏈中,我每要加入進去一個塊,我就會進行一次check,看其是否符合當前的共識規則。但是如果在周期內的話,會有cache所以,咱們只需要知道最后一個塊的狀態信息,剩余在這個周期內的所有塊都保存和它一樣的狀態信息。
這里需要注意一個問題,我比較的時間并不是結束的時間,而是中位數時間(結束時間所在的塊往前數10個塊,加上本身是11個塊),因為每一個塊的時間是礦工隨意填寫的一個值,所以我拿到這11個塊之后,進行一次排序,取第6個塊的時間來作為我真正需要去比較的時間,眾所周知,6個塊的時候,我這個鏈就處于一個穩定的狀態,所以,這種方式能夠有效的降低隨意性。
bits
- bits:標識位,代表我需要增加哪些共識規則
- startTime:開始時間
- endTime:結束時間
version是一個32字節的bit,前三位是固定的:001,第5為是0或者1,1代表贊成,0代表不贊成。
軟分叉升級
本文由copernicus 團隊 冉小龍
編寫,轉載無需授權!