コンテンツへスキップ
0%

代替RPCの設定方法

Alchemy team headshot

執筆者 Alchemy

2022年8月10日 公開読了時間 1 分

リモートプロシージャコール(RPC)とは

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

ブロックチェーンでは、この技術はRPCノードという形で採用されている。これはブロックチェーン開発者がブロックチェーンサーバー(すなわちノード)とやり取りするためのAPIである。これにより、ブロックチェーン開発者は、ブロックチェーンへの接続にRPCノードを必要とするアプリのようなweb3ソフトウェアを構築できる。

この記事では、ブロックチェーンノードプロバイダーを利用することの重要性と、代替RPCエンドポイントの設定方法、そして代替またはバックアップのRPCエンドポイントが重要である理由について説明する。

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

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

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

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

代替RPCエンドポイントは、アプリケーションやウォレット専用のエンドポイントであるプライベートRPCエンドポイントと似ているが、実装は異なる。代替RPCエンドポイントはバックアップを指すのに対し、プライベートRPCエンドポイントは単に非公開のエンドポイントを意味する。

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

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

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

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

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

2022年7月にパブリックRPCプロバイダーのAnkrが乗っ取られた際、PolygonはAlchemyへの切り替えを推奨した。
2022年7月にパブリックRPCプロバイダーのAnkrが乗っ取られた際、PolygonはAlchemyへの切り替えを推奨した。

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

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

バックアッププロバイダーを選ぶ前に、AlchemyのRPCプロバイダーベンチマークで現在のレイテンシと成功率のデータを比較するとよい。

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

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

ブロックチェーンはグローバルに分散したシステムであるため、一部のノードプロバイダーは不正確なデータを返すことがある。これは、そのノード群がパブリックブロックチェーンと同期していないことが原因である。

ノードプロバイダーのサーバー群が同期していない場合、不正確な残高や欠落した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のような、より信頼性の高いバックアッププロバイダーに切り替える方法がある。

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

Background gradient

ブロックチェーンで魔法を生み出す

Alchemyは、最も強力なweb3開発者向けプロダクトとツールを、豊富なリソース、コミュニティ、そして卓越したサポートと組み合わせて提供します。