位元幣分叉

2021-10-01 23:35:27 字數 1461 閱讀 7874

一條鏈變成了兩條鏈。

分叉可能是多種原因造成的

一種原因是兩個節點差不多同時挖到了區塊,這個時候兩個節點都可以發布區塊,就出現了乙個臨時性的分叉,這種分叉叫state fork。分叉攻擊也屬於state fork ,也是屬於對位元幣區塊的當前狀態產生了分歧,只不過分叉攻擊的分歧是故意造成的,所以分叉攻擊造成的分叉也叫deliberate fork 。

除此之外,位元幣協議發生了改變也會造成分叉,要修改協議需要軟體公升級,在乙個去中心化的系統裡,公升級軟體的時候沒有辦法保證所有節點同時都公升級軟體,我們假設大部分節點公升級了軟體,少部分節點因為種種原因沒有公升級,這種情況導致的分叉叫做protocd fork。根據對協議內容修改的不同,又可以進一步分成硬分叉(hard fork)和軟分叉(soft fork)。

硬分叉

如果對位元幣協議增加新的特性,那些沒有公升級軟體的節點不認可新特性,這個時候就會產生硬分叉,乙個例子是位元幣的區塊大小限制。假如有人發布了軟體更新,將區塊大小限制從1m→4m,假設大多數節點都更新了,少數節點沒有更新,這裡的大多數不是按賬戶數目來算,而是按算力來算,即系統中有大多數hash算力的節點都更新了軟體。新節點能挖出最大是4m的區塊,但是舊節點不認可大小超過1m的區塊,所以舊節點會沿著小區塊一直挖下去,新節點大小區塊都接受,但舊節點不接受大區塊,兩者沒有達成共識,這樣就會出現乙個永遠的分叉。

軟分叉

如果對位元幣協議加一些限制,原來合法的交易或者區塊在新的協議可能不合法就會引起軟分叉。假如有人發布更新將區塊大小變成0.5m,大部分節點更新了軟體,少部分沒有更新。這時候新節點沿著一條鏈挖小區塊,不認可大區塊,舊節點沿著一條鏈挖大區塊,同時舊節點也認可小區塊,因為新節點算力更強,所以更快形成一條新舊節點都認可的最長合法鏈,但是新節點不會在舊節點產出的大區塊後面繼續挖,而是會繼續分叉挖小區塊,所以舊節點挖出的大區塊最後都沒用了,不得不更新軟體。

軟硬分叉的區別就是

掌握大多數算力的新節點認可舊節點挖出的區塊,但舊節點不認可新節點挖出的區塊,那麼就是硬分叉;

掌握大多數算力的新節點不認可舊節點挖出的區塊,但是舊節點認可新節點挖出的區塊,那麼就是軟分叉。

實際當**現軟分叉的情況之一是給某些目前協議中沒有規定的域增加新的含義,賦予新的規則,如coinbase域,將前8位元組作為extra nonce,但是剩下的位元組都沒有被使用。有人提出剩下的位元組用來存utxo的根hash值,那麼新節點不認可舊節點挖出的區塊,而舊節點認可新節點,因為coinbase寫啥都無所謂,這樣就會出現軟分叉。

位元幣歷史上有名的軟分叉例子是p2sh,這個功能最初沒有,是後來通過軟分叉加進來的。支付的時候不是付給乙個public key hash(也就是輸出指令碼不是給出收款人公鑰hash),而是付給乙個redeem script hash(贖回指令碼的hash),具體流程參考前文。對於舊節點來說,他不知道這個p2sh這個特性,他只會驗證贖回指令碼是否正確,新節點才會做第二階段的驗證,所以舊節點認為合法的交易,新節點可能認為非法,新節點認為合法的交易舊節點也認可

位元幣分叉

fork 軟體更新導致新舊節點之間的差異 hard fork硬分叉 block size limit 1m 4m 大多數節點完成更新 大區塊 新節點認可,舊節點不認可 小區快 新舊節點都不認可 1m 4m滿足新節點要求 舊節點 可以看成是保守黨 則沿小節點的鏈繼續計算,產生永久性分叉 兩條鏈平行發展...

攻擊位元幣 軟分叉 硬分叉

篡改交易 由hash保證不可能的 拒絕服務攻擊 我拒絕,別人不一定拒絕啊 雙花交易攻擊 一筆錢,花兩次 如果2筆交易,同乙個礦工收到。第一次驗證ok,收入交易池 第二次驗證 沒餘額,不要。如果2筆交易,被兩個礦工收到,礦工1把他上鏈了,成為正式的交易。礦工2看到鏈上,會排除交易。否則pow半天,辛苦...

位元幣之八分叉

分叉一共分為三種情況 1.分叉攻擊 從某一次交易開始,為了回滾某次交易 boycott攻擊或其它原因強行分叉 2.兩個節點同時挖到礦 如果有兩個節點同時挖到礦並且同時發布出去,這就是自然產生的分叉 3.協議公升級 因為位元幣是個去中心化的,所以軟體公升級可能是乙個很困難的過程,有些節點可能不承認新的...