Solana の RPC プロバイダ比較
こちらは Solana Advent Calendar 2023 12/23の記事です。
https://adventar.org/calendars/8810
こんにちは、yugure というハンドルネームで Orca の DeveloperAdvocate として活動しています。
このポストでは、Solana でプロダクトを作る上で不可欠な RPC サーバを比較してみます。適切な RPC サーバを選択することで、RPC サーバに起因するトラブルを避けることができます。
比較は基本的に無料プラン同士で行います。Solana で開発してみようかな、という段階では課金プランは検討しにくいと思うからです。
結論は以下の通りです。
Solana の Public RPC は開発では使わない
最初の RPC は Helius がオススメ
Alchemy と QuickNode も用意しておくと心強い
[2024/02/05 追記] QuickNode は getMultipleAccounts 件数制限に注意
RPC サーバとは
Solana では、執筆時点で約 2000 台のバリデータ・サーバの中からスケジュールに沿って選出されたリーダ・バリデータがブロックを生成し、リーダ以外のバリデータが検証しながらブロックが確定していきます。
チェーンからデータを取得したり、トランザクションの実行を依頼する際、直接バリデータやリーダ・バリデータとやりとりせず、RPC サーバが仲介することがほとんどです。
RPC サーバはリーダ・バリデータが生成したブロックを受信し、チェーンのデータのレプリカを同期・維持しています。クライアントからの問い合わせに対して、データを返してくれます。
また、RPC サーバはクライアントからトランザクション実行依頼を受け取り、リーダ・バリデータに送ります。リーダ・バリデータがどのバリデータなのかは RPC が判断するため、クライアントは常に同じ RPC に依頼するだけで済みます。
docomo / au / SB / 楽天など、どの通信業者と契約してインターネットにアクセスしようか、という感じに近いと思います。RPC のコール回数は「ギガ」の話です (笑
RPC サーバのインタフェース
RPC サーバがサポートする機能の一覧はこちらです。
ただ、プロバイダによって追加・非サポートがあるので注意は必要です。
比較
比較対象
Solana Public RPC
Helius
Alchemy
QuickNode
比較観点
レートリミット
毎月呼べる回数
WebSocket 利用可否
getProgramAccounts 利用可否
[2024/02/05 追記] getMultipleAccounts 件数
毎月呼べる回数について、数字の規模感を確認しておきます。
一見すると大きな数字でも、Solana のスピードと量で考えると「大きくなかった」となったりします。
Solana はブロック生成速度が速い (400ms/block) ため、毎秒状態は変わっていきます。1 秒ごとに状態を取得するだけで、あっという間に 86,400 回/日 (2,678,4000回/月) という数字になります。
すべてのブロック (2.5block/秒) を取得したいと思うと、216,000 回/日 (6,696,000回/月) となってきます。
Solana Public RPC
Solana 公式が提供している RPC サーバです。
利用するエンドポイントがページに書いてあり、認証はありません。
公共リソースのため、Hello world 的なプログラムからの利用以上には使いません。重い処理は呼べないようにブロックされます。攻撃されやすいので、調子が悪いときもあると思います。
レートリミット: 下図の通り、厳しい
毎月呼べる回数: そういうことを考えてはいけない🙅♂
WebSocket利用可否: ブラウザからは不可 / Node.js からは可
getProgramAccounts: 不可
[2024/02/05 追記] getMultipleAccounts: 100 件
Helius
Solana 専業の RPC プロバイダーです。Solana に関するディープなブログなどを公開しており、技術力がかなり高いチームだと思います。
レートリミット: 25 回/秒
毎月呼べる回数: 1,000,000
getProgramAccounts 換算: 100,000
WebSocket利用可否: 可
getProgramAccounts: 可
[2024/02/05 追記] getMultipleAccounts: 100 件
特徴1: 1 Credit = 1 RPC コール
Helius のわかりやすい点は、1 Credit = 1 RPC コールであることです。
唯一の例外は getProgramAccounts = 10 Credit です。
他の RPC プロバイダをみると察せられるのですが、Solana 専業だからこそできるシンプルさだと思います。
なお、NFT 関連の DAS と呼ばれている高度機能は 100 Credit です。私は今のところ使ったことがないですが、NFT関連のプロジェクトにとって便利なのだと思います。
WebSocket は 1 通知 = 1 Credit なので通知が大量にくる条件の場合は注意が必要です。
特徴2: Solana ウォレットでログイン
Helius の RPC エンドポイント URL を取得するには、一般的なユーザ登録ではなくウォレットの署名によるログインを行います。
ウォレットで署名すると、ダッシュボードが表示され、エンドポイントの URL が書いてあります。即発行といえる手軽さです。
特徴3: USDC 払い可
無料プランとは関係ありませんが、課金するときには Solana 上の USDC での支払いが可能です。
クリプトの定期払いが少しむずかしいためか、サブスクではなく単発払いが可能なのも嬉しいところです(笑
ちなみに一番安い課金プランである Hacker は $49 ですが、10M Credits あるので、毎月すべてのブロックを取得しても余裕があります。
課金した経験もあり、Solanaの 1 トランザクションを署名するだけでお手軽でした。(49 USDC が何処かへ送られていきました)
特徴4: エンドポイント URL の API キーを秘匿できる
RPC のエンドポイント URL には API キーが含まれているため、そのまま Web アプリで利用するとキーが漏洩してしまいます。
キーが漏洩して利用されてしまうと Credit は減りますし、使い続けるわけにいかなくなります。
Helius では Cloudflare の Worker と呼ばれるサーバレス機能を使ったプロキシをセットアップすることで、Worker の機能で API キーを隠蔽し、かつアクセス制御をすることが可能になります。
Worker は 10万回/日 のコールが無料のため、プロキシをセットアップしてもゼロコストのままです。
プロキシはこちらのリポジトリに沿って Cloudflare を操作するとセットアップできます。
Alchemy
いくつものチェーンをカバーしている RPC プロバイダです。RPC がメインではなく、開発プラットフォームの基盤として RPC 機能を提供しているという感じだと思います。Ethereum では特に有名なのかな?という印象です。
レートリミット: 330 CU/秒
getMultipleAccounts 換算: 30回/秒
getProgramAccounts 換算: 2.82回/秒
毎月呼べる回数: 300M CU
getMultipleAccounts 換算: 27,272,727
getProgramAccounts 換算: 2,564,102
getBlock 換算: 4,545,454
getTransaction 換算: 5,084,745
WebSocket利用可否: 可
getProgramAccounts: 可
[2024/02/05 追記] getMultipleAccounts: 100 件
特徴1: CU によるリミット
複数チェーンをサポートしているためか、リミットは CU (Compute Unit) という抽象的な単位で決まっており、Solana の RPC コールごとに消費する CU が定義されています。
特徴2: 無料プランと課金プランの間の超えられそうな壁
Free の上限が 300M CU で、一番安い課金プランである Growth の上限が 400M CU です。
課金の意味とは?となるぐらい Free が強いです。CU による計算を考慮しても、呼び出せる回数は圧倒的に見えます。
特徴3: getProgramAccounts にページネーションがある
getProgramAccounts に Alchemy 独自の pageKey パラメータが追加されています。
https://docs.alchemy.com/reference/getprogramaccounts
getProgramAccounts がどの程度のレスポンスが返せるのかはよくわかっていません(どなたかご存知ですか?)。ページネーションがあるのは現実的な範囲で区切られるということであり、安心できます。
特徴4: accountSubscribe がない
アカウントがアップデートされたときに WebSocket で通知を受け取れるのが accountSubscribe です。
Alchemy はこれを受け付けません。
QuickNode
いくつものチェーンをカバーしている RPC プロバイダです。SolanaFM のバックにいる RPC プロバイダだと思っています。
Solana のあまり知られていそうにない部分をさらっと解説してくれてたりします。困って検索するとヒットすることがあります。RPC プロバイダは性能を引き出すために必然的に実装レベルで詳しくなるのだと思います。
レートリミット: 330 Credits/秒
getMultipleAccounts 換算: 6.6回/秒
getProgramAccounts 換算: 6.6回/秒
毎月呼べる回数: 50M Credits
getMultipleAccounts 換算: 1,000,000
getProgramAccounts 換算: 1,000,000
getBlock 換算: 1,000,000
getTransaction 換算: 1,000,000
WebSocket利用可否: 可
getProgramAccounts: 可
[2024/02/05 追記] getMultipleAccounts: 5 件 😱
特徴1: Credit によるリミット
Alchemy と同様に、RPC コールごとに Credit の消費量が定義されています。Solana に生まれた時点で 50 以上という業を背負うモデルです(笑
ただ、現時点では以下の 2 コール以外は 50 Credits なので、細かく刻まれる複雑さはないです。これらを使わなければ Credits / 50 が呼べる回数です。
getSupply
getLargestAccounts
特徴2: $10 の課金プランが存在
$49 のプランの量は必要ないな、でもフリーでは足りないという場合には良さそうです。
クリプト支払いも受け付けると発表していましたが、今見るとクレジットカードの入力枠しかありません。
過去にクレジットカードの情報を入力して課金したことがないユーザはサポート窓口へご案内のようです…
https://support.quicknode.com/hc/en-us/articles/7435546301073-Can-I-pay-in-cryptocurrency-
特徴3: getMultipleAccounts の件数が 5 件 (2024/02/05 追記)
複数のアカウントを同時に取得する getMultipleAccounts という API があるのですが、無料アカウントでは 5 件しかとれないようになったようです。
最低でも 100 件は取得できることは暗黙の了解だと思っていましたので、やや衝撃の制限です。
結局どこを使えばいいのか?
Helius, Alchemy, QuickNode のどこもいろいろ試すぐらいでは全く心配がないコール回数を無料プランで提供してくれています。
最初の RPC としては Helius がよいかなと個人的には思います。
ウォレットの署名のみで発行できる
1 Credit = 1 RPC コールのシンプルさ (除く getProgramAccounts)
getProgramAccounts 例外は最近追加され、歯切れの悪い説明にorz
25 回/秒のレートリミット
関連アカウントを連鎖的に取る場合に安心
Web アプリ公開時の RPC 保護
Cloudflare Worker によるプロキシ
(課金プランのみ)5 回/秒・IP に制限するエンドポイントも提供
いざとなれば Solana 上の USDC で単発課金できる
ただ、維持費がかかるものでもないので、Alchemy や QuickNode のエンドポイントも作っておき、使えるようにしておくと安心だと思います。
別の RPC を試せるようにしておくと、以下のシーンで役立ちます。
万が一 RPC のサービスがダウンした場合
RPC のデータ同期がバリデータに対して遅れている場合
RPC のレスポンスに対するダブルチェック
それにしても、課金プランがみんな $49 というのは、そこまで携帯電話会社と似なくても・・・という感じですね(笑
Geyser や gRPC をサポートする RPC
より多くのデータを早く・大量に受信して解析・活用したいというニーズがある場合、Geyser as a service や gRPC によるデータ提供を行っているプロバイダの扉を叩くことになると思います。
基本的に Solana 専業のようなチームが強いと思います。
Helius
Triton
Jito Labs
さいごに
最後まで読んでいただきありがとうございました。
🙇宣伝1: Orca とチュートリアル
Solana で多くのトレードを執行する流動性を提供している Orca は Typescript / Python / Rust などのプログラムからも利用可能です。
Typescript 向けに、Devnet でそのまま動かせるチュートリアルを用意していますので、Solana でトレード・流動性提供(マーケットメイク)してみたい方はぜひ年末にトライしてみてください。
Orca の Discord の日本語チャネルでは、技術サポート・相談を行っていますので、気軽にジョインしていただけると幸いです。
🙇宣伝2: PubkeySollet & Account microscope
Orca での活動を通じてちょっとした便利ツールを作って公開しています。
既存のサービスだとちょっと痒いところに手が届かない、という状況で生まれたものなので、お役に立てば幸いです。
PubkeySollet
公開鍵を入力すると、その公開鍵のウォレットとしてアプリに接続できるウォレットです。
公開鍵のみ入力するため、署名はできません。
利用シーンは以下のようなものがあります。
強いユーザにどんな画面が見えているのか覗いてみたい
ユーザサポートでユーザにどんな画面が見えているのか確認したい
スキャム疑惑があるサイトに突撃する (原理的に署名できないので安心)
どんなトランザクションなのかリバースエンジニアリングする
Account microscope
Solscan や SolanaFM がエクスプローラとしてとても便利です。
ただ、その便利さ故に表示されている情報がアカウント自体にあるのか、エクスプローラが関連付けて表示しているだけなのかがわからなくなります。
開発者向けの簡易エクスプローラとして以下のようなことができます。
生データと導出したデータを区別して表示
アカウントのヘッダが見られる
HexDump 結果をバイナリエディタのようにデータ解釈できる
アカウントデータを JSON で保存
実際に Helius の RPC と Cloudflare Worker を利用しています! 👍
それでは、残りの 2023 年・2024 年が Solana コミュニティーにとってよい年になりますように! 🙂
この記事が気に入ったらサポートをしてみませんか?