---
title: "代替RPCの設定方法"
description: "バックアップノードプロバイダーを追加してダウンタイムとトランザクションの停止を防ぐ"
---

## リモートプロシージャコール（RPC）とは

リモートプロシージャコール（RPC）は、ソフトウェアが同一ネットワーク上の他システムとリモートで通信し、ソフトウェアやデータにアクセスするための技術である。RPCの方式では、クライアントが何か（例：データ）をリクエストし、サーバーがそのリクエストをリモートで処理する。

ブロックチェーンでは、この技術は[RPCノード](https://www.alchemy.com/overviews/what-is-an-ethereum-node)という形で採用されている。これはブロックチェーン開発者がブロックチェーンサーバー（すなわちノード）とやり取りするためのAPIである。これにより、ブロックチェーン開発者は、ブロックチェーンへの接続にRPCノードを必要とする[アプリ](https://www.alchemy.com/dapps/top/defi-dapps)のようなweb3ソフトウェアを構築できる。

この記事では、[ブロックチェーンノードプロバイダーを利用すること](https://www.alchemy.com/overviews/blockchain-node-providers)の重要性と、代替RPCエンドポイントの設定方法、そして代替またはバックアップのRPCエンドポイントが重要である理由について説明する。

さらに、既存のブロックチェーンプロジェクトに代替RPCエンドポイントを組み込みたい場合に向けて、代替RPCエンドポイントを設定するさまざまな方法を紹介する。

## 代替RPCエンドポイントとは

代替リモートプロシージャコール（RPC）エンドポイントとは、プライマリのRPCエンドポイントが障害を起こした、あるいはダウンした際のバックアップ用エンドポイントである。RPCエンドポイントの障害は、数千から場合によっては数百万件のトランザクションの失敗につながるリスクを伴う。

その対策として、開発者はプライマリのRPCエンドポイントが障害を起こした場合に備えたバックアッププランを検討するようになった。その一つが、プライマリのRPCエンドポイントが正常に機能しなくなった場合のフェイルセーフとして機能する代替RPCエンドポイントを設定することである。

代替RPCエンドポイントは、アプリケーションやウォレット専用のエンドポイントである[プライベートRPCエンドポイント](https://www.alchemy.com/overviews/private-rpc-endpoint)と似ているが、実装は異なる。代替RPCエンドポイントはバックアップを指すのに対し、プライベートRPCエンドポイントは単に非公開のエンドポイントを意味する。

## 代替RPCエンドポイントを使うべき場面

代替RPCエンドポイントには、ブロックチェーン開発者にとってさまざまな用途がある。[公開RPCエンドポイントの信頼性が低い](https://www.alchemy.com/infura-alternative)場合から、不正確なデータといったトランザクションでよくある問題の解決まで幅広い。このセクションでは、代替RPCエンドポイントが役立つ一般的な状況をいくつか取り上げる。

### 1. プライマリのRPCプロバイダーがダウンしている場合

代替RPCエンドポイントを設定する主な用途の一つは、プライマリのRPCが完全にダウンし、ブロックチェーン対応ソフトウェアとブロックチェーンとの接続が失われた場合のバックアップである。RPCの代替がすぐに用意されていない場合、ブロックチェーンを利用するソフトウェアが一時的に機能しなくなることがある。

例えば、2022年7月には、Ankrがホストしていた PolygonのパブリックRPCエンドポイントでネットワーク全体の障害が発生した。最高情報セキュリティ責任者（CISO）の**Mudit Gupta**氏は、ダウンタイムが発生していなかったAlchemyのような代替のPolygon RPCプロバイダーへの切り替えを推奨した。

<ImageBlock
  src="https://media.alchemy.com/1704096781-mudit-gupta-tweet.png"
  alt="2022年7月にパブリックRPCプロバイダーのAnkrが乗っ取られた際、PolygonはAlchemyへの切り替えを推奨した。"
  width={600}
  height={504}
  caption="2022年7月にパブリックRPCプロバイダーのAnkrが乗っ取られた際、PolygonはAlchemyへの切り替えを推奨した。"
/>

### 2. プライマリのRPCプロバイダーでトランザクションが通らない場合

代替RPCエンドポイントのもう一つの重要な用途は、プライマリのRPCエンドポイントが混雑または低速になり、トランザクションが遅延する場合のバックアップである。これは、ブロックチェーンとの即時通信に大きく依存するアプリにとって特に深刻な問題となり得る。

バックアッププロバイダーを選ぶ前に、Alchemyの[RPCプロバイダーベンチマーク](https://www.alchemy.com/benchmarks)で現在のレイテンシと成功率のデータを比較するとよい。

トランザクションが失敗する場合、代替RPCエンドポイントを利用することは、不安定なノードによってweb3のユーザー体験が損なわれないようにするための有効なバックアップ手段となる。

### 3. プライマリのRPCプロバイダーのデータが不正確な場合

ブロックチェーンはグローバルに分散したシステムであるため、[一部のノードプロバイダーは不正確なデータを返す](https://www.alchemy.com/blog/data-accuracy)ことがある。これは、そのノード群がパブリックブロックチェーンと同期していないことが原因である。

ノードプロバイダーのサーバー群が同期していない場合、不正確な残高や欠落したNFTなど、ユーザーが不正確なデータを受け取ることになり、全体的にユーザー体験が悪化する。

このような状況では、ブロックチェーンアプリケーションに代替RPCエンドポイントを組み込んでおくことで、プライマリのノードプロバイダーからセカンダリのフォールバック用ノードプロバイダーへ簡単に切り替え、不正確なデータが返されるのを避けることができる。

### 4. プライマリのRPCプロバイダーにスケーラビリティがない場合

最後に、トークンのエアドロップ、注目度の高いNFTドロップ、インセンティブ付きのオンチェーン活動など、トラフィックが高くなる際にプライマリのRPCエンドポイントにスケーラビリティの課題がある場合にも、代替RPCエンドポイントは有用である。

これにより、代替RPCエンドポイントを利用して高トラフィックを分散させ、プライマリのRPCエンドポイントがスケーラビリティの負荷で機能しなくなるのを防ぐことができる。

## 障害のあるエンドポイントへの3つの対処法

障害のあるRPCエンドポイントに対処する際、主な方法は3つある：同じエンドポイントでトランザクションをリトライする、複数のRPCエンドポイントのリストの間でトランザクションを切り替える、あるいはプライマリのRPCプロバイダー自体を変更する、である。

### 1. 同じRPCエンドポイントでトランザクションをリトライする

障害のあるRPCエンドポイントへの一つの対処法は、同じRPCエンドポイントに追加のリクエストを送ることである。この方法では、開発者は各リトライの間に短い遅延を挟みながら、同じRPCエンドポイントに繰り返しリクエストを送信する。この手法は、RPCエンドポイントが短期間だけ一時的にダウンしている場合に最も効果的であり、そのRPCエンドポイントが復旧するまでリクエストを送り続けることができる。

### 2. 複数のRPCエンドポイントを順にローテーションする

もう一つの方法は、1つ以上の代替RPCエンドポイントに接続し、異なるRPCエンドポイントのリストの間で一連のRPCリクエストを送信することである。この手法では、同じエンドポイントで同じトランザクションを繰り返しリトライする代わりに、リトライ用の複数の選択肢を持つことで、一つの障害のあるRPCエンドポイントがブロックチェーンアプリケーション全体を機能不全に陥らせる問題を回避できる。

RPCエンドポイントに障害が発生した場合、代替RPCプロバイダーのリストを利用している開発者は、承認済みリストの中の別のエンドポイントに単純に接続を切り替えればよい。

## EthereumでフォールバックのRPCプロバイダーを設定する方法

代替RPCエンドポイントのリストを設定するのは難易度が高い場合があるため、アプリケーションの構成によっては、より単純な選択肢として、[プライマリのRPCエンドポイントをAlchemyのような、より信頼性の高いバックアッププロバイダーに切り替える](https://www.alchemy.com/?a=c4273aa140)方法がある。

この方法では、複数の異なるエンドポイントを順に切り替えたり、同じエンドポイントでトランザクションをリトライしたりする代わりに、RPCエンドポイントのURLを信頼性の高いバックアップに完全に置き換えることができる。
