---
title: "ノードを保護する: ParityからGethへの移行"
description: "Ethereumノードソフトウェアの主要プロバイダーの1つが、クライアントのサポートを終了しました。このガイドでは、ノードをGethに移行するためのベストプラクティスを8つのステップで紹介します。n"
---

# ノードを保護する: ParityからGethへの移行

‍

<ImageBlock
  src="https://media.alchemy.com/1703673175-post-parity-geth.jpg"
  alt="ParityからGethへのEthereumノードソフトウェア移行"
  width={2000}
  height={1005}
  caption="AlchemyはEthereumノードソフトウェアをParityからGethに更新します。"
  priority
/>

[Ethereumエコシステム](https://www.alchemy.com/dapps/ecosystem/ethereum)は、インフラの基本単位であるノードについて、主に2つのプロバイダーに依存しています。そのうちの1つであるParity Technologiesは、他の取り組みに注力するため、Ethereumノードソフトウェアの[開発を中止する](https://www.parity.io/parity-ethereum-openethereum-dao/)と発表しました。Alchemyでは最近、Parityからもう一つの主要な選択肢である[Geth](https://geth.ethereum.org/)への移行を決定しました。専任のチームによって積極的に開発が続けられているため、皆さんにも同様の移行を推奨します。コアインフラの移行はミッションクリティカルであり、注意すべき点が多くあります。[Alchemy](https://dashboard.alchemy.com/signup?referral=affiliate:548fed5d-60b9-4530-89ef-28fa57ea280f)で世界中のトップ企業のインフラを支えてきた長年の経験をもとに、ParityからGethへの移行に関するこのガイドを作成し、[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/)の2つです。このオープンソースのノードクライアントソフトウェアを構築・維持している両チームは、ブロックチェーンエコシステム全体に多大な貢献をしており、彼らなしにEthereumは存在しなかったでしょう。両チームにAlchemyチームから深い感謝を表します。

Ethereumブロックチェーン開発の初期から成長を支えることに大きく貢献してきたParityチームは、最近になって[自らのチェーンに注力するため移行](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/)\)

‍

# なぜ移行すべきか

ノードはあらゆるブロックチェーン企業のコアインフラです。システムがブロックチェーンへの読み書きを必要とするたびに、ノードを使用することになります。

従来のWebインフラと比較すると、ブロックチェーンノードの管理ははるかに複雑で時間がかかります。さらに、新しいノードのセットアップには同期にかかる時間のため、数日から数週間かかることもあります。つまり、ノードインフラに問題が発生すると、プロダクトが数週間にわたって機能しなくなる可能性があるということです。

安定的でロバスト、かつスケーラブルなインフラを確保するには、積極的にメンテナンスされているノードクライアントを稼働させることが不可欠です。

