ERPC、Solana Stream SDK v4.0.0を公開。UDP Shreds処理とgRPC再接続を高速化

ELSOUL LABO B.V.

ELSOUL LABO B.V.とValidators DAOは、Solanaのストリーミングデータを扱うオープンソースのSolana Stream SDK v4.0.0を、2026年11月6日に正式公開しました。RustのUDP Shreds内部処理では約108倍、TypeScriptのイベントキューでは約4倍の改善をローカルベンチマークで確認し、Geyser gRPCの切断後の受信再開も高速化しました。SDKは無料で利用でき、Rust・TypeScriptのサンプルから開発を始められます。

低遅延のデータ配信をアプリケーションで活かすには、到着したデータを処理する時間も重要です。v4.0.0では受信後の内部処理を効率化し、切断からの接続復旧も改善しました。ERPC Shreds UDP Forwarding Premiumと組み合わせることで、配信経路と受信側の実装の両方から、Solanaアプリケーションの受信環境を整えられます。

 受信処理と接続復旧の改善を、三つの試験で確認 

RustのUDP受信経路では、受け取ったデータグラムのデコード、内部バッファへの挿入、Shredsからデータを復元するdeshredまでの処理を高速化しました。各パケットで繰り返していた内部状態の整理や時刻取得を見直し、データの保持期限を維持しながら処理負荷を減らしています。比較検証では、1データグラムあたりの内部処理時間が94,236nsから855〜881nsへ短縮され、約108倍の高速化を確認しています。

この測定はApple M-seriesのMacで実施し、300スロット分、合計403,200データグラムを処理した5回の試験の中央値を用いています。対象はdecode→insert→deshredの内部処理です。ネットワークから届くまでの時間や、利用者のアプリケーションによる後段の処理は含まれていません。受信したShredsを復元する部分の処理負荷を減らし、アプリケーション側で使う処理に計算資源を振り向けやすくする改善です。

TypeScriptのGeyserクライアントでは、キューにイベントがある間の待機処理を減らし、受信したデータを効率よく取り出せるようにしました。Node.js 24で200万イベントを処理したキュー単体の試験では、毎秒570万〜740万イベントから、毎秒2,480万〜2,940万イベントへと処理性能が向上し、約4倍のスループットを確認しています。

Geyser gRPCでは再接続を扱うクライアントと初回の再試行間隔を更新しました。ローカルのtonicサーバーで20回の切断を発生させ、切断前後の更新データの受信間隔を比較した試験では、中央値が3.0 runnerの552msから、4.0 runnerの103msへ短縮されています。これはローカル環境で受信再開までの間隔を測った結果です。

三つの数値は、測定対象と条件が異なる試験の結果です。Rustの内部処理、TypeScriptのイベントキュー、gRPCの再接続について、それぞれの改善幅を示しています。実装と検証条件は、関連リンクのPR #129で公開しています。

 Alpenglow対応を継承し、クライアントを更新 

Alpenglowへの対応はv3.0.0で導入済みです。ブロックのヘッダー、フッター、親の更新を表すブロックマーカーと、トランザクションを含むentriesを区別して扱う構成を、v4.0.0にも継承しています。アプリケーション側では、ブロック構造に関する情報と、処理対象となるentriesを分けて扱えます。

v4.0.0では、Agave 4.4.1およびYellowstone gRPC 17系のクライアントへ更新しました。再接続時には、受信が途中になったデータの識別情報と再開位置をDisconnectedイベントでアプリケーションへ通知できます。再送データの重複や、途中まで受信したデータをどう扱うかを、アプリケーション側で実装するための情報が得られます。

v3からv4への移行ではGeyserのprotobuf定義を維持しつつ、再接続イベントやRust側のSolana message・transaction型が更新されています。イベントハンドラーと依存バージョンの変更点は、公開している移行ガイドで確認できます。

 UDPはRust、gRPCはRustとTypeScriptで利用 

