> ## Documentation Index
> Fetch the complete documentation index at: https://www.helius.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# preconfSubscribeの使用方法

> preconfSubscribe WebSocketメソッドを使用して、Solanaのスケジュール済みトランザクションを可能な限り低いレイテンシでストリームします。購読して、ペイロードをデコードし、トランザクションが確定する前に反応します。

<Tip>
  **[Sender Max](/ja/sending-transactions/sender-max)（最小ヒント: 0.001 SOL）を使用して、事前確認で行動しましょう。** トランザクションを最初に確定することで、事前確認が報われます。Sender Maxを最初から使用することで、事前確認のすべての利点を活用できます。
</Tip>

## `preconfSubscribe`とは何ですか？

`preconfSubscribe`は、[事前確認](/ja/pre-confirmations/overview)をストリームするHelius WebSocketメソッドです。これは、最も低レイテンシのトランザクションシグナルであり、スケジュールされたトランザクションステージで提供され、シュレッドされる前です。

<Note>
  ストリームは連続的ではありません。Heliusに転送されるステークの共有に応じてカバレッジがスケールするため、メッセージのないスロットが存在します—これをうまく処理してください。[カバレッジ](/ja/pre-confirmations/overview#coverage)を参照してください。
</Note>

`preconfSubscribe`は、`wss://beta.helius-rpc.com`から提供されます—スケジュールされたトランザクションのソースであるHelius [Gatekeeper](/ja/gatekeeper/overview)エンドポイント—ではなく、`mainnet.helius-rpc.com`です。クエリパラメーターとしてAPIキーで認証してください。

```
wss://beta.helius-rpc.com/?api-key=<API_KEY>
```

<Note>
  `beta`ホスト名は[Gatekeeper](/ja/gatekeeper/overview)の展開に関連しており、事前確認の成熟度には関連していません。事前確認は最初にGatekeeperエンドポイントで開始され、HeliusがトラフィックをGatekeeperに移行するにつれて標準のエンドポイントになります。
</Note>

## 購読

`preconfSubscribe`メソッドを使用してJSON-RPCリクエストを送信します。サーバーは購読IDとともに応答し、スケジュールされたトランザクションごとに通知をストリームします。オプションの[フィルター](#filtering)を最初の`params`要素として渡すことで、マッチするトランザクションのみを受け取ることができます。`params`を省略すると、フルストリームを受け取ります。

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "preconfSubscribe"
}
```

### 購読応答

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "result": 24040,
  "id": 1
}
```

`result`を保存します—これは[購読解除](#unsubscribing)に使用する購読IDです。この確認後、通知はバイナリフレームとしてストリームされます（以下参照）。

## フィルタリング

デフォルトでは、`preconfSubscribe`はすべてのスケジュールされたトランザクションをストリームします。ストリームを絞り込むには、フィルターオブジェクトを`params`の最初の要素として渡します。フィルタリングはサーバー側で行われるため、必要なトランザクションのみを受け取り、支払いもその分のみに対して行われます。

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "preconfSubscribe",
  "params": [
    {
      "failed": false,
      "regionInclude": ["ewr", "fra"],
      "accountInclude": ["9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM"],
      "accountExclude": ["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"],
      "accountRequired": ["11111111111111111111111111111111"]
    }
  ]
}
```

すべてのフィールドはオプションです—フィールドが欠けている場合、その述語に「制約なし」となり、空のフィルター（または`params`がない場合）はすべてのトランザクションにマッチします。

| フィールド             | タイプ        | セマンティクス                                                                              |
| ----------------- | ---------- | ------------------------------------------------------------------------------------ |
| `failed`          | `boolean`  | 失敗した（取り消された）トランザクションを削除します。成功およびステータス不明のトランザクションは通過します。フィールドが省略されるとすべてのステータスが保持されます。 |
| `regionInclude`   | `string[]` | 空でない場合、トランザクションは**これらのいずれかの**[リージョン](#location-filtering)から発信されている必要があります。           |
| `accountInclude`  | `string[]` | 空でない場合、トランザクションはこれらのアカウントの**少なくとも1つ**を参照する必要があります。                                   |
| `accountExclude`  | `string[]` | トランザクションがこれらのアカウントの**いずれか**を参照している場合、削除されます。これは、`accountInclude`よりも優先されます。           |
| `accountRequired` | `string[]` | トランザクションはこれらのアカウントすべてを参照する必要があります。                                                   |

<Note>
  現在はトランザクションの**静的**なアカウントキーがマッチされています。v0アドレスルックアップテーブル（ALT）から読み込まれたアカウントはまだ解決されていないため、ALTアカウントに対するフィルタリングはマッチしません。ALTサポートは近日中に追加される予定です。
</Note>

フィルタールール:

* すべての述語は一緒にANDされ、順次評価されます: `regionInclude` → `accountExclude` → `accountRequired` → `accountInclude`。
* アカウントはbase58でエンコードされた公開鍵です。無効な値はJSON-RPCエラー `-32602`（無効なパラメータ）を返します。
* 各アカウントリストは**500**エントリに制限されています。

### ロケーションフィルタリング

特定のHeliusリージョンから発信されたトランザクションのみを受信するには、`regionInclude`を使用します。1つ以上のリージョンコードを渡してください。トランザクションの発信元リージョンがこれらのいずれかに一致する場合、そのトランザクションは許可されます。

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "preconfSubscribe",
  "params": [{ "regionInclude": ["ewr", "fra"] }]
}
```

有効なリージョンコード:

| コード   | 場所        |
| ----- | --------- |
| `slc` | ソルトレイクシティ |
| `fra` | フランクフルト   |
| `lon` | ロンドン      |
| `pit` | ピッツバーグ    |
| `sgp` | シンガポール    |
| `ewr` | ニューアーク    |
| `tyo` | 東京        |
| `ams` | アムステルダム   |
| `dal` | ダラス       |
| `dub` | ダブリン      |
| `mia` | マイアミ      |
| `lax` | ロサンゼルス    |
| `iad` | アッシュバーン   |
| `sea` | シアトル      |

<Note>
  `regionInclude`が設定されている場合、リージョン情報を持たないトランザクションは削除されます。認識されないリージョンコードはJSON-RPCエラー`-32602`（無効なパラメータ）を返します。
</Note>

## 通知ペイロード

通知は**バイナリ**WebSocketフレームとして配信されます（JSONではありません）。各フレームは単一のスケジュール済みトランザクションを運ぶパックされたバイトレイアウトです:

| バイト  | フィールド         | タイプ                             | 説明                                                                                              |
| ---- | ------------- | ------------------------------- | ----------------------------------------------------------------------------------------------- |
| 0    | `version`     | `u8`                            | ペイロードのスキーマバージョン。現在は`1`です。                                                                       |
| 1–8  | `slot`        | `u64`（リトルエンディアン）                | トランザクションがスケジュールされているスロット。                                                                       |
| 9–16 | `tx_index`    | `u64`（リトルエンディアン）                | スロット内のトランザクションのインデックス。                                                                          |
| 17   | `status`      | `u8`                            | トランザクションのステータス: `0` = 失敗, `1` = 成功, `2` = 不明です。実行ステータスはベストエフォートでバリデーターによって報告され—無効なときに`2`が返されます。 |
| 18+  | `transaction` | `bincode(VersionedTransaction)` | スケジュールされたトランザクション、bincodeでシリアライズ済み。                                                             |

フィールドを順番に読み取り、その後残りのバイトを[`bincode`](https://docs.rs/bincode)でデシリアライズし、命令、アカウント、署名を読み取ります。

<Warning>
  **常にまず`version`バイトを読み取り確認してください。** 現在は`1`です。Heliusがペイロード形式を更新する必要がある場合、バージョンがインクリメントされます—これに従って、デコーダーがスキーマ変更にわたって動作し続けるように分岐してください。
</Warning>

<Note>
  事前確認は初期シグナルであり、保証ではありません。トランザクションはまだオンチェーンに記録されておらず、失敗したりドロップされる可能性があります。最終的なものとして扱う前に、標準のコミットメントチェックを通して確定を確認してください。
</Note>

## 例

```javascript theme={"system"}
const WebSocket = require('ws');

const ws = new WebSocket('wss://beta.helius-rpc.com/?api-key=<API_KEY>');

ws.on('open', () => {
  ws.send(JSON.stringify({
    jsonrpc: '2.0',
    id: 1,
    method: 'preconfSubscribe'
    // Optional: only successful txs from EWR/FRA touching a given account
    // params: [{ failed: false, regionInclude: ['ewr', 'fra'], accountInclude: ['9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM'] }]
  }));

  // Keep the connection alive
  setInterval(() => ws.ping(), 30_000);
});

ws.on('message', (data, isBinary) => {
  // The subscribe acknowledgement arrives as a JSON text frame
  if (!isBinary) {
    const msg = JSON.parse(data.toString());
    if (msg.id === 1) console.log('Subscribed, ID:', msg.result);
    return;
  }

  // Notifications arrive as binary frames:
  // version (u8) | slot (u64 LE) | tx_index (u64 LE) | status (u8) | bincode(VersionedTransaction)
  const buf = Buffer.from(data);
  const version = buf.readUInt8(0); // currently 1 — branch on this if it changes
  if (version !== 1) return; // unknown schema version; update your decoder
  const slot = buf.readBigUInt64LE(1);
  const txIndex = buf.readBigUInt64LE(9);
  const status = buf.readUInt8(17); // 0 = failed, 1 = success, 2 = unknown
  const txBytes = buf.subarray(18); // bincode-serialized VersionedTransaction

  console.log('Scheduled transaction:', { version, slot, txIndex, status, bytes: txBytes.length });
  // Deserialize txBytes (bincode) into a VersionedTransaction with your Solana tooling
});

ws.on('error', console.error);
ws.on('close', () => process.exit(1));
```

## 購読解除

通知の受信を停止するには、`preconfUnsubscribe`を購読IDを使って呼び出します。このIDは`preconfSubscribe`から返されます。

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "preconfUnsubscribe",
  "params": [24040]
}
```

```json theme={"system"}
{
  "jsonrpc": "2.0",
  "result": true,
  "id": 2
}
```

## 価格設定

事前確認には**プロフェッショナルプラン以上**が必要で、メッセージごとに**10クレジット**のコストがかかります。これはストリームされたトランザクションごとに1つのメッセージです。詳細については[クレジット](/ja/billing/credits)を参照してください。

<Note>
  事前確認は新しい製品であり、価格は変更される可能性があります。
</Note>

## 関連情報

<CardGroup cols={2}>
  <Card title="事前確認の概要" icon="bolt" href="/ja/pre-confirmations/overview">
    事前確認が何であり、バリデータパイプラインのどこに位置するか。
  </Card>

  <Card title="transactionSubscribe" icon="tower-broadcast" href="/ja/rpc/websocket/transaction-subscribe">
    豊富なフィルタリング機能を備えた確認済みコミットメントトランザクションをストリームします。
  </Card>
</CardGroup>
