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

# Sender Max: Đưa giao dịch Solana vào block nhanh nhất

> Gửi các giao dịch và bundle Solana qua cấp có tốc độ đưa vào block nhanh nhất của Helius Sender — sử dụng mọi tuyến định tuyến cho mỗi lần gửi, với mức tip tối thiểu 0.001 SOL.

## Tổng quan

<Note>
  **Cập nhật giá:** Sender Max hiện áp dụng mức tip tối thiểu **0.001 SOL**. Mức tip này
  đưa giao dịch của bạn vào bộ đệm tip ưu tiên để đứng đầu block — tip nhiều hơn để được đưa vào block trước.
</Note>

Sender Max là cấp [Helius Sender](/docs/vi/sending-transactions/sender) có hiệu suất cao nhất, được xây dựng cho các nội dung gửi cần được đưa vào block trước đối thủ. Cấp này định tuyến nội dung gửi của bạn qua mọi tuyến tốc độ cao hiện có và đưa nội dung đó vào một bộ đệm tip ưu tiên, trong đó ưu tiên các mức tip cao nhất.

Sender Max xử lý cả **giao dịch đơn lẻ và bundle**. Cả hai đều sử dụng mọi tuyến (Helius, Jito, Harmonic, Rakurai, v.v.) — điểm khác biệt duy nhất là payload: gửi một giao dịch bằng `sendTransaction` hoặc tối đa bốn giao dịch bằng `sendBundle`.

Cấp này yêu cầu mức tip tối thiểu **0.001 SOL**. Để tối ưu chi phí khi gửi qua một tuyến duy nhất, hãy sử dụng cấp [chỉ SWQOS](/docs/vi/sending-transactions/sender-swqos-only).

<CardGroup cols={2}>
  <Card title="Fastest Landing" icon="trophy">
    Được định tuyến qua mọi tuyến tốc độ cao để có xác suất
    được đưa vào block cao nhất
  </Card>

  <Card title="Priority Tip Buffer" icon="arrow-up-wide-short">
    Nội dung gửi của bạn được đưa vào bộ đệm tip ưu tiên, nơi ưu tiên những
    nội dung có mức tip cao nhất — tip nhiều hơn để được đưa vào block trước
  </Card>

  <Card title="No Credits" icon="coins">
    Khả dụng trên mọi gói mà không tiêu tốn tín dụng API
  </Card>

  <Card title="0.001 SOL Minimum Tip" icon="dollar-sign">
    Mức tip tối thiểu cần thiết để vào bộ đệm tip ưu tiên và sử dụng mọi
    tuyến định tuyến
  </Card>
</CardGroup>

## Cách hoạt động

Khi tip ít nhất **0.001 SOL**, nội dung gửi của bạn — dù là một giao dịch đơn lẻ hay một bundle — sẽ được định tuyến qua mọi tuyến tốc độ cao hiện có và đưa vào bộ đệm tip ưu tiên. Bộ đệm ưu tiên các mức tip cao nhất, vì vậy việc tăng tip cao hơn mức tối thiểu sẽ cải thiện khả năng được đưa vào block trước.

<Note>
  Các mức tip dưới 0.001 SOL không được đưa vào bộ đệm tip ưu tiên — chúng được gửi theo
  khả năng tốt nhất qua ít tuyến hơn. Để gửi với độ trễ thấp ổn định ở mức
  tip thấp hơn, hãy sử dụng cấp [chỉ SWQOS](/docs/vi/sending-transactions/sender-swqos-only)
  (0.000005 SOL).
</Note>

## Khi nào nên sử dụng Max

<CardGroup cols={2}>
  <Card title="Good fit" icon="circle-check">
    Các tài khoản có mức cạnh tranh cao, đợt ra mắt token cạnh tranh, hoạt động thanh lý và mọi
    giao dịch mà việc được đưa vào block trước xứng đáng với mức tip cao hơn.
  </Card>

  <Card title="Consider SWQOS-only instead" icon="dollar-sign" href="/docs/vi/sending-transactions/sender-swqos-only">
    Các luồng nhạy cảm về chi phí hoặc có khối lượng lớn, trong đó một tuyến nhanh duy nhất có thể đưa giao dịch vào block một cách ổn định.
  </Card>
</CardGroup>

## Yêu cầu

Mỗi nội dung gửi qua Sender Max phải bao gồm:

