1
Look Up the Program
推測した命令名は、フィルターが何にも一致しないままになる最も一般的な原因です。まず カタログ名よりもプログラムのアドレスを優先する方がよいです。同じ名前を共有するカタログエントリが複数存在することがあり、名前のルックアップはプログラムの古いバージョンに解決されることがあります。
describeProgram を呼び出し、マッチャーが比較する正確な名前を取得してください。これは現在 wss://fs-beta.helius-rpc.com/?api-key=<API_KEY> でのみ利用できるため、サブスクリプション接続ではなく、そちらに送信してください。Request
Response
routeとshared_accounts_routeは、木星v6スワップの大部分をカバーする2つの命令なので、それらにフィルターを設定します。2
フィルターを作成する
プログラムID、前のステップの命令名、監視するウォレットを組み合わせます。フィールドはANDで組み合わされるため、このフィルターはウォレットのSOLアカウントに関わるルート命令に一致します。
accounts.rolesは、user_transfer_authorityを命令中のウォレットの正確な位置に固定し、accounts.includeだけよりも厳密です。単なるアドレスの一致では、命令の他の場所で無関係なアカウントとしてウォレットが現れることもあります。役割名は正確に一致するため、describeProgramのrolesリストからコピーし、推測しないでください。includeCpi: true(デフォルト)はそのままにしておいてください。スワップの実際のトークン動きは内側の命令で発生します。3
購読し、通知を処理する
フィルターを使って購読を開き、次に一致した命令のデコードされた引数を読みます。
matchedIndexes に該当する指示にのみ注目し、トランザクション内の他のすべてはスキップします。読み取る前に decoded が存在することを確認してください。インデックスされていないプログラムバージョンのルート指示は、decoded: null と生のフィールドを伴って到着します。次のステップ
フィルターフィールドのリファレンス
すべてのフィルターフィールド、オプション、および制限。
再接続の処理
切断やデプロイを超えて、この購読を生かし続けます。