新着:HeliusがLight Protocolを買収
Heliusの強化されたSolana WebSocketsがLaserStreamで稼働するようになりました
ブログ/更新情報

発表:次世代Enhanced WebSockets

Developer Experience EngineerXの0xIchigoLinkedInの0xIchigoGitHubの0xIchigo
読了時間:6分

Solanaで応答性の高いアプリケーションを構築するには、リアルタイムのデータストリーミングが欠かせません。WebSocketsは、非効率なHTTPポーリングを単一の接続に置き換え、持続的な双方向通信を実現するための主要なプロトコルとして長く利用されてきました。

WebSocketsは従来のHTTPポーリングより優れていますが、信頼性を損なうさまざまな課題があります。これはSolanaのような高スループット環境では大きな問題です。予期しない切断や不十分なフィルタリングなどの問題により、開発者はこれまで独自の対策に多くの時間と労力を費やさざるを得ず、その結果、コアプロダクトのイノベーションが犠牲になることも少なくありませんでした。

Heliusは、こうした問題を以前から認識していました。そこで、トランザクションとアカウントの更新をより高速かつ柔軟にストリーミングできるEnhanced WebSocketsを提供してきました。しかし、インフラストラクチャが進化するにつれ、これらの機能強化だけでは、Heliusで実現可能な耐障害性とパフォーマンスに届かないことが明らかになりました。

このたびEnhanced WebSocketsが、速度、シンプルさ、耐障害性を重視して構築された次世代gRPCストリーミングサービスLaserStreamと同じインフラストラクチャで稼働するようになりました。 

この統合により、JSONネイティブ形式のWebSocketストリームでgRPCレベルの信頼性を実現します。不安定な接続を排除し、フロントエンド開発者が可能な限り優れたUXの提供に集中できるようになります。

WebSocketsとリアルタイムアプリケーションの課題

WebSocketsは、継続的にHTTPエンドポイントをポーリングする代わりに、単一の接続でプッシュ通知を受け取れる持続的な双方向通信を実現します。便利に思えますが、WebSocketsにも課題があります。

1. 接続の脆弱性と高負荷

WebSocketsは、ステートフルで長時間維持されるTCP接続を使用します。そのため、ネットワークの一時的な障害、プロキシのタイムアウト、サーバーの過負荷によって中断される可能性があります。 

Solanaの400msというスロット時間と突発的なトラフィックは、WebSocketの脆弱性をさらに高めます。そのため開発者は、稼働を維持するために、指数バックオフやハートビートpingなどの独自の再接続ロジックを実装しなければなりません。

2. 大量のデータ

WebSocketサブスクリプションは、多くの場合過剰な量のデータを返します。

accountSubscribeなどのネイティブサブスクリプションは、フィルタリングされていないストリームを配信するため、開発者は大量の不要なデータに圧倒されます。その結果、クライアント側でのフィルタリングが必要になり、帯域幅の使用量が増加し、処理遅延が発生する可能性があります。

3. スケーラビリティとリソースのオーバーヘッド

数千件の同時接続を処理するとサーバーリソースに負荷がかかり、メモリリーク、CPUのボトルネック、ロードバランサーの複雑化が発生します。また、負荷を管理するために接続をシャーディングする必要もあります。

WebSocketsの水平スケーリングは非常に難しいことで知られており、ほとんどのチームには、それを最適化するための時間、リソース、専門知識がありません。 

4. プロダクトイノベーションに使う開発時間の損失

これらの課題が重なることで、新しく差別化された機能やアプリケーションの構築に使える開発時間が奪われます。この非効率性は、変化の速いSolanaエコシステムの進歩に見えない負担を課しています。

こうした継続的な課題により、標準のSolana WebSocketsは本番環境向けアプリケーションには不十分です。ごく短時間の中断であっても、機会損失やUIの情報陳腐化につながる可能性があります。

次世代Enhanced WebSockets

こうした不足を補うため、Solanaの標準WebSocketsをGeyserで強化し、アカウントとトランザクションのサブスクリプションを改善したEnhanced WebSocketsを導入しました。 

