read.cash Log in
A@Ayukawayen

之前看過一篇Vitalik講UASF(使用者驅動軟分叉)和UAHF(使用者驅動硬分叉)的文章,今天剛好有機會寫了一篇心得文 ( https://www.ptt.cc/bbs/DigiCurrency/M.1655129050.A.48A.html ),整理一下轉過來: 首先,Ethereum硬分叉升級的作法基本上是:選定一個區塊編號,此編號之前的區塊用舊規則驗證,之後的區塊用新規則驗證,以此保留舊區塊(共享鏈)的合法性。之後採用舊規則區塊,新節點不會接受,反之亦然,新規則的區塊,舊節點不會接受。 而軟分叉和硬分叉的差別在哪裡呢? 軟分叉後新節點產生的區塊,未升級的舊節點也會接受。 硬分叉後新節點產生的區塊,未升級的舊節點不會接受。 再考量舊節點產生的區塊新節點是否接受就可以列出以下四種情形: 舊節點會接受新節點的區塊,新節點會接受舊節點的區塊:A 舊節點會接受新節點的區塊,新節點不接受舊節點的區塊:B 舊節點不接受新節點的區塊,新節點會接受舊節點的區塊:C 舊節點不接受新節點的區塊,新節點不接受舊節點的區塊:D 照此定義,AB是軟分叉,CD是硬分叉。 UASF應該是B,目的是舊節點不必要升級,只需要足夠礦工節點升級。 UAHF是D。 (狀況A感覺有點像沒有分叉,只是加了新協定,因為彼此的區塊都可以接來接去) 結果就是 UAHF: 我的鏈比你短的時候,你不接受我的鏈。你的鏈比我短的時候,我不接受你的鏈。 我的鏈比你長的時候,你還是不接受我的鏈。你的鏈比我長的時候,我也還是不接受你的鏈。 UASF: 我的鏈比你短的時候,你不接受我的鏈。你的鏈比我短的時候,我不接受你的鏈。 我的鏈比你長的時候,你會接受我的鏈。但你的鏈比我長的時候,我不接受你的鏈。 而且如果你的鏈現在比我長,但未來哪一天你的鏈比我短了一個單位(註:鏈的長短是 用難度判斷而不是區塊數),那你的鏈會被替換成我的鏈,相對地不管我的鏈比較短的 狀態持續多久,我都不會換成你的鏈。 Vitalik的意思大概是這樣: 用軟分叉處理共識分歧,等於強制少數派接受多數派的選擇。 硬分叉後少數派還有一條比較小的鏈可以跑自己的規則,軟分叉的話連小的鏈都沒有了 ,一定要留著照多數派的規矩跑(因為新節點產生的區塊舊節點會接受,無法阻止新節點 區塊上鏈)。 事實上這也沒辦法解決共識分歧,像BCH後來自己就硬分叉出新的鏈不跟多數派玩了。

No comments yet

Log in to join in Reading is open to everyone. Replying needs an account.