本記事では、分散型RPCを実現するサービスの一つである「dRPC」について、概要と仕組みを記述します。
1.RPCノード
前提として、ブロックチェーンにはクライアント呼び出しのゲートウェイとなるRPCノードが存在します。
残高の参照やトランザクションの送信など、JSON-RPC APIを用いてクライアントとブロックチェーンがやり取りするにあたり、ブロックチェーン側のゲートウェイとなるのがRPCノードです。
2.分散型RPC
RPCノードは自前で用意することも可能ですが、コストや保守性の面から、多くのケースではRPCプロバイダー(主に従量課金制でRPCノードを貸し出す)が利用されます。
こうした状況の中で、分散型RPCと呼ばれる分野が存在します。分散型RPCは、単一のRPCプロバイダーを利用する際の問題点を解消できる選択肢となっています。
3. 分散型RPC提供サービス「dRPC」
概要
dRPCはその名の通り、コミュニティによって運営される、分散型RPCを提供するサービスです。
無料プランからエンタープライズプランまで用意されており、サポートも手厚いようです。
仕組み
dRPCはDProxyとDshacleというコンポーネントで構成されています。
DProxyはクライアントからのJSON-RPCリクエストを受け付け、それをDshacleへ受け渡します。そしてDshacleは、適切なRPCノード(ドキュメントでは「Data providers」と呼んでいます)にリクエストルーティングします。
つまり、RPCノードの前に置くロードバランサーのようです。
出典: https://drpc.org/docs/howitworks/overview
ちなみに、DshacleはもともとEmerald社が開発したOSSライブラリですが、dRPCは独自にforkしたものを使用しているようです。
メリット
ドキュメントから、dRPCを利用することによるメリットをいくつか記載します。
- 低遅延
- 遅延のないRPCノードへ優先的にルーティングすることができる
- 耐障害性
- あるRPCノードがダウンしても、別のRPCノードへルーティングできる
- RPCプロバイダーへの依存からの脱却
- dAppsが大手プロバイダー(Infura、Alchemy、Quicknodeと名指しされていました)に依存してしまう状況を解消できる
料金体系
プラン制で、「Free」「Growth」「For Enterprise
」の3つから選べるようです。
出典: https://drpc.org/pricing
FreeとGrowthの大きな違いとして、ルーティングされるノードの種類があります。
Freeプランでは、パブリックノードのみがルーティングの対象となりますが、Growthプランでは有料のノード(RPCプロバイダが提供するノードと思われます)もルーティング対象となります。
このとき、有料ノードの利用料はCompute Units(CU) という独自の単位で表され、RPC methodの内容によってCU消費量が変わります。例えば、eth_getBlockByHash
には21CU、eth_sendRawTransaction
には90CU消費します。
Growthプランでは163 Million CU が付与されるようなので、その範囲内で利用する必要があります。
4.所感
dRPCは、分散型RPCを手軽に導入できる良いサービスだと感じました。
一方、Dshackleへの依存について疑問が湧きました。すべてのトラフィックは、各RPCノードへルーティングされる前にDshackleを経由するので、Dshackleが単一障害点となりえないのか、またはその解決策はあるか気になりました。