前提条件: 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としてラベル付けする — 分析パターンについては トランザクションデータのデコード を参照してください。 - ロール統計をデータベースに永続化 する(Postgres, Redis, ClickHouse)インメモリの
Set/ カウンターの代わりに使用します。 - しきい値に達した際にアラート を設定する — 大規模な手数料支払者、突然のボリュームスパイク、新しいボンディングカーブアカウント。
- 起動時に見逃した活動を再生 するには、
SubscribeRequestにfromSlotを設定します(過去24時間まで — 履歴再生 を参照)。 - スロット & ブロックモニタリングと組み合わせて ブロックレベルでのコンテキストを追加します。
次のステップ
トランザクションモニタリング
このスクリプトが使用する一般的なトランザクションフィルタリングパターン。
トランザクションデータのデコード
バイナリトランザクションペイロードを読みやすい Solana トランザクションに解析します。
アカウントサブスクリプション
特定のアカウント状態の変更をフィルターで監視します。
履歴再生
開始スロットから過去24時間の Pump.fun アクティビティを再生します。