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

> Создайте цикл отправки с низкой задержкой с помощью Helius Sender: региональные конечные точки, прогрев соединений, динамические комиссии за приоритет, чаевые и подтверждение включения с повторными попытками.

Sender одновременно отправляет вашу транзакцию по всем высокоскоростным маршрутам (Helius, Jito, Harmonic, Rakurai) и не расходует кредиты API. За каждую отправку вы платите чаевые в SOL. В этом руководстве вы создадите готовый к эксплуатации цикл отправки с прогретыми соединениями, комиссиями по актуальным ценам и подтверждением с политикой повторных попыток.

## Выберите уровень

[Sender Max](/docs/ru/sending-transactions/sender-max) (минимальные чаевые — 0.001 SOL) направляет транзакции по всем маршрутам и помещает их в приоритетный буфер чаевых, где более высокие чаевые обрабатываются первыми.

[Только SWQOS](/docs/ru/sending-transactions/sender-swqos-only) (0.000005 SOL) использует один быстрый маршрут для потока, оптимизированного по стоимости. Добавьте `?swqos_only=true` к URL конечной точки.

Чаевые между этими двумя минимальными значениями обрабатываются по мере возможности через меньшее число маршрутов, поэтому выберите один из двух уровней.

## Выберите конечную точку

Серверные приложения должны использовать ближайшую к своим серверам региональную конечную точку HTTP (`http://ewr-sender.helius-rpc.com/fast`, `fra`, `slc`, `ams`, `lon`, `sg`, `tyo`).

Браузеры должны использовать глобальную конечную точку HTTPS `https://sender.helius-rpc.com/fast`, которая автоматически выбирает маршрут и позволяет избежать проблем с CORS.

## Прогрейте соединение

Установка холодного соединения TCP/TLS увеличивает задержку первой отправки после периода бездействия.

Если между отправками в вашей системе может проходить более 5 секунд, поддерживайте соединение прогретым с помощью конечной точки ping:

```typescript theme={"system"}
const SENDER = 'http://ewr-sender.helius-rpc.com';
const HELIUS_API_KEY = 'YOUR_API_KEY';

setInterval(async () => {
  try {
    await fetch(`${SENDER}/ping`);
  } catch (e) {
    console.warn('warm-up failed:', e);
  }
}, 5_000);
```

## Создайте транзакцию

Каждая транзакция Sender должна включать как перевод чаевых на назначенный счет для чаевых, так и цену вычислительной единицы. Sender отклоняет транзакции, в которых отсутствует любой из этих элементов.

При жестко заданной комиссии за приоритет вы переплачиваете на спокойном рынке и проигрываете конкуренцию при высокой активности, поэтому рассчитывайте ее с помощью [API приоритетных комиссий](/docs/ru/priority-fee-api):

```typescript send.ts theme={"system"}
import {
  Connection, TransactionMessage, VersionedTransaction,
  SystemProgram, PublicKey, Keypair, ComputeBudgetProgram, LAMPORTS_PER_SOL
} from '@solana/web3.js';

const RPC = `https://mainnet.helius-rpc.com/?api-key=${HELIUS_API_KEY}`;
const TIP_ACCOUNTS = [
  '4ACfpUFoaSD9bfPdeu6DBt89gB6ENTeHBXCAi87NhDEE',
  'D2L6yPZ2FmmmTKPgzaMKdhu6EWZcTpLy1Vhx8uvZe7NZ',
  '9bnz4RShgq1hAnLnZbP8kbgBg1kEmcJBYQq3gQbmnSta'
];

