---
title: "保護你的節點安全：從 Parity 遷移至 Geth"
description: "Ethereum 節點軟體的兩大主要提供者之一已終止對其客戶端的支援。這份 8 步驟指南分享將節點遷移至 Geth 的最佳實務做法。n"
---

# 保護你的節點安全：從 Parity 遷移至 Geth

‍

<ImageBlock
  src="https://media.alchemy.com/1703673175-post-parity-geth.jpg"
  alt="Ethereum 節點軟體從 Parity 遷移至 Geth"
  width={2000}
  height={1005}
  caption="Alchemy 將把 Ethereum 節點軟體從 Parity 更新為 Geth。"
  priority
/>

[Ethereum 生態系](https://www.alchemy.com/dapps/ecosystem/ethereum)主要仰賴兩家業者提供最基礎的基礎設施單位：節點。其中一家業者 Parity Technologies 宣布將專注於其他計畫，並[停止開發](https://www.parity.io/parity-ethereum-openethereum-dao/)其 Ethereum 節點軟體。我們 Alchemy 近期已決定從 Parity 轉換至另一個主要選項 [Geth](https://geth.ethereum.org/)，並建議你也這麼做，因為 Geth 仍由一個專責團隊積極開發中。遷移核心基礎設施是攸關任務成敗且細節繁複的工作。憑藉我們在 [Alchemy](https://dashboard.alchemy.com/signup?referral=affiliate:548fed5d-60b9-4530-89ef-28fa57ea280f) 多年來為全球頂尖公司提供基礎設施的經驗，我們撰寫了這份從 Parity 遷移至 [Geth](https://www.alchemy.com/overviews/what-is-a-geth-node-and-how-to-run-one) 的指南，分享最佳實務作法，協助你順利完成轉換。將這份指南分享給你的工程團隊，有助於他們了解區塊鏈節點的各種細節，並確保你的核心基礎設施運作順暢。

‍

# 背景

先快速說明一下基本概念。區塊鏈應用程式需要執行稱為「節點」的伺服器，讓你能夠讀取及寫入區塊鏈。你可以把它們想成是儲存區塊鏈資料的資料庫。

目前節點軟體主要有兩個選項：[Parity](https://www.parity.io/) 與 [Geth](https://geth.ethereum.org/)。建置並維護這些開源節點客戶端軟體的兩個團隊，都為整個區塊鏈生態系做出了巨大貢獻，沒有他們就不會有 Ethereum 的存在。他們都值得 Alchemy 團隊由衷感謝。

近期，Parity 團隊——從一開始就對 Ethereum 區塊鏈開發的成長貢獻卓著——現在[轉而專注於自己的鏈](https://decrypt.co/14857/parity-steps-back-from-ethereum-moving-client-codebase-to-dao)。

[Peter](https://twitter.com/peter_szilagyi) 與整個 [Geth 團隊](https://github.com/ethereum/go-ethereum/graphs/contributors)則打造出一個極為出色的 Ethereum 客戶端，並持續積極開發中。

<ImageBlock
  src="https://media.alchemy.com/1704548121-chart-describing-the-distribution-between-the-ethereum-node-client-softwares.png"
  alt="顯示各 Ethereum 客戶端軟體分布情形的圖表。"
  width={1159}
  height={688}
  caption="Eth 節點客戶端分布（ethernodes.org/）"
/>

Eth 節點客戶端分布情形（[ethernodes.org/](https://ethernodes.org/)）

‍

# 為什麼你應該遷移？

節點是每家區塊鏈公司的核心基礎設施。每當系統需要讀取或寫入區塊鏈資訊時，都會用到你的節點。

相較於傳統網路基礎設施，區塊鏈節點的管理複雜度與所需時間都大得多。此外，由於同步所需的時間，建立新節點可能需要數天甚至數週。這代表節點基礎設施若出問題，你的產品可能因此停擺數週。

為確保你擁有穩定、堅固且可擴展的基礎設施，執行一個持續維護中的節點客戶端至關重要。

Parity Technologies 已大方地將 Parity Ethereum 程式碼庫交給他們新成立的 [OpenEthereum DAO](https://www.parity.io/parity-ethereum-openethereum-dao/)，我們也期待在這個真正去中心化的機制下，看到節點軟體有所進展。相對地，Ethereum Foundation 有一個全職團隊，在可預見的未來將持續建置並改善這套軟體。

使用持續開發中的專案，代表錯誤、穩定性問題、分叉及其他未知挑戰都能迅速獲得修復，軟體也會不斷改進。我們的建議是，強烈考慮將你的節點基礎設施切換至 Geth。

這是一個相當繁複的流程，建議預留 2 至 4 週的工程時間來完成整個轉換。

最後，如果你只想專注於打造核心產品，完全不想處理低階節點基礎設施，歡迎[與我們聯絡](http://alchemy.com)。Alchemy Blockchain Developer Platform 從頭打造，目的就是讓每個人都能輕鬆建置出色的區塊鏈產品。

好了，現在你已經了解概況，開始遷移吧！
‍

# 如何從 Parity 遷移至 Geth

## 8 個步驟

1. 移除對 Parity 專屬命名空間方法的依賴
1. 移除對 Parity **專屬**回應欄位的依賴
1. 移除對錯誤請求之 API 專屬回應的依賴
1. 移除對 Parity 專屬錯誤代碼的依賴
1. 設定 Geth 硬體
1. 設定 Geth 軟體
1. 在節點上執行應用程式專屬流量模擬
1. 切換流量並監控服務

‍

### 1. 移除對 Parity 專屬命名空間方法的依賴

Parity 與 Geth 都實作了 Ethereum Foundation 訂定的通用 JSON-RPC Ethereum 協定集，並在此之上各自補充了自己的 API 方法。有些 parity 命名空間方法，例如 _parity_allTransactions_，會回傳從 Parity 節點視角看到的所有待處理交易。就功能而言，Geth 在不同套件中應該都有對應的方法。就 Alchemy 收到的流量而言，Geth 最大的缺漏是 trace 模組，其方法已移至[ debug](https://geth.ethereum.org/docs/rpc/ns-debug)套件中，你可以用類似的 _debug_traceTransaction_ 來取代常用的 trace 方法，如 _trace_replayTransaction_。

‍

### 2. 移除對 Parity 專屬回應欄位的依賴

儘管雙方都盡力做到實作一致，仍存在一些細微差異。請檢查你是否依賴了[ Geth 回應](https://gist.github.com/kunal365roy/b43ace0b0644bfd8df64ea9f6995bb00)中省略的欄位。我們曾在實際案例中看到，有人依賴了特定欄位，例如 _eth_getLogs_ 回傳的 logs 物件中的 transactionLogIndex 欄位。

整體來說，我們觀察到 Geth 對於執行時間較長的呼叫，往往會傾向提前中斷並失敗，以維護節點的健康狀態。

‍

### 3. 錯誤請求的回應差異

格式正確、但可能因某些原因在 EVM（[Ethereum Virtual Machine](https://www.alchemy.com/overviews/what-is-the-ethereum-virtual-machine-evm)）中失敗的請求，行為可能有所不同。請檢查你是否依賴 Parity 在錯誤請求時回傳的 VM 執行錯誤，因為在 Geth 上這類情況通常會回傳 0x 的結果。以下是幾個錯誤請求的範例：

- 提供的 _eth_call_ 區塊編號參數為 pending。
- 節點中找不到 _eth_getLogs_ 區塊範圍。
- 執行超過 5 秒的 _eth_call_ 會被 EVM 自動中斷。

‍

### 4. Parity 專屬錯誤代碼

有些客戶端重試機制依賴特定的 Parity 錯誤代碼來判斷特定邏輯。請檢查你是否依賴了[可能在 Geth 中有所變動](https://gist.github.com/kunal365roy/3c37ac9d1c3aaf31140f7c5faa083932)的錯誤代碼。更完整的 Parity JSON-RPC 錯誤代碼清單請見[此處](https://github.com/openethereum/openethereum/blob/master/rpc/src/v1/helpers/errors.rs#L39)。整體而言，這些錯誤中有部分會失去一定的細節，因此你需要額外的客戶端邏輯來處理這些情況。

‍

### 5. 設定 Geth 硬體

Geth 節點應該可以在你原本用於 Parity 的同一套硬體上執行。我們注意到、也與 Geth 團隊討論過幾個關鍵指標，有助於讓你全新的 Geth 節點維持良好效能。有兩個系統指標值得密切監控：**_CPU 使用率_** 與 **_iowaits_**（系統寫入磁碟的速率）。在實務上，我們觀察到這些指標與節點開始出現呼叫錯誤、無回應或整體效能下滑之間有很強的關聯性。CPU 使用率與 iowait 的合理範圍取決於你使用的硬體。以[ EC2 m5.2x l](https://aws.amazon.com/ec2/instance-types/)arge 執行個體為例，我們通常在 archive 節點的 CPU 使用率達到約 65%、iowaits 達到約每秒 1 次時，就會觀察到效能下滑。

‍

<ImageBlock
  src="https://media.alchemy.com/1704548307-graph-depicting-alchemy-internal-node-iowaits.png"
  alt="顯示 alchemy 內部 geth 節點 iowaits 的圖表。"
  width={1243}
  height={259}
  caption="Alchemy 內部 Geth 節點 Iowaits。"
/>

Alchemy 內部 Geth 節點 Iowaits
‍

### 6. 設定 Geth 軟體

雖然罕見，但我們曾看過 Geth 節點在隨機的區塊編號上卡住同步的情況（未知區塊編號）。這種情況下，耐心是關鍵，節點通常在幾個小時後就會恢復同步。

啟動 Geth 程序有幾個需要注意的細節，以下會逐一說明。Geth 提供許多旗標選項。**--pprof** 旗標提供許多有用的指標，能讓你了解節點的健康狀態，例如節點數（peer count）、_tx_pool_，以及預設在 9090 連接埠上公開的其他大量實用資訊。另一個重要的注意事項是，應將 kill 訊號指定為 KillSignal=SIGINT。我們發現 Geth 在重新啟動時會出現問題，會退回到上一個區塊，原因是 Geth 在關閉時沒有正確地將記憶體中的區塊或狀態寫入持久化磁碟。

‍

### 7. 在節點上執行應用程式專屬流量模擬

我們發現 Geth 中有些方法的請求／回應格式與 Parity 版本相同，但行為略有不同。我們看過的一個實際案例如下：_eth_gasPrice_ 以及其他依賴 gasPrice 估算的方法，例如 Geth 中的 _eth_estimateGas_，採用的估算模型往往會得出比 Parity 更低的 gasPrice 預測值。這會導致意外的交易失敗，例如：Transaction gas price supplied is too low. There is another transaction with the same nonce in the queue. Try increasing the gas price or incrementing the nonce. 你可以透過提高 gas price 來緩解此問題，或使用其他第三方來源，例如[ ](https://ethgasstation.info/)[Eth Gas Station](https://ethgasstation.info/) 來取得價格估算。

‍

### 8. 切換流量並監控服務

終於到了切換的時刻！將你的流量轉移至 Geth，並在接下來幾天仔細監控。如果遇到其他非預期的問題，歡迎聯繫 Geth 團隊，或直接找我們聊聊。

‍

## 想要更輕鬆的遷移方式？

希望這份指南有助於你順利完成從 Parity 到 Geth 的遷移流程！若有任何問題或困難，歡迎隨時與我們聯絡——我們很樂意提供協助。

此外，如果你想要一個平台，大幅簡化建置與發布區塊鏈應用程式的流程，不必處理管理節點這類低階工作，歡迎與我們聊聊！

在 Alchemy，我們從頭打造了 [Blockchain Development Platform](http://alchemy.com)，目的就是讓開發者的生活更輕鬆。現在透過一整套強大的開發者工具、全天候支援，以及可全球擴展的新型區塊鏈基礎設施平台，你可以在開發上[節省數千小時](https://www.alchemy.com/case-studies)、讓你的應用程式[可靠度提升 107 倍](https://www.alchemy.com/case-studies/kyber-network)，並為使用者打造出[更好的產品](https://alchemy.com/case-studies/augur)[為你的使用者](https://alchemy.com/case-studies/zeroex)。歡迎[與我們聯絡](https://www.alchemy.com/contact-sales)以了解更多！

祝你順利遷移至 Geth。

現在是 2020 年，請保持健康，也讓你的節點保持健康！

‍

---

*在[此處](https://dashboard.alchemy.com/signup?referral=affiliate:548fed5d-60b9-4530-89ef-28fa57ea280f)註冊免費的 Alchemy 帳號。*

‍

#### 關於 Alchemy

[Alchemy](https://dashboard.alchemy.com/signup?referral=affiliate:548fed5d-60b9-4530-89ef-28fa57ea280f) 提供業界領先的 Blockchain Development Platform，支援全球 197 個國家、數百萬使用者所使用的產品。Alchemy Platform 的新型基礎設施引擎，以及無與倫比的開發者工具套件，讓創作者能以更短的時間輕鬆打造優秀的區塊鏈產品。在 Stanford University、[Coinbase](https://www.alchemy.com/dapps/coinbase)、Google 董事長、Charles Schwab，以及頂尖科技與金融業高層的支持下，這個團隊憑藉在 Google、Microsoft、Facebook 等科技巨頭數十年的經驗，具備區塊鏈開發與大規模可擴展基礎設施方面的深厚專業能力。
