Skip to main content
LaserStream SDK を使用して、すべての Pump.fun アカウントの更新とトランザクションをリアルタイムでストリームします。このページでは、エンドツーエンドで実行できる完全な TypeScript スクリプトを説明します:各トランザクションが着地するたびに印刷し、1分ごとにロール統計(スループット、ユニークな手数料支払者、SOLでの総手数料)を報告し、再接続を自動で保持します。 これは、取引ボット、分析ダッシュボード、アラートパイプラインのような Pump.fun の継続的な可視性を必要とするものの有用な出発点です。データの形を探求し、その上に何か特化されたものを構築することもできます。
前提条件: Helius API key (Mainnet LaserStream 用のビジネスまたはプロフェッショナルプラン)と Node.js 18+。アカウントサブスクリプション と トランザクションモニタリング に精通していると役立ちますが、必須ではありません。

セットアップ

新しいプロジェクトを作成し、SDK + bs58 (トランザクション署名をデコードするために使用)をインストールし、APIキーを設定します:
このスクリプトが実行される場所に最も近いエンドポイントを選択します — LaserStream 地域を参照してください。

スクリプト

これを index.ts として保存し、npx ts-node index.ts を実行します:

スクリプトの機能

一つのサブスクリプション、二つのフィルターブロック

一つの subscribe(...) 呼び出しには、二つの名前付きフィルタグループがあります:
  • accounts フィルターは、Pump.fun プログラムによって所有されるすべてのアカウント(ボンディングカーブ、ミント状態など)を、そのデータが変更されるたびに受け取ります。
  • transactions フィルターは、Pump.fun プログラムと相互作用するすべてのトランザクションを受け取ります。vote: false, failed: false フラグは、処理される前に投票や失敗したトランザクションを取り除きます。
どちらも単一の gRPC ストリームを介して到着するため、SDK は管理する接続が一つだけです。万が一切断されても、SDK は自動的に再接続し、両方のフィルターからの更新を受け取り続けます。

生データの読み込み

ペイロード内のいくつかの値は、使いやすくするために少し変換が必要です:
  • tx.signature は Buffer です。これを bs58.encode(...) を通じて実行すると、エクスプローラーや getTransaction 応答で見る base58 署名が得られます。
  • tx.meta.fee は u64 が文字列として格納されており、JavaScriptでの計算における精度の損失を防ぐためにNumber.MAX_SAFE_INTEGER より大きな値を保持します。計算を行う前に Number(...) でこれをラップします。同じ文字列-対-u64 の規則は、複数のブロックレベルのフィールドにも適用されます — 完全なデータ形状については スロット & ブロックモニタリング を参照してください。

ロール統計

setInterval は、60秒ごとにスナップショットを印刷します:総取引、成功と失敗の比率、スループット、ユニークな手数料支払者、SOLでの総手数料。スクリプト終了前に最後のスナップショットを取得するには、Ctrl+C を押します。

スクリプトの拡張

さらに進めるための方向性:
  • 命令ディスクリミネータをデコードして、取引を buy / sell / create として分類します。解析パターンについては、トランザクションデータのデコードを参照してください。
  • ローリング統計をインメモリの Set / カウンターではなく、データベース(Postgres、Redis、ClickHouse)に永続化します。
  • 高額な手数料支払者、取引量の急増、新しいボンディングカーブアカウントなど、しきい値に基づいてアラートを設定します。
  • SubscribeRequest に fromSlot を設定し、起動時に見逃したアクティビティをリプレイします(最大48時間前まで。履歴リプレイを参照してください)。
  • ブロックレベルのコンテキストを得るために、スロットとブロックの監視と組み合わせます。
  • プログラム全体ではなく、1つのトークンを追跡します。ミントを accountInclude に指定し、トランザクションフィルターで matchMints: true を設定すると、そのトークンのすべての転送、スワップ、ミント、バーンを受信できます(トークンミントのフィルタリングを参照してください)。

次のステップ

トランザクションモニタリング

このスクリプトが使用する一般的なトランザクションフィルタリングパターン。

トランザクションデータのデコード

バイナリトランザクションペイロードを読みやすい Solana トランザクションに解析します。

アカウントサブスクリプション

特定のアカウント状態の変更をフィルターで監視します。

履歴再生

開始スロットから過去24時間の Pump.fun アクティビティを再生します。