async function buildTransaction(keypair: Keypair, tradeInstructions: any[]) {
  const connection = new Connection(RPC);
  const { blockhash } = await connection.getLatestBlockhash('confirmed');

  // Price the fee against the accounts the trade touches
  const feeRes = await fetch(RPC, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      jsonrpc: '2.0', id: '1', method: 'getPriorityFeeEstimate',
      params: [{
        accountKeys: tradeInstructions.flatMap(ix => ix.keys.map((k: any) => k.pubkey.toBase58())),
        options: { recommended: true }
      }]
    })
  });
  const { result } = await feeRes.json();

  const tx = new VersionedTransaction(
    new TransactionMessage({
      instructions: [
        ComputeBudgetProgram.setComputeUnitLimit({ units: 100_000 }),
        ComputeBudgetProgram.setComputeUnitPrice({ microLamports: result.priorityFeeEstimate }),
        ...tradeInstructions,
        SystemProgram.transfer({
          fromPubkey: keypair.publicKey,
          toPubkey: new PublicKey(TIP_ACCOUNTS[Math.floor(Math.random() * TIP_ACCOUNTS.length)]),
          lamports: 0.001 * LAMPORTS_PER_SOL // Sender Max minimum; tip more to land first
        })
      ],
      payerKey: keypair.publicKey,
      recentBlockhash: blockhash
    }).compileToV0Message()
  );
  tx.sign([keypair]);
  return tx;
}
```

Размер чаевых определяет, по каким маршрутам может пройти ваша транзакция, а комиссия за приоритет повышает ее позицию в очереди валидатора. Вместе они максимально увеличивают вероятность включения.

## Отправьте, затем подтвердите

Отправьте транзакцию с параметром `skipPreflight: true`, чтобы сократить задержку за счет отказа от проверки на стороне клиента, а затем подтвердите ее через RPC-соединение.

Sender немедленно возвращает подпись, но она не подтверждает включение транзакции:

```typescript theme={"system"}
async function sendAndConfirm(tx: VersionedTransaction): Promise<string> {
  const signature = await send(tx);

  const connection = new Connection(RPC);
  for (let i = 0; i < 30; i++) {
    const { value } = await connection.getSignatureStatuses([signature]);
    const status = value[0];
    if (status?.err) throw new Error(`Transaction failed: ${JSON.stringify(status.err)}`);
    if (status?.confirmationStatus === 'confirmed' || status?.confirmationStatus === 'finalized') {
      return signature;
    }
    await new Promise(r => setTimeout(r, 1_000));
  }
  throw new Error('Not confirmed within 30s: rebuild with a fresh blockhash and resend');
}

async function send(tx: VersionedTransaction): Promise<string> {
  const res = await fetch(`${SENDER}/fast?api-key=${HELIUS_API_KEY}`, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      jsonrpc: '2.0',
      id: Date.now().toString(),
      method: 'sendTransaction',
      params: [
        Buffer.from(tx.serialize()).toString('base64'),
        { encoding: 'base64', skipPreflight: true, maxRetries: 0 }
      ]
    })
  });
  const json = await res.json();
  if (json.error) throw new Error(json.error.message);
  return json.result;
}
```

При использовании `maxRetries: 0` вы самостоятельно управляете политикой повторных попыток: если время ожидания подтверждения истекло, заново создайте транзакцию со свежим хешем блока и пересчитанной комиссией вместо повторной отправки устаревшей транзакции.

Для запросов с существующим API-ключом проекта Helius действует ограничение в 50 запросов в секунду на регион. Для запросов без ключа действует ограничение в 1 запрос в секунду на исходящий IP-адрес в каждом регионе. Пользователи профессиональных тарифов могут [запросить более высокие лимиты](https://www.helius.dev/contact).

## Необязательно: обходите сэндвич-атаки

Добавьте `?mev-protect=true` к URL конечной точки, чтобы исключить валидаторов, статистически связанных с сэндвич-атаками. Тело запроса останется без изменений. Этот параметр работает на обоих уровнях:

```text theme={"system"}
http://ewr-sender.helius-rpc.com/fast?mev-protect=true
```

Подробнее о компромиссах см. в разделе [MEV Protect](/docs/ru/sending-transactions/mev-protect). Для атомарного выполнения нескольких транзакций (до 4 транзакций по принципу «все или ничего») используйте [`sendBundle`](/docs/ru/sending-transactions/sender-max#бандлы) на той же конечной точке.

## Связанные руководства

<CardGroup cols={2}>
  <Card title="Sender overview" icon="paper-plane" href="/docs/ru/sending-transactions/sender">
    Полное описание уровней, конечных точек, счетов для чаевых и ограничений частоты запросов
  </Card>

  <Card title="Trade on Preconfirmations" icon="stopwatch" href="/docs/ru/pre-confirmations/guides/trade-on-preconfirmations">
    Сочетайте самый быстрый маршрут отправки с самым ранним сигналом о транзакции
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.