公開済みのRustパッケージsolana-stream-sdkと、TypeScriptパッケージ@validators-dao/solana-stream-sdkは、いずれもv4.0.0を利用できます。接続方式ごとの提供言語は次のとおりです。

 Shreds UDP:Rust

Geyser gRPC:Rust・TypeScript

Shreds gRPC:Rust・TypeScript 

UDPでShredsを受信する場合は、Rust向けのクライアントを使用します。公開済みのSDK v4.0.0を利用するRust UDPのサンプル・スターターでは、受信、Shredsの復元、監視対象プログラムの命令検出までを試せます。監視対象や検出後の処理を変更し、自分のアプリケーションへ組み込む出発点として利用できます。

TypeScriptで開発する場合は、Geyser gRPCまたはShreds gRPCを利用できます。今回のイベントキュー改善は、Geyser gRPCのサンプルとスターターに反映されています。利用する言語と配信方式に合わせて、公開されている実装を利用できます。

 Shreds UDP Forwarding Premiumの配信を活かす 

ERPC Shreds UDP Forwarding Premiumは、各リージョンの複数ノードをメッシュで結び、先に到着したShredsを配信する構成です。配信経路による到着時間と、到着後のSDKによる復元処理の両方が、受信したデータを使うまでの流れに関わります。今回のRust UDP受信処理の改善は、Premiumから届いたデータを処理する側で活用できます。

2026年10月30日にフランクフルトで行った比較では、同じマシン・同じ時計でStandardとPremiumを120秒間同時に取得し、pcapからUDPペイロードが一致するデータを照合しました。この共通集合ではPremiumが98%で先着し、到着差の中央値は1.78msでした。Standardで観測したデータのうち、Premiumでも観測できた割合は93.9%です。

Premiumの図は配信経路による到着差を示し、SDKの図は受信側の内部処理や接続復旧を示しています。実際のアプリケーションでは、パケット到着と必要な命令を検出した時刻の両方を記録することで、配信の速さがどこまで処理結果につながっているかを確かめられます。

 時間課金とサンプルから、自分の環境で比較 

Shreds UDP Forwarding Premiumは、1時間あたり€1.39の時間課金で利用できます。ダッシュボードから利用を開始し、Rust UDPスターターで受信を確認できます。リージョンや受信サーバー、アプリケーション処理をそろえて比較することで、配信の到着差と受信後の処理時間をそれぞれ確認できます。

まず公開IPv4アドレスとUDPポートをダッシュボードに登録し、表示された送信元からの受信を許可します。Rust UDPスターターでパケットとデータの復元を確認したら、監視したいプログラムや実際のアプリケーション処理を加えて評価してください。サンプルと配信サービスを組み合わせ、ご自身の環境で受信から検出までを測定できます。

 関連リンク 

Rust UDPサンプル・スターター: https://github.com/ValidatorsDAO/solana-stream/tree/main/temp-release/shreds-udp-rs

Solana Stream SDK v4移行ガイド: https://github.com/ValidatorsDAO/solana-stream/blob/main/docs/migration-v4.md

SDKの性能改善と検証記録: https://github.com/ValidatorsDAO/solana-stream/pull/129

Shreds UDP Forwardingドキュメント: https://erpc.global/ja/doc/shredstream/udp-forwarding/

Shreds UDP Forwarding Premiumの利用: https://dashboard.erpc.global/ja/user/shreds?plan=udp

ERPC料金: https://erpc.global/ja/price/

すべての画像


ダウンロード
プレスリリース素材

このプレスリリース内で使われている画像ファイルがダウンロードできます

会社概要

ELSOUL LABO B.V.

14フォロワー

RSS
URL
https://labo.elsoul.nl/ja/
業種
情報通信
本社所在地
Joop Geesinkweg 501 ,AMSTERDAM-DUIVENDRECHT, Amsterdam, Noord-Holland, 1114AB, NL
電話番号
316-8722-8310
代表者名
川崎文武
上場
未上場
資本金
140万円
設立
2020年09月