これにより、強力なフィルター(accountInclude、accountExclude、accountRequiredを使用して最大50,000件のアドレスに対応)と、従来のWebSocketsより高速な応答時間を実現しました。しかし、最初のリリース以降、Heliusのデータストリーミングインフラストラクチャはさらに進化しています。

Enhanced WebSocketsは現在、速度、信頼性、シンプルさを重視して構築された次世代gRPCストリーミングサービスであるLaserStreamと同じインフラストラクチャで稼働しています。

WebSocketラッパーでgRPCの信頼性を体験できるようになりました。

主な機能強化は次のとおりです。

クラス最高の耐障害性

Enhanced WebSocketsは、集約された複数のノードから同時にストリーミングし、自動的にフェイルオーバーするようになりました。単一障害点を排除して耐障害性を高め、最大限の稼働時間を確保します。

高パフォーマンス

LaserStreamは超低レイテンシのデータストリーミング専用に設計されています。Enhanced WebSocketsにも最新の改善が適用され、可能な限り高速な通知を実現します。

フロントエンドに最適化されたストリーム

アップグレードされたインフラストラクチャに支えられたEnhanced WebSocketsのJSONペイロードにより、フロントエンド開発者は高精度なストリームをブラウザ、Reactアプリ、モバイルクライアントに直接統合できます。

最適なストリーミングソリューションの選択:比較

Heliusでは、特定のユースケースに合わせて構築された複数のデータストリーミングサービスを提供しています。以下にその違いをまとめます。 

Enhanced WebSockets

次の場合はEnhanced WebSocketsを使用してください。

  1. レイテンシ、継続性、正確性がPnL、約定、リスクに影響しない場合
  2. JSONペイロードを使用したい場合
  3. バックエンドを複雑にせず、コンシューマー向けUXを重視する場合
ユースケース例
フロントエンドのリアルタイムUX- ウォレット残高
- ポートフォリオダッシュボード
- アプリ内通知
- コンシューマー向けUX

LaserStream

次の場合はLaserStreamを使用してください。

  1. 1ミリ秒単位の差が重要な場合
  2. レイテンシ、継続性、正確性がPnL、約定、リスクのいずれかに影響する場合
  3. より高度なフィルタリング機能が必要な場合
  4. 自動リプレイによる欠損のない配信が必要な場合
  5. さまざまなコミットメントレベルでトランザクションを受信する必要がある場合
ユースケース例
バックエンドのイベント駆動処理- 取引およびリスク管理システム 
- 価格および注文フローのモニター
- 清算監視ツール
- クロスベニューエンジン

Shred Delivery

次の場合はShred Deliveryを使用してください。

  1. 生のシグナルが必要な場合
  2. 独自のデシュレッディングパイプラインをすでに運用している、または構築できる場合

shredレベルのレイテンシが必要でもデシュレッディングパイプラインがない場合は、代わりにPreprocessed Transactionsを使用すると、デコード済みのshredをWebSocket経由で受信できます。

ユースケース例
超低レイテンシのシグナル取得- 高頻度取引
- クロスベニュー裁定取引
- トークンスナイピング

まとめると、次のようになります。

  • フロントエンドに適した、ミッションクリティカルではないストリームにはEnhanced Websocketsを使用します。
  • レイテンシのギャップやデータの継続性が機会に直接影響するバックエンドの意思決定ループにはLaserStreamを使用します。
  • 生のshredから最速でシグナルを取得するために独自のデシュレッディングパイプラインを使用している場合は、Shred Deliveryを使用します。

Enhanced WebSocketsクイックスタート

Enhanced WebSocketsは簡単に使い始められます。 

まず、サインアップし、「API Keys」セクションでAPIキーを取得します。

いずれかのエンドポイントに接続し、transactionSubscribeまたはaccountSubscribeでサブスクライブするだけで、フィルタリングされた耐障害性の高いストリームを受信できます。 

