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

# Negociação em Pré-confirmações

> "Reaja a transações Solana antes que elas sejam registradas: inscreva-se em filtros preconfSubscribe, decodifique a carga binária e aja com Sender Max."

[Pré-confirmações](/docs/pt-BR/pre-confirmations/overview) transmitem transações no instante em que o agendador de um validador se compromete a executá-las, antes de serem fragmentadas. Este guia constrói um ouvinte que observa uma conta alvo, decodifica cada transação agendada e reage usando [Sender Max](/docs/pt-BR/sending-transactions/sender-max).

<Tip>
  Pré-confirmações requerem um [plano Profissional ou superior](/docs/pt-BR/billing/plans) e custam 10 créditos por mensagem.
</Tip>

## Defina o escopo do fluxo antes de se conectar

Um `preconfSubscribe` não filtrado entrega cada transação agendada a 10 créditos cada, então filtre no lado do servidor e pague apenas pelo que você negocia.

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

Três filtros cobrem a maioria dos ouvintes de negociação:

* `failed: false` descarta transações já conhecidas por terem revertido, nas quais você não tem razão para competir.
* `regionInclude` fixa o fluxo na [região](/docs/pt-BR/pre-confirmations/preconf-subscribe#filtragem-por-localização) mais próxima de sua infraestrutura, para que um salto entre regiões não consuma a vantagem inicial.
* `accountInclude` corresponde a qualquer tx que faça referência ao seu alvo: uma carteira, pool AMM, programa, etc. Helius resolve tabelas de pesquisa de endereços no lado do servidor, portanto, o filtro corresponde mesmo quando a conta é carregada por meio de um ALT.

## Conectar, inscrever e decodificar

`preconfSubscribe` é servido do endpoint Gatekeeper (`wss://beta.helius-rpc.com`), e notificações chegam como quadros binários, não JSON.

Cada quadro é um prefixo fixo de 18 bytes seguido pela transação serializada em 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
```

Verifique primeiro o byte de versão. Se Helius atualizar o formato da carga, a versão será incrementada, e a ramificação nela mantém seu decodificador funcionando. A transação desserializada fornece as instruções, contas e assinatura.

## Agir com Sender Max

Uma pré-confirmação só compensa se sua resposta chegar primeiro.

Envie sua reação através do [Sender Max](/docs/pt-BR/sending-transactions/sender-max): a gorjeta de 0,001 SOL entra no buffer de gorjeta de prioridade e é roteada por todos os caminhos de alta velocidade:

```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 }]
    })
  });
}
```

Mantenha este manipulador curto. Decida e envie, e mova o registro, contabilização e reconciliação para fora do caminho de recebimento. Veja [Concluir Negociações com Sender](/docs/pt-BR/sending-transactions/guides/land-trades-with-sender) para o loop de envio completo, incluindo aquecimento de conexão e estimativa de tarifas.

## Confirmar confirmação e esperar lacunas

Uma pré-confirmação é uma visão antecipada. A transação ainda não foi registrada e pode falhar ou ser descartada, então duas regras se aplicam:

* Confirme através de verificações de compromisso padrão (`getSignatureStatuses`, ou um fluxo de `processed`-compromisso) antes de tratar a transação observada ou sua reação como final.
* Espere lacunas. A cobertura escala com a parcela de encaminhamento de participação para Helius, então alguns slots não geram mensagens. Isso é [comportamento esperado](/docs/pt-BR/pre-confirmations/overview#cobertura) em vez de uma conexão morta, e o ping de ativação distingue os dois casos. Reinscreva-se ao fechar.

## Guias relacionados

<CardGroup cols={2}>
  <Card title="Referência da API preconfSubscribe" icon="code" href="/docs/pt-BR/pre-confirmations/preconf-subscribe">
    Semântica completa de filtros, códigos de região e layout da carga binária
  </Card>

  <Card title="Negociação em Transações Pré-processadas" icon="bolt" href="/docs/pt-BR/preprocessed-transactions/guides/trade-on-preprocessed">
    Cobertura pré-execução a 0,1 créditos por mensagem, em todos os planos pagos
  </Card>
</CardGroup>