* **Tip**: Một giao dịch chuyển SOL trị giá ít nhất **0.001 SOL** đến một [tài khoản tip](/docs/vi/sending-transactions/sender#yêu-cầu) được chỉ định. Trong một bundle, ít nhất một giao dịch phải chứa tip.
* **Phí ưu tiên**: Một chỉ thị về giá đơn vị tính toán với phí ưu tiên ít nhất **5,000 lamports**. Xem [Phí ưu tiên](#phí-ưu-tiên).

Việc bỏ qua kiểm tra trước khi thực thi (`skipPreflight: true`) là tùy chọn nhưng được khuyến nghị — các bước kiểm tra trước khi thực thi làm tăng độ trễ.

<Warning>
  Các giao dịch thiếu tip hoặc phí ưu tiên sẽ bị từ chối. Đối với
  các quy tắc dành riêng cho bundle, hãy xem [Bundle](#bundle).
</Warning>

## Phí ưu tiên

Mỗi giao dịch phải bao gồm phí ưu tiên ít nhất **5,000 lamports** và chúng tôi khuyến nghị mức **ít nhất 10,000 lamports** để được đưa vào block ổn định hơn. Tip đưa giao dịch của bạn vào bộ đệm tip ưu tiên, còn phí ưu tiên nâng mức ưu tiên của giao dịch trong bộ lập lịch của trình xác thực — kết hợp hai yếu tố này sẽ tối đa hóa khả năng giao dịch được đưa vào block.

Đặt phí ưu tiên bằng một chỉ thị về giá đơn vị tính toán. Tổng phí ưu tiên bằng giá đơn vị tính toán (tính bằng micro-lamport) nhân với giới hạn đơn vị tính toán:

```typescript theme={"system"}
import { ComputeBudgetProgram } from "@solana/web3.js";

ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 200_000 });
```

Sử dụng [Helius Priority Fee API](/docs/vi/priority-fee-api) để nhận đề xuất phí theo thời gian thực dựa trên điều kiện mạng hiện tại.

## Endpoint

Sử dụng endpoint HTTPS toàn cầu cho frontend hoặc endpoint HTTP khu vực gần máy chủ nhất cho backend.

**Frontend / trình duyệt (HTTPS toàn cầu):**

```
https://sender.helius-rpc.com/fast
```

**Backend / máy chủ (HTTP khu vực):**

```
http://slc-sender.helius-rpc.com/fast   # Salt Lake City
http://ewr-sender.helius-rpc.com/fast   # Newark
http://lon-sender.helius-rpc.com/fast   # London
http://fra-sender.helius-rpc.com/fast   # Frankfurt
http://ams-sender.helius-rpc.com/fast   # Amsterdam
http://sg-sender.helius-rpc.com/fast    # Singapore
http://tyo-sender.helius-rpc.com/fast   # Tokyo
```

Xem [tài liệu tham khảo về endpoint của Sender](/docs/vi/sending-transactions/sender#endpoint) để biết thông tin về duy trì kết nối sẵn sàng và các chi tiết khác.

<Tip>
  Bạn muốn tránh các trình xác thực có liên quan đến tấn công sandwich? Hãy thêm
  [`mev-protect=true`](/docs/vi/sending-transactions/mev-protect) vào URL endpoint —
  tùy chọn này hoạt động với cả `sendTransaction` và `sendBundle`:
  `https://sender.helius-rpc.com/fast?mev-protect=true`.
</Tip>

## Ví dụ mã

<Tabs>
  <Tab title="@solana/web3.js">
    ```typescript [expandable] theme={"system"}
    import { 
      Connection, 
      TransactionMessage,
      VersionedTransaction,
      SystemProgram, 
      PublicKey,
      Keypair,
      LAMPORTS_PER_SOL,
      ComputeBudgetProgram
    } from '@solana/web3.js';
    import bs58 from 'bs58';

    const PRIV_B58 = 'Your Private Key';
    const RECIPIENT = 'Recipient Address';
    const HELIUS_API_KEY = 'Your API Key';
    const TIP_ACCOUNTS = [
      "4ACfpUFoaSD9bfPdeu6DBt89gB6ENTeHBXCAi87NhDEE",
      "D2L6yPZ2FmmmTKPgzaMKdhu6EWZcTpLy1Vhx8uvZe7NZ",
      "9bnz4RShgq1hAnLnZbP8kbgBg1kEmcJBYQq3gQbmnSta",
      "5VY91ws6B2hMmBFRsXkoAAdsPHBJwRfBht4DXox3xkwn",
      "2nyhqdwKcJZR2vcqCyrYsaPVdAnFoJjiksCXJ7hfEYgD",
      "2q5pghRs6arqVjRvT5gfgWfWcHWmw1ZuCzphgd5KfWGJ",
      "wyvPkWjVZz1M8fHQnMMCDTQDbkManefNNhweYk5WkcF",
      "3KCKozbAaF75qEU33jtzozcJ29yJuaLJTy2jFdzUY8bT",
      "4vieeGHPYPG2MmyPRcYjdiDmmhN3ww7hsFNap8pVN3Ey",
      "4TQLFNWK8AovT1gFvda5jfw2oJeRMKEmw7aH6MGBJ3or"
    ];

    async function sendWithSenderMax(
      keypair: Keypair,
      recipientAddress: string
    ): Promise<string> {
      const connection = new Connection(
        `https://mainnet.helius-rpc.com/?api-key=${HELIUS_API_KEY}`
      );

      const { value: { blockhash } } = await connection.getLatestBlockhashAndContext('confirmed');

      // Build transaction: priority fee + recipient transfer + 0.001 SOL tip
      const transaction = new VersionedTransaction(
        new TransactionMessage({
          instructions: [
            ComputeBudgetProgram.setComputeUnitLimit({ units: 100_000 }),
            ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 200_000 }),
            SystemProgram.transfer({
              fromPubkey: keypair.publicKey,
              toPubkey: new PublicKey(recipientAddress),
              lamports: 0.001 * LAMPORTS_PER_SOL,
            }),
            SystemProgram.transfer({
              fromPubkey: keypair.publicKey,
              toPubkey: new PublicKey(TIP_ACCOUNTS[Math.floor(Math.random() * TIP_ACCOUNTS.length)]),
              lamports: 0.001 * LAMPORTS_PER_SOL, // Minimum tip to enter the priority tip buffer
            })
          ],
          payerKey: keypair.publicKey,
          recentBlockhash: blockhash,
        }).compileToV0Message()
      );

      transaction.sign([keypair]);

      // Frontend: use the global HTTPS endpoint to avoid CORS issues
      const SENDER_ENDPOINT = 'https://sender.helius-rpc.com/fast';
      // Backend: use the regional HTTP endpoint closest to your servers
      // const SENDER_ENDPOINT = 'http://slc-sender.helius-rpc.com/fast';

      const response = await fetch(SENDER_ENDPOINT, {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({
          jsonrpc: '2.0',
          id: Date.now().toString(),
          method: 'sendTransaction',
          params: [
            Buffer.from(transaction.serialize()).toString('base64'),
            {
              encoding: 'base64',
              skipPreflight: true, // Optional: skip for lower latency
              maxRetries: 0
            }
          ]
        })
      });

      const json = await response.json();
      if (json.error) {
        throw new Error(json.error.message);
      }

      console.log('Transaction sent:', json.result);
      return json.result;
    }

    // Usage
    sendWithSenderMax(Keypair.fromSecretKey(bs58.decode(PRIV_B58)), RECIPIENT);
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={"system"}
    curl "https://sender.helius-rpc.com/fast" \
      -X POST \
      -H "Content-Type: application/json" \
      -d '{
        "jsonrpc": "2.0",
        "id": 1,
        "method": "sendTransaction",
        "params": [
          "BASE64_ENCODED_TRANSACTION",
          {
            "encoding": "base64",
            "skipPreflight": true,
            "maxRetries": 0
          }
        ]
      }'
    ```
  </Tab>
</Tabs>

<Tip>
  Đối với các giao dịch có mức cạnh tranh cao, mức tối thiểu 0.001 SOL khó có thể
  đủ sức cạnh tranh. Hãy đặt mức tip gần với giá trị của giao dịch mà bạn
  muốn đưa vào block — việc đưa giao dịch vào block thành công càng có giá trị với bạn thì
  mức tip càng nên cao. Mức tối thiểu là ngưỡng sàn, không phải mục tiêu.
</Tip>

## Bundle

Bundle chỉ là một loại payload khác mà Sender Max chấp nhận. Gửi tối đa 4 giao dịch đã được ký đầy đủ; chúng sẽ được thực thi nguyên tử (tất cả hoặc không giao dịch nào) theo thứ tự và được đưa vào **cùng bộ đệm tip ưu tiên** như một giao dịch đơn lẻ — bộ đệm ưu tiên các bundle có mức tip cao nhất để được đưa vào block nhanh nhất.

<Warning>
  **Chỉ cung cấp khoản tip Sender 0.001 SOL.** Sender Max định tuyến bundle của bạn
  qua mọi tuyến tốc độ cao và thay bạn thêm mọi khoản tip dành cho từng tuyến — bạn
  không cần thêm tip Jito riêng, sử dụng tài khoản tip Jito hoặc đặt header `jito-region`.
  Những yêu cầu đó chỉ áp dụng cho [bundle
  cơ bản](/docs/vi/sending-transactions/send-bundle).
</Warning>

### Yêu cầu

* **Tối đa 4 giao dịch**, được ký đầy đủ. Chúng được thực thi tuần tự và nguyên tử — nếu bất kỳ giao dịch nào thất bại, toàn bộ bundle sẽ bị từ chối.
* **Tip**: ít nhất một giao dịch phải chuyển tối thiểu **0.001 SOL** đến một [tài khoản tip Sender](/docs/vi/sending-transactions/sender#yêu-cầu) được chỉ định. Đây cũng là khoản tip Sender được dùng cho giao dịch đơn lẻ — Helius thay bạn thêm mọi khoản tip dành cho từng tuyến (bao gồm Jito), vì vậy bạn không cần thêm tip Jito riêng.
* **Phí ưu tiên**: mỗi giao dịch phải bao gồm [phí ưu tiên](#phí-ưu-tiên) ít nhất **5,000 lamports**.

### Gửi

Gửi đến endpoint Sender bằng `method: "sendBundle"`. Sử dụng endpoint HTTPS toàn cầu cho frontend hoặc bất kỳ [endpoint khu vực](#endpoint) nào cho backend — tất cả khu vực Sender đều được hỗ trợ.

<Tabs>
  <Tab title="@solana/web3.js">
    ```typescript [expandable] theme={"system"}
    import { 
      Connection, 
      TransactionMessage,
      VersionedTransaction,
      SystemProgram, 
      PublicKey,
      Keypair,
      LAMPORTS_PER_SOL,
      ComputeBudgetProgram
    } from '@solana/web3.js';
    import bs58 from 'bs58';

    const PRIV_B58 = 'Your Private Key';
    const HELIUS_API_KEY = 'Your API Key';
    const TIP_ACCOUNTS = [
      "4ACfpUFoaSD9bfPdeu6DBt89gB6ENTeHBXCAi87NhDEE",
      "D2L6yPZ2FmmmTKPgzaMKdhu6EWZcTpLy1Vhx8uvZe7NZ",
      "9bnz4RShgq1hAnLnZbP8kbgBg1kEmcJBYQq3gQbmnSta",
      "5VY91ws6B2hMmBFRsXkoAAdsPHBJwRfBht4DXox3xkwn",
      "2nyhqdwKcJZR2vcqCyrYsaPVdAnFoJjiksCXJ7hfEYgD",
      "2q5pghRs6arqVjRvT5gfgWfWcHWmw1ZuCzphgd5KfWGJ",
      "wyvPkWjVZz1M8fHQnMMCDTQDbkManefNNhweYk5WkcF",
      "3KCKozbAaF75qEU33jtzozcJ29yJuaLJTy2jFdzUY8bT",
      "4vieeGHPYPG2MmyPRcYjdiDmmhN3ww7hsFNap8pVN3Ey",
      "4TQLFNWK8AovT1gFvda5jfw2oJeRMKEmw7aH6MGBJ3or"
    ];

    async function sendBundleWithSenderMax(keypair: Keypair): Promise<string[]> {
      const connection = new Connection(
        `https://mainnet.helius-rpc.com/?api-key=${HELIUS_API_KEY}`
      );

      const { value: { blockhash } } = await connection.getLatestBlockhashAndContext('confirmed');

      const tipAccount = new PublicKey(TIP_ACCOUNTS[Math.floor(Math.random() * TIP_ACCOUNTS.length)]);

      // Transaction 1: your instructions + priority fee + the 0.001 SOL Sender tip
      const tx1 = new VersionedTransaction(
        new TransactionMessage({
          instructions: [
            ComputeBudgetProgram.setComputeUnitLimit({ units: 100_000 }),
            ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 200_000 }),
            // ... your instructions here ...
            SystemProgram.transfer({
              fromPubkey: keypair.publicKey,
              toPubkey: tipAccount,
              lamports: 0.001 * LAMPORTS_PER_SOL, // Sender tip — only one tx in the bundle needs it
            })
          ],
          payerKey: keypair.publicKey,
          recentBlockhash: blockhash,
        }).compileToV0Message()
      );
      tx1.sign([keypair]);

      // Transaction 2: more instructions — executes after tx1, atomically
      const tx2 = new VersionedTransaction(
        new TransactionMessage({
          instructions: [
            ComputeBudgetProgram.setComputeUnitPrice({ microLamports: 200_000 }),
            // ... your instructions here ...
          ],
          payerKey: keypair.publicKey,
          recentBlockhash: blockhash,
        }).compileToV0Message()
      );
      tx2.sign([keypair]);

      // Serialize each fully-signed transaction (up to 4) to base64
      const bundle = [tx1, tx2].map((tx) => Buffer.from(tx.serialize()).toString('base64'));

      const response = await fetch('https://sender.helius-rpc.com/fast', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({
          jsonrpc: '2.0',
          id: Date.now().toString(),
          method: 'sendBundle',
          params: [bundle, { encoding: 'base64' }]
        })
      });

      const json = await response.json();
      if (json.error) {
        throw new Error(json.error.message);
      }

      // Track landing by each transaction's signature (see below)
      const signatures = [tx1, tx2].map((tx) => bs58.encode(tx.signatures[0]));
      console.log('Bundle submitted:', signatures);
      return signatures;
    }

    // Usage
    sendBundleWithSenderMax(Keypair.fromSecretKey(bs58.decode(PRIV_B58)));
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={"system"}
    curl "https://sender.helius-rpc.com/fast" \
      -X POST \
      -H "Content-Type: application/json" \
      -d '{
        "jsonrpc": "2.0",
        "id": 1,
        "method": "sendBundle",
        "params": [
          [
            "BASE64_SIGNED_TX_1",
            "BASE64_SIGNED_TX_2"
          ],
          { "encoding": "base64" }
        ]
      }'
    ```
  </Tab>
</Tabs>

### Theo dõi việc đưa vào block

Theo dõi bundle giống như cách bạn theo dõi một giao dịch đơn lẻ — bằng cách chờ chữ ký của từng giao dịch được đưa vào block. Vì bundle có tính nguyên tử, việc xác nhận bất kỳ giao dịch nào cũng có nghĩa là toàn bộ bundle đã được đưa vào block. Bạn **không** sử dụng `getBundleStatuses` hoặc ID bundle.

Sử dụng phương thức phù hợp với stack của bạn:

* Thăm dò [`getSignatureStatuses`](/docs/vi/api-reference/rpc/http/getsignaturestatuses) cho đến khi chữ ký được xác nhận.
* Đăng ký [LaserStream](/docs/vi/laserstream) hoặc [LaserStream WebSocket](/docs/vi/rpc/websocket) và theo dõi chữ ký đã được đưa vào block.
* Sử dụng [Shred Delivery](/docs/vi/shred-delivery/raw-shreds) hoặc bất kỳ sản phẩm truyền phát nào khác của Helius cung cấp các chữ ký đã được đưa vào block.

## Phương pháp hay nhất

* **Chọn endpoint**: Sử dụng `https://sender.helius-rpc.com/fast` cho các ứng dụng frontend để tránh vấn đề CORS. Đối với ứng dụng backend, hãy sử dụng endpoint HTTP khu vực gần máy chủ nhất.
* **Điều chỉnh tip linh hoạt**: Tăng tip lên trên 0.001 SOL đối với các giao dịch có mức cạnh tranh cao để cải thiện mức ưu tiên trong bộ đệm tip.
* **Duy trì kết nối sẵn sàng**: Sử dụng [endpoint `/ping`](/docs/vi/sending-transactions/sender#làm-nóng-kết-nối) trong các khoảng thời gian không hoạt động dài hơn 5 giây.
* **Phí ưu tiên**: Sử dụng [Helius Priority Fee API](/docs/vi/priority-fee-api) để nhận đề xuất theo thời gian thực.
* **Thử lại**: Đặt `maxRetries: 0` và triển khai logic thử lại của riêng bạn.

## Nội dung liên quan

<CardGroup cols={2}>
  <Card title="Sender Overview" icon="rocket" href="/docs/vi/sending-transactions/sender">
    Các khái niệm dùng chung: endpoint, duy trì kết nối sẵn sàng, giới hạn tốc độ và TPS tùy chỉnh.
  </Card>

  <Card title="SWQOS-Only Tier" icon="dollar-sign" href="/docs/vi/sending-transactions/sender-swqos-only">
    Gửi với độ trễ thấp và tối ưu chi phí qua một tuyến duy nhất (tip tối thiểu 0.000005 SOL).
  </Card>

  <Card title="MEV Protect" icon="shield-halved" href="/docs/vi/sending-transactions/mev-protect">
    Định tuyến tránh các trình xác thực có liên hệ về mặt thống kê với tấn công sandwich.
  </Card>
</CardGroup>