エンドポイント

  • Mainnet: wss://atlas-mainnet.helius-rpc.com/?api-key=<YOUR_API_KEY>
  • Mainnet(Gatekeeperベータ版): wss://beta.helius-rpc.com/?api-key=<YOUR_API_KEY>
  • Devnet: wss://atlas-devnet.helius-rpc.com/?api-key=<YOUR_API_KEY>

例:新しいRaydium Launchpadプールを監視する

次のNode.jsスクリプトは、本番環境でEnhanced WebSocketsを使用する方法を示すシンプルな例です。transactionSubscribeを使用してRaydiumのLaunchpadプログラムをサブスクライブし、ログ解析によって正常に初期化されたプールを抽出します。

コード
import WebSocket from 'ws';

const API_KEY = process.env.HELIUS_API_KEY; // Set your API key as an env var
const WS_URL = `wss://atlas-mainnet.helius-rpc.com/?api-key=${API_KEY}`;
const
RAYDIUM_LAUNCHPAD_PROG
= '
LanMV9sAd7wArD4vJFi2qDdfnVhFxYSUg6eADduJ3uj
';

const ws = new WebSocket(WS_URL);

ws.on('open', () => {
  console.log('Connected to LaserStream-Powered Enhanced WebSockets!');
  ws.send(JSON.stringify({
    jsonrpc: '2.0',
    id: 1,
    method: 'transactionSubscribe',
    params: [
      {
        failed: false,
        accountInclude: [
RAYDIUM_LAUNCHPAD_PROG
]
      },
      {
        commitment: 'confirmed',
        encoding: 'jsonParsed',
        transactionDetails: 'full',
        maxSupportedTransactionVersion: 0
      }
    ]
  }));

  // Optional heartbeat ping
  setInterval(() => {
    if (ws.readyState === WebSocket.OPEN) {
      ws.send(JSON.stringify({ jsonrpc: '2.0', id: Date.now(), method: 'ping' }));
    }
  }, 30000);
});

ws.on('message', (data) => {
  try {
    const payload = JSON.parse(data.toString());
    const result = payload.params?.result;
    if (!result) return;

    // Filter for init logs
    const logs = result.transaction.meta.logMessages || [];
    if (!logs.some(log => log.includes('Instruction: Initialize'))) return;

 const keys = result.transaction.transaction.message.accountKeys.map(k => k.pubkey);
    console.table({
      Signature: result.signature,
      Creator: keys[1],  // From IDL: accounts[1] is creator
      BaseMint: keys[7], // From IDL: base_mint is around index 7 in initialize accounts
      Slot: result.slot
    });

  } catch (err) {
    console.error('Message parse error:', err);
  }
});

ws.on('error', (err) => console.error('WebSocket error:', err));
ws.on('close', () => {
  console.log('Disconnected');
});

上記のコードは次のコマンドで実行します。

コード
export HELIUS_API_KEY=your-api-key-here
node raydium-launchpad-stream.js

このスクリプトは、新しくローンチされたプールの一覧をコンソールにストリーミングします。高負荷時でも欠損なく配信されます。

料金と使用量の計測

レイテンシと信頼性への継続的な投資の一環として、2025年10月16日以降、新しいプランではEnhanced WebSocketsをLaserStreamと同じレートで計測します(ストリーミングデータ0.1 MBあたり3クレジット)。

Professionalプランでは、固定料金で追加データを購入できます。追加データはEnhanced WebSocketsまたはLaserStreamのデータストリーミングに利用できます。

既存のプランをご利用の場合、料金、上限、請求方法は一切変更されません。対応は不要です。 

標準WebSocketsに変更はなく、Freeプランと有料プランの両方で利用できます。

今すぐストリームをレベルアップ

信頼性、パフォーマンス、シンプルさを備えたストリームが、ビジネスの成長に合わせてスケールします。今すぐEnhanced WebSocketsで開発を始めましょう。サインアップしてAPIキーを取得し、フロントエンドで高い信頼性を体験してください。

よりスマートにストリーミングし、より速くイノベーションを実現しましょう。

Heliusを購読

Solana開発の最新情報や新しい記事の公開通知を受け取れます