概述
了解如何管理完整節點和驗證節點的鏈升級。有 3 種不同的升級類別:
- 計劃內或計劃外:鍊式升級可以通過升級建議計劃安排在給定高度。
- 中斷或非中斷:升級可以是 API 或狀態機中斷,這會影響向後兼容性。 為了解決這個問題,需要遷移應用程序狀態或創世文件以準備升級。
- 數據重置升級:一些升級需要完全數據重置才能清理狀態。這有時會發生在回滾或硬分叉的情況下。
此外,驗證者可以根據自己的偏好選擇如何管理升級:
- 自動或手動升級:驗證者可以運行
cosmovisor
進程來自動執行升級或手動執行升級。
計劃升級
計劃升級是使用 升級模塊 邏輯的協調計劃升級。 這有助於將 Daodst 順利升級到新的(中斷的)軟件版本,因為它會自動處理新版本的狀態遷移。
治理提案
治理提案
治理提案是一種使用SoftwareProposal
在給定高度或時間協調升級的機制。
📣 提示: 所有治理提案,包括軟件升級,都需要等待投票期結束後才能執行升級。提交軟件升級建議時請考慮此持續時間。
如果提案通過,則針對特定升級邏輯以遷移狀態的升級計劃
將持久保存到區塊鏈狀態,並在給定的升級高度進行調度。通過更新新提案中的Plan.Height
可以延遲或加快升級。
硬分叉
一種特殊類型的計劃升級是 硬分叉。與治理提案相反,硬分叉不需要等待整個投票期。 這使它們成為協調安全漏洞和補丁的理想選擇。
升級(分叉)塊高度在應用程序的BeginBlock
中設置(即在為塊處理事務之前)。
一旦區塊鏈達到該高度,它會自動為相同高度安排升級“計劃”,然後觸發升級過程。
升級後,塊操作(BeginBlock
、事務處理和狀態Commit
)繼續正常進行。
📣 提示:
為了執行升級硬分叉,需要首先使用BeginBlock
升級調度邏輯發布補丁版本。
在 +2/3 的驗證者升級到新的補丁版本後,他們的節點將自動停止併升級二進製文件。
計劃外升級
計劃外升級是指所有驗證者都需要在過程中的同一時刻優雅地停止和關閉其節點的升級。
這可以通過在運行 stcd start
命令時設置 --halt-height
標誌來完成。
如果在計劃外升級期間發生重大更改(見下文),驗證者將需要在重新啟動其節點之前遷移狀態和起源。
📣 提示: 計劃外升級的主要考慮是需要導出創世狀態並且需要[重置](#data-reset-upgrades)區塊鏈數據。 這主要影響基礎設施提供商、工具和客戶端,如區塊瀏覽器和客戶端,它們必須使用存檔節點來為升級前的高度提供查詢服務。
破壞性和非破壞性升級
根據相應軟件發布版本的語義版本控制(Semver),升級可以分為中斷或非中斷/releases)(即vX.Y.Z
):
- 主要版本 (
X
):向後不兼容的 API 和狀態機中斷更改。 - 次要版本 (
Y
):新的向後兼容功能。這些也可能是狀態機中斷。 - 補丁版本 (
Z
):向後兼容的錯誤修復、小的重構和改進。
主要版本
如果您要升級到的新版本有重大更改,您將必須:
- 遷移創世JSON
- 遷移應用狀態
- 重啟節點
需要這樣做以防止雙重簽名或在共識期間停止鏈。
要升級創世文件,您可以從可信來源獲取它,也可以使用 stcd export
命令將其導出到本地。
次要版本
如果您要升級到的新版本有重大更改,您將必須:
- 遷移狀態(如果適用)
- 重啟節點
補丁版本
為了更新補丁:
- 停止節點
- 手動下載新版本的二進製文件
- 重啟節點
數據重置升級
數據重置升級要求節點運營商完全重置區塊鏈狀態並從乾淨狀態重新啟動其節點,但使用相同的驗證器密鑰。
自動或手動升級
對於每個新軟件版本,我們強烈建議全節點和驗證器操作員執行軟件升級。
您可以通過以下任一方式升級您的節點:
按照上面選項中的鏈接了解如何根據您的首選選項升級您的節點。