概覽

什麼是 版本位元 BIP9?

版本位元 BIP9 系統是一種向 Bitcoin 共識規則引入向後相容規則變更的方法,稱為軟分叉。

版本位元 允許礦工發出訊號表示他們可以驗證軟分叉規則。它還允許同時提出最多 29 個軟分叉。

版本位元 如何啟動?

版本位元 不需要啟動,它只是礦工透過在區塊標頭 nVersion 欄位中設定位元來發出對軟分叉準備就緒訊號的一種方式。

什麼是軟分叉超時?

軟分叉有一個開始時間和一個 超時時間,在此期間提案是活躍的。軟分叉只能在 開始時間超時時間 之間啟動。如果軟分叉在 超時時間 之前未被啟動,軟分叉提案失敗,即使發出訊號也不會啟動。

啟動工作流程是什麼?

版本位元 下,軟分叉提案經歷一個工作流程:

  • [DEFINED] -> [STARTED] -> [LOCKED_IN] -> [ACTIVE]

  • [DEFINED] -> [STARTED] -> [FAILED]

version bits state diagram

Bitcoin 網路每 2016 個區塊重新定向挖礦難度;此時 版本位元 將查看前 2016 個區塊的視窗,以查看有多少區塊為給定的軟分叉發出訊號。如果 95% 的區塊發出軟分叉準備就緒的訊號,狀態將從 [STARTED] 變更為 [LOCKED_IN]

[LOCKED_IN] 之後,規則將在再一次難度重新定向後啟動,即再 2016 個區塊。節點軟體將警告升級正在等待中。

什麼是版本位元?

當沒有軟分叉發出訊號時,礦工應將區塊版本欄位設定為 0x20000000

礦工何時應該設定位元?

要為軟分叉發出準備就緒訊號,礦工應將相關版本位元與 0x20000000 一起設定。這應該只在軟分叉的 開始時間 之後執行。

如果軟分叉啟動或達到 [FAILED] 狀態,應取消設定位元。

例如:

「alice」軟分叉使用位元 0,即 0x1 + 0x20000000

0 0 1 0 0 0 0 0 0 0 0 0 0 0 1

「bob」軟分叉使用位元 1,即 0x2 + 0x20000000

0 0 1 0 0 0 0 0 0 0 0 0 0 1 0

要同時為兩個軟分叉發出訊號,使用 0x20000003(即 0x1 + 0x2 + 0x20000000*)

0 0 1 0 0 0 0 0 0 0 0 0 0 1 1
  • 注意,如果其中一個在另一個之前啟動,您必須取消設定相關位元並繼續為另一個發出訊號。如果一個未能啟動且超時到期,您也應該取消設定該位元。

它與 ISM 軟分叉有何不同?

IsSuperMajority() 或簡稱 ISM,是一種傳統的軟分叉觸發器,一旦 1000 個區塊中有 950 個挖出發出新區塊版本訊號的區塊,就會啟動新規則。

  1. IsSuperMajority() 軟分叉將在啟動後孤立所有具有先前版本的區塊。例如,如果當前版本是 4,而下一個軟分叉引入版本 5 區塊,那麼在達到啟動(950/1000 個區塊)後,節點將拒絕所有版本 4 區塊。

  2. 一旦 版本位元 軟分叉達到啟動,節點將簡單地開始強制執行新規則,並且不會孤立非發出訊號的區塊,除非 它違反新規則。

  3. ISM() 在滾動基礎上查看前 1000 個區塊;版本位元 在每次挖礦難度重新定向時查看前 2016 個區塊一次。

  4. ISM() 軟分叉不會過期。版本位元 軟分叉只能在 開始時間超時時間 之間啟動。

礦工必須升級嗎?

不。BIP9 軟分叉不會啟動,除非 95% 的礦工發出準備就緒訊號。如果軟分叉達到 [LOCKED_IN] 狀態,絕大多數礦工已準備好進行變更,剩餘的礦工應該在下一次難度重新定向(大約 2 週)之前 升級。

未升級的礦工如果無法驗證新啟動的規則,則有產生無效區塊的風險,這些區塊將被孤立。

誰為不同的升級提案分配版本位元?

軟分叉透過 BIPs 流程 提出。活躍的 BIP9 軟分叉提案列在分配頁面上。

進一步閱讀