Parity Technologiesは、新設された[OpenEthereum DAO](https://www.parity.io/parity-ethereum-openethereum-dao/)にParity Ethereumのコードベースを寛大にも引き渡しており、この真に分散化された媒体でノードソフトウェアに加えられる進歩を私たちは楽しみにしています。一方、Ethereum Foundationには、今後も継続的にソフトウェアの構築と改善に専念するフルタイムのチームがいます。

積極的に開発が続けられているプロジェクトを使用するということは、バグ、安定性の問題、フォーク、その他未知の課題が迅速に修正され、ソフトウェアが継続的に改善されていくことを意味します。私たちの推奨は、ノードインフラをGethに切り替えることを強く検討することです。

これはかなり大掛かりなプロセスなので、完全な移行には2〜4週間のエンジニアリング時間を見込んでおくことをお勧めします。

最後に、低レベルのノードインフラに一切関わらず、コアプロダクトの構築だけに集中したいのであれば、[ぜひご連絡ください](http://alchemy.com)。Alchemy Blockchain Developer Platformは、誰もが優れたブロックチェーン製品を容易に構築できるよう、ゼロから設計されています。

さて、基礎知識が整ったところで、いよいよ移行に取り掛かりましょう！
‍

# ParityからGethへの移行方法

## 8つのステップ

1. Parity固有のnamespaceメソッドへの依存を取り除く
1. Parity**固有**のレスポンスフィールドへの依存を取り除く
1. 不正なリクエストに対するAPI固有のレスポンスへの依存を取り除く
1. Parity固有のエラーコードへの依存を取り除く
1. Gethのハードウェアをセットアップする
1. Gethのソフトウェアをセットアップする
1. ノード上でアプリケーション固有のトラフィックシミュレーションを実行する
1. トラフィックを切り替え、サービスを監視する

‍

### 1. Parity固有のnamespaceメソッドへの依存を取り除く

ParityとGethはどちらも、Ethereum Foundationが定めた汎用のJSON-RPC Ethereumプロトコルセットを実装しており、その上に独自の補足的なAPIメソッドを備えています。Parityのnamespaceメソッドの中には、_parity_allTransactions_のように、Parityノードから見た保留中の全トランザクションを返すものがあります。機能面では、異なるパッケージにわたってGethに対応するものが存在するはずです。Alchemyへのトラフィックという観点で言えば、Gethにおける最大の欠落はtraceモジュールで、そのメソッド群は[debug](https://geth.ethereum.org/docs/rpc/ns-debug)パッケージに移されています。ここでは、_trace_replayTransaction_のような一般的なtraceメソッドを、対応する_debug_traceTransaction_で再現できます。

‍

### 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ノードのパフォーマンスを維持するのに役立ういくつかの重要な特性があります。特に注意して監視すべきシステムメトリクスが2つあります：**_CPU使用率_**と**_iowaits_**（システムがディスクに書き込む頻度）です。実際の運用では、ノードが呼び出しでエラーを出し始めたり、応答しなくなったり、全体的に劣化した状態に移行したりする際に、これらのメトリクス間に強い相関があることを確認しています。CPU使用率とiowaitの使用量は、使用しているハードウェアに依存します。[EC2 m5.2xlarge](https://aws.amazon.com/ec2/instance-types/)インスタンスの場合、archiveノードではCPU使用率が約65%、iowaitsが1回/秒あたりでパフォーマンスの劣化が見られることが一般的です。

‍

<ImageBlock
  src="https://media.alchemy.com/1704548307-graph-depicting-alchemy-internal-node-iowaits.png"
  alt="Alchemy内部Gethノードのiowaitを示すグラフ。"
  width={1243}
  height={259}
  caption="Alchemy内部Gethノードのiowait。"
/>

Alchemy内部のGethノードのIowaits
‍

### 6. Gethのソフトウェアをセットアップする

稀ではありますが、Gethノードがランダムな間隔（ブロック番号不明）で同期が止まったままになるケースを確認しています。そのような場合、忍耐が肝要であり、ノードは最終的に数時間のうちに同期を開始します。

Gethプロセスの起動にはいくつかの癖があり、これから説明します。Gethが指定するフラグオプションは多数あります。**--pprof**フラグは、ピア数、_tx_pool_、その他多くの有用な情報など、ノードの健全性に関する優れた指標を提供し、デフォルトではポート9090で公開されます。もう一つ注意すべき重要な点は、kill signalをKillSignal=SIGINTとして指定することです。Gethは再起動時に、シャットダウン時にインメモリのブロックや状態を永続ディスクに適切にフラッシュしていなかったため、最後のブロックまで巻き戻ってしまう問題があることが分かりました。

‍

### 7. ノード上でアプリケーション固有のトラフィックシミュレーションを実行する

Gethには、リクエスト/レスポンスの形式は同じでもParity版とはわずかに挙動が異なるメソッドがいくつか見られます。実際に確認した例としては次のようなものがあります：_eth_gasPrice_や、_eth_estimateGas_のようにgasPrice推定に依存するメソッドは、Gethでは推定モデルを利用しており、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が低すぎます。キューに同じnonceを持つ別のトランザクションが存在します。gas priceを上げるか、nonceを増やしてください。）これは、gas priceにパディングを加えるか、[Eth Gas Station](https://ethgasstation.info/)[のような](https://ethgasstation.info/)他のサードパーティのソースを利用して価格の見積もりを取得することで緩和できます。

‍

### 8. トラフィックを切り替え、サービスを監視する

いよいよ切り替えの時です！トラフィックをGethに移行し、数日間かけて注意深く監視してください。他に予期しない問題が発生した場合は、遠慮なくGethチームに連絡するか、私たちに相談してください。

‍

## もっと簡単な移行方法をお探しですか？

このガイドがParityからGethへの移行プロセスを進める上で役立てば幸いです！ご質問や課題があれば、いつでもお気軽にご連絡ください。私たちがお手伝いします。

さらに、ノードの管理といった低レベルのタスクに煩わされることなく、ブロックチェーンアプリケーションの構築とリリースを大幅に容易にするプラットフォームで開発を加速させたい場合は、ぜひご相談ください！

Alchemyでは、開発者の生活をより楽にするために、ゼロから[Blockchain Development Platform](http://alchemy.com)を構築しました。強力な開発者ツール群、24時間365日のサポート、そしてグローバルにスケーラブルな新しいブロックチェーンインフラプラットフォームを通じて、開発にかかる[数千時間を節約](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年です。健康を保ち、ノードの健全性も保ちましょう！

‍

---

*無料のAlchemyアカウントの登録は[こちら](https://dashboard.alchemy.com/signup?referral=affiliate:548fed5d-60b9-4530-89ef-28fa57ea280f)から。*

‍

#### Alchemyについて

[Alchemy](https://dashboard.alchemy.com/signup?referral=affiliate:548fed5d-60b9-4530-89ef-28fa57ea280f)は、197カ国で数百万人のユーザーに利用されているプロダクトを支える、業界をリードするBlockchain Development Platformを提供しています。Alchemy Platformの新しいインフラエンジンと比類ない開発者ツール群により、クリエイターは従来の何分の一かの時間で優れたブロックチェーンベースのプロダクトを簡単に構築できます。Stanford University、[Coinbase](https://www.alchemy.com/dapps/coinbase)、Googleの会長、Charles Schwab、そしてトップクラスのテクノロジー・金融業界の幹部たちに支えられ、チームはGoogle、Microsoft、Facebookといったテクノロジー大手での数十年に及ぶ経験を通じて、ブロックチェーン開発と大規模にスケール可能なインフラに関する深い専門知識を有しています。
