JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

分叉、最終性與 51% 攻擊

當兩個有效區塊同時出現時會發生什麼,為什麼舊歷史會逐漸硬化成石頭,以及一個掌握半數算力的攻擊者究竟能做什麼、又不能做什麼。

當兩個人同時寫同一頁

想像一間全球新聞編輯室,成千上萬的記者共用一本日誌,但他們之間的消息以光速傳遞——很快,卻從來不是瞬時的。大多數時候,一位記者寫完下一頁,其餘所有人照抄下來。可每隔一陣子,地球兩端的兩位記者會在幾乎同一秒寫完一頁有效內容,而彼此都還沒聽說對方。這下日誌就短暫地有了兩個一樣好的下一頁。這種分裂叫做分叉,在一條繁忙的鏈上,它自然而然、時時刻刻都在發生。

沒有裁判來挑出那一頁「真正的」內容。取而代之,網路依靠它的共識機制,以及我們之前見過的一條機械規則:在累積工作量最多的分支上繼續建構——實際操作中,就是更長的那條鏈。下一個區塊落在哪一邊,分叉就在那一刻自己化解。

一次臨時分叉,如何收場

我們來看一次完整的過程。區塊 1 到 4 是所有人都認可的。然後礦工愛子和阿本幾乎在同一瞬間各自找到了一個有效的區塊 5。一半網路先聽到愛子的區塊 5A,另一半先聽到阿本的 5B。兩條分支此刻並存。當某個礦工找到區塊 6 時,平局就被打破——比方說它建在愛子那一邊。那條分支現在更長,於是所有人都切換過去,阿本的 5B 被丟棄:

       ... -> [3] -> [4] -> [5A] -> [6]   <- longer: everyone keeps this
                          \
                           [5B]            <- orphaned: dropped

  step 1: 4 agreed, then 5A and 5B appear at once  (a fork)
  step 2: block 6 builds on 5A                      (one side grows)
  step 3: 5A,6 chain is longer -> network adopts it (fork resolved)
一次臨時分叉:兩個有效的區塊 5,等到區塊 6 延伸了其中一條分支後即告化解。被放棄的那個區塊稱為孤塊。

軟分叉與硬分叉:改變規則

上面那次分裂是偶然的——兩個礦工,同一套規則。但人們有時想要改變規則本身:加個功能、修個缺陷、調個上限。那是另一種分叉,根據舊軟體還能不能跟得上,分成兩類。

軟分叉只收緊規則——它讓一些原本允許的區塊不再算數。沒升級的節點仍然把新區塊看作有效,因為凡是新的、更嚴格的規則所接受的,在舊規則下本來就可以接受。新舊留在同一條鏈上;這種升級是向後相容的。

硬分叉放寬或改寫規則——它讓舊軟體本會拒絕的區塊突然變得有效。如今升級過和沒升級的節點徹底各執一詞,鏈可能永久分裂成兩種幣,共享一段過去、各走各的將來。硬分叉只有在幾乎所有人一起升級時才會平穩。

最終性:當過去化為石頭

如果分叉能重排鏈的最頂端,那麼一筆交易到底什麼時候算真正*完成*?那種「永遠定下來」的性質,叫做最終性。在基於工作量的鏈上,最終性是機率性的:一個區塊剛被挖出來時,它仍可能被重組,但每疊上一個新區塊,要逆轉它的代價就指數級地變貴。等過了幾個確認數,逆轉的機率就縮向零;再多疊幾個,這個區塊出於一切實際目的就被當作永久的。

一些較新的設計轉而提供絕對最終性:由一組驗證者明確投票將某個區塊定為最終,此後若不付出巨大的、自我毀滅式的懲罰,就再也無法撤銷。無論哪種方式,一個區塊被埋得越深,就越接近石頭。這也是為什麼哪怕有一部分參與者掉線、變慢,或在主動撒謊,鏈仍能照常運轉——工程師把這種韌性稱作拜占庭容錯,即在部分參與者行為不軌時仍能達成一致的能力。

51% 攻擊:能做什麼,不能做什麼

整套「最長鏈獲勝」的規則都建立在一個假設上:誠實的參與者掌握著大部分算力。那麼,如果某個攻擊者單獨掌握了超過一半呢?這就是著名的 51% 攻擊。有了多數,攻擊者就能持續跑贏所有人,隨心所欲地建構最長鏈。聽起來像是完全掌控了局面——可它的能力其實很窄、很具體,遠比人們擔心的要小。

攻擊者做的,全都集中在鏈的頂端附近:透過暗中建構一條更長的鏈、然後亮出來,逆轉他*自己*近期的交易——這就是雙花(先付錢給商家,等貨發出後再抹掉這筆付款)。他們還可以選擇排除或拖延別人的交易,只要還握著多數,就能一直審查它們。

而攻擊者不能做的,無論握有多少算力:從不歸他控制的錢包裡偷幣(那需要每位持有者的私鑰,再多的雜湊運算也變不出來);花別人的錢(交易仍然需要一個有效的簽名);憑空鑄幣或給自己發更大的獎勵(每個節點都會拒絕違反發行規則的區塊);或者改寫遠古歷史,因為要比世界其餘所有人更快地重挖成千上萬個深層區塊,哪怕坐擁多數也遠遠做不到。51% 攻擊擦傷的是*近期的*頂端;它無法熔掉地基的岩床。

所以一旦把話說精確,這幅圖景其實讓人安心。分叉是網路能自癒的正常心跳;規則變動以軟分叉或硬分叉的形式協商;而深度買來的最終性,哪怕是多數攻擊者也無法在表層之下把它解開。有了這一層理解,你明白的就不只是區塊鏈*是*安全的,而是它的安全究竟從*哪裡*開始、到*哪裡*為止。