前提条件: Helius API key (Mainnet LaserStream 用のビジネスまたはプロフェッショナルプラン)と Node.js 18+。アカウントサブスクリプション と トランザクションモニタリング に精通していると役立ちますが、必須ではありません。
セットアップ
新しいプロジェクトを作成し、SDK +bs58 (トランザクション署名をデコードするために使用)をインストールし、APIキーを設定します:
スクリプト
これをindex.ts として保存し、npx ts-node index.ts を実行します:
スクリプトの機能
一つのサブスクリプション、二つのフィルターブロック
一つのsubscribe(...) 呼び出しには、二つの名前付きフィルタグループがあります:
accountsフィルターは、Pump.fun プログラムによって所有されるすべてのアカウント(ボンディングカーブ、ミント状態など)を、そのデータが変更されるたびに受け取ります。transactionsフィルターは、Pump.fun プログラムと相互作用するすべてのトランザクションを受け取ります。vote: false, failed: falseフラグは、処理される前に投票や失敗したトランザクションを取り除きます。
生データの読み込み
ペイロード内のいくつかの値は、使いやすくするために少し変換が必要です: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 アクティビティを再生します。