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

# Filtragem notifyOn via WebSocket

> Ignore atualizações de conta sem efeito nas transmissões de WebSocket do LaserStream com a opção notifyOn em accountSubscribe e programSubscribe — seja notificado apenas quando uma transação realmente escreve em uma conta.

A opção `notifyOn` nos métodos WebSocket [`accountSubscribe`](/docs/pt-BR/api-reference/rpc/websocket/accountsubscribe) e [`programSubscribe`](/docs/pt-BR/api-reference/rpc/websocket/programsubscribe) permite que uma inscrição ignore atualizações para contas que uma transação **bloqueou para escrita, mas nunca escreveu**. O mesmo filtro está disponível via gRPC — veja [Filtragem notifyOn](/docs/pt-BR/laserstream/notify-on-filtering) para a versão gRPC.

## O problema: bloqueios de escrita geram atualizações duplicadas

No Solana, o validador emite uma atualização de conta para cada conta que uma transação bloqueia para escrita — mesmo quando nenhuma instrução realmente escreveu na conta, então seus lamports e dados permanecem inalterados. Para contas movimentadas, isso significa um fluxo constante de notificações duplicadas de "nada mudou" que consomem largura de banda sem trazer novas informações.

## Modos de filtro

`notifyOn` aceita um dos dois valores de string:

| Valor     | Envia uma notificação quando                                                           | Use para                                                                         |
| --------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| `"lock"`  | Uma transação bloqueia a conta para escrita, independentemente de escrever ou não nela | O padrão — visibilidade total, incluindo contas apenas tocadas por uma transação |
| `"write"` | Uma transação realmente escreve na conta                                               | Reduzir ruído de no-op — a maioria dos consumidores não perde nada               |

Dois detalhes importantes:

* Uma escrita de **dados idênticos ainda conta como uma escrita** e é entregue. `write` filtra toques apenas de bloqueio, não gravações que por acaso deixam os mesmos bytes. Na prática, essas gravações de dados idênticos são raras — menos de 5% das atualizações na maioria dos casos.
* As atualizações que `write` descarta são duplicatas exatas do estado que você já recebeu. Se você depende de notificações como um sinal de "esta conta foi bloqueada por uma transação" (por exemplo, rastreamento de atividade), mantenha-se em `lock`.

Inscrições que omitem o campo se comportam exatamente como antes, então é seguro adicionar a uma inscrição existente.

## Use no `accountSubscribe`

Adicione `notifyOn` ao objeto de configuração:

```javascript theme={"system"}
const ws = new WebSocket('wss://mainnet.helius-rpc.com/?api-key=<API_KEY>');

ws.on('open', () => {
  ws.send(JSON.stringify({
    jsonrpc: '2.0',
    id: 1,
    method: 'accountSubscribe',
    params: [
      '<ACCOUNT_PUBKEY>',
      {
        encoding: 'jsonParsed',
        commitment: 'confirmed',
        notifyOn: 'write' // skip no-op updates
      }
    ]
  }));
  setInterval(() => ws.ping(), 30_000);
});

ws.on('message', (data) => {
  const msg = JSON.parse(data.toString());
  if (msg.params?.result) console.log(msg.params.result);
});
```

## Use no `programSubscribe`

A mesma chave funciona no objeto de configuração `programSubscribe`, filtrando atualizações no-op em todas as contas que o programa possui:

```javascript theme={"system"}
ws.send(JSON.stringify({
  jsonrpc: '2.0',
  id: 1,
  method: 'programSubscribe',
  params: [
    '<PROGRAM_ID>',
    {
      encoding: 'jsonParsed',
      commitment: 'confirmed',
      filters: [{ dataSize: 165 }],
      notifyOn: 'write' // skip no-op updates
    }
  ]
}));
```

A análise é fail-open: apenas `"write"` (sem distinção entre maiúsculas e minúsculas) opta por entrar. Qualquer outra coisa — ausente, um erro de digitação, um token desconhecido — resolve para `lock`, então um erro mantém você no caminho de todas as atualizações em vez de causar erro ou silenciosamente descartar dados.

## Relacionados

<CardGroup cols={2}>
  <Card title="accountSubscribe" icon="bolt" href="/docs/pt-BR/api-reference/rpc/websocket/accountsubscribe">
    Referência completa do método `accountSubscribe`, incluindo `notifyOn`.
  </Card>

  <Card title="programSubscribe" icon="code" href="/docs/pt-BR/api-reference/rpc/websocket/programsubscribe">
    Referência completa do método `programSubscribe`, incluindo `notifyOn`.
  </Card>

  <Card title="Filtragem notifyOn (gRPC)" icon="filter" href="/docs/pt-BR/laserstream/notify-on-filtering">
    O mesmo filtro em contas do LaserStream gRPC.
  </Card>

  <Card title="Como Usar accountSubscribe" icon="wallet" href="/docs/pt-BR/rpc/websocket/account-subscribe">
    Guia para transmissão de atualizações de conta via WebSocket.
  </Card>
</CardGroup>
