> ## 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.

# Giao dịch bằng Preconfirmations

> Phản ứng với các giao dịch Solana trước khi chúng được ghi nhận: đăng ký các bộ lọc preconfSubscribe, giải mã payload nhị phân và hành động bằng Sender Max.

[Preconfirmations](/docs/vi/pre-confirmations/overview) truyền phát các giao dịch trước khi chúng được chia thành shred — Helius gửi thông tin xác nhận trước ngay khi leader thực thi giao dịch, cùng với trạng thái thực thi. Hướng dẫn này xây dựng một trình lắng nghe để theo dõi tài khoản mục tiêu, giải mã từng giao dịch và phản ứng bằng [Sender Max](/docs/vi/sending-transactions/sender-max).

<Tip>
  Preconfirmations yêu cầu [gói Professional trở lên](/docs/vi/billing/plans) và có chi phí 10 credit cho mỗi thông báo.
</Tip>

## Giới hạn phạm vi luồng trước khi kết nối

Một `preconfSubscribe` không được lọc sẽ cung cấp mọi giao dịch với chi phí 10 credit cho mỗi giao dịch, vì vậy hãy lọc ở phía máy chủ và chỉ trả phí cho những giao dịch bạn thực sự xử lý.

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

Ba bộ lọc đáp ứng hầu hết các trình lắng nghe giao dịch:

* `failed: false` loại bỏ các giao dịch đã được xác định là bị hoàn tác, vì bạn không cần chạy đua với chúng.
* `regionInclude` ghim luồng vào [khu vực](/docs/vi/pre-confirmations/preconf-subscribe#lọc-theo-vị-trí) gần hạ tầng của bạn nhất, để bước nhảy liên vùng không làm mất lợi thế ban đầu.
* `accountInclude` khớp với mọi giao dịch tham chiếu đến mục tiêu của bạn: ví, pool AMM, chương trình, v.v. Helius phân giải các bảng tra cứu địa chỉ ở phía máy chủ, vì vậy bộ lọc vẫn khớp ngay cả khi tài khoản được tải qua ALT.

## Kết nối, đăng ký và giải mã

`preconfSubscribe` được cung cấp từ endpoint Gatekeeper (`wss://beta.helius-rpc.com`), còn thông báo được gửi dưới dạng khung nhị phân chứ không phải JSON.

Mỗi khung gồm một tiền tố cố định dài 18 byte, theo sau là giao dịch được tuần tự hóa bằng bincode:

```javascript listener.js theme={"system"}
const WebSocket = require('ws');
const { VersionedTransaction } = require('@solana/web3.js');

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

ws.on('open', () => {
  ws.send(JSON.stringify({
    jsonrpc: '2.0',
    id: 1,
    method: 'preconfSubscribe',
    params: [{
      failed: false,
      regionInclude: ['ewr'],
      accountInclude: ['TARGET_WALLET_OR_PROGRAM']
    }]
  }));
  setInterval(() => ws.ping(), 30_000); // keep the connection alive
});

ws.on('message', (data, isBinary) => {
  if (!isBinary) {
    const msg = JSON.parse(data.toString());
    if (msg.id === 1) console.log('Subscribed, ID:', msg.result);
    return;
  }

  // version (u8) | slot (u64 LE) | tx_index (u64 LE) | status (u8) | bincode(VersionedTransaction)
  const buf = Buffer.from(data);
  if (buf.readUInt8(0) !== 1) return; // unknown schema version; update your decoder
  const slot = buf.readBigUInt64LE(1);
  const status = buf.readUInt8(17); // 0 = failed, 1 = success, 2 = unknown
  const tx = VersionedTransaction.deserialize(buf.subarray(18));

  onScheduledTransaction({ slot, status, tx });
});

ws.on('error', console.error);
ws.on('close', () => process.exit(1)); // let your supervisor restart and resubscribe
```

Trước tiên, hãy kiểm tra byte phiên bản. Nếu Helius cập nhật định dạng payload, số phiên bản sẽ tăng; việc phân nhánh theo số này giúp bộ giải mã tiếp tục hoạt động. Giao dịch sau khi giải tuần tự cung cấp cho bạn các lệnh, tài khoản và chữ ký.

## Hành động bằng Sender Max

Xác nhận trước chỉ mang lại lợi ích nếu phản ứng của bạn được ghi nhận đầu tiên.

Gửi phản ứng qua [Sender Max](/docs/vi/sending-transactions/sender-max): khoản tip 0,001 SOL đi vào bộ đệm tip ưu tiên và được định tuyến qua mọi đường truyền tốc độ cao:

```javascript theme={"system"}
async function onScheduledTransaction({ slot, status, tx }) {
  if (!strategy.shouldReact(tx)) return;

  // strategy is your own code: it decides whether to react and returns a
  // signed, base64-encoded transaction that includes the tip and priority fee
  const reaction = await strategy.buildTransaction(tx);
  await fetch('http://ewr-sender.helius-rpc.com/fast', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      jsonrpc: '2.0',
      id: Date.now().toString(),
      method: 'sendTransaction',
      params: [reaction, { encoding: 'base64', skipPreflight: true, maxRetries: 0 }]
    })
  });
}
```

Hãy giữ trình xử lý này ngắn gọn. Ra quyết định rồi gửi, đồng thời chuyển việc ghi log, hạch toán và đối soát ra khỏi luồng tiếp nhận. Xem [Đưa giao dịch lên chuỗi bằng Sender](/docs/vi/sending-transactions/guides/land-trades-with-sender) để tìm hiểu toàn bộ vòng lặp gửi, bao gồm làm nóng kết nối và ước tính phí.

## Xác nhận giao dịch được ghi nhận và dự kiến có khoảng trống

Xác nhận trước chỉ cung cấp thông tin sớm. Giao dịch chưa được ghi nhận và vẫn có thể thất bại hoặc bị loại bỏ, vì vậy cần tuân theo hai quy tắc:

* Xác nhận bằng các bước kiểm tra commitment tiêu chuẩn (`getSignatureStatuses` hoặc luồng có commitment `processed`) trước khi coi giao dịch quan sát được hoặc phản ứng của bạn là cuối cùng.
* Hãy dự kiến có khoảng trống. Phạm vi bao phủ tỷ lệ thuận với lượng stake chuyển tiếp đến Helius, vì vậy một số slot không tạo ra thông báo. Đây là [hành vi dự kiến](/docs/vi/pre-confirmations/overview#phạm-vi-phủ), không phải kết nối bị ngắt; ping keepalive giúp phân biệt hai trường hợp này. Hãy đăng ký lại khi kết nối đóng.

## Hướng dẫn liên quan

<CardGroup cols={2}>
  <Card title="preconfSubscribe API reference" icon="code" href="/docs/vi/pre-confirmations/preconf-subscribe">
    Ngữ nghĩa đầy đủ của bộ lọc, mã khu vực và bố cục payload nhị phân
  </Card>

  <Card title="Trade on Preprocessed Transactions" icon="bolt" href="/docs/vi/preprocessed-transactions/guides/trade-on-preprocessed">
    Phạm vi bao phủ trước khi thực thi với chi phí 0,1 credit cho mỗi thông báo, áp dụng cho mọi gói trả phí
  </Card>
</CardGroup>
