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

> Ignore atualizações de conta sem efeito nos fluxos gRPC do LaserStream com o filtro notifyOn — seja notificado apenas quando uma transação realmente escrever em uma conta.

O filtro `notifyOn` do LaserStream permite que uma assinatura de conta gRPC ignore atualizações para contas que uma transação **bloqueou para escrita mas nunca escreveu**. O mesmo filtro está disponível nos métodos WebSocket `accountSubscribe` e `programSubscribe` — veja [Filtragem notifyOn sobre WebSocket](/docs/pt-BR/rpc/websocket/notify-on-filtering).

## 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 de dois valores:

| Valor   | Envia uma atualização quando                                     | Use para                                                                                 |
| ------- | ---------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
| `lock`  | Uma transação bloqueia a conta para escrita, quer escreva ou não | O padrão — visibilidade total, incluindo contas apenas tocadas por uma transação         |
| `write` | Uma transação realmente escreve na conta                         | Para reduzir o ruído de operações sem efeito — a maioria dos consumidores não perde nada |

Dois detalhes que vale a pena saber:

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

Assinaturas que omitem o campo continuam a se comportar exatamente como antes, então é seguro adicioná-lo a um filtro existente.

## Use no LaserStream gRPC

Defina `notifyOn` em um filtro de contas no seu `SubscribeRequest`:

```typescript theme={"system"}
import { subscribe, CommitmentLevel, LaserstreamConfig, SubscribeRequest } from 'helius-laserstream';

const subscriptionRequest: SubscribeRequest = {
  accounts: {
    "write-only": {
      account: ['<ACCOUNT_PUBKEY>'],
      owner: [],
      filters: [],
      notifyOn: 'write' // skip no-op updates
    }
  },
  commitment: CommitmentLevel.CONFIRMED,
  transactions: {}, slots: {}, transactionsStatus: {},
  blocks: {}, blocksMeta: {}, entry: {}, accountsDataSlice: [],
};

const config: LaserstreamConfig = {
  apiKey: 'YOUR_API_KEY',
  endpoint: 'https://laserstream-mainnet-ewr.helius-rpc.com',
};

await subscribe(config, subscriptionRequest, async (data) => {
  if (data.account) console.log(data.account);
}, async (error) => {
  console.error('Stream error:', error);
});
```

No SDK Rust, defina `notify_on: NotifyOn::Write as i32`. No nível da rede, este é o campo `notify_on` de `SubscribeRequestFilterAccounts` (proto tag 31), com valores enum `NOTIFY_ON_LOCK` (0, o padrão) e `NOTIFY_ON_WRITE` (1). Veja a [referência de Solicitação de Inscrição](/docs/pt-BR/laserstream/grpc#solicitação-de-assinatura) para cada campo de filtro de contas.

No gRPC, `notifyOn` é uma extensão Helius disponível através do [Helius LaserStream SDK](/docs/pt-BR/laserstream/clients) — clientes Yellowstone padrão não expõem o campo.

## Relacionados

<CardGroup cols={2}>
  <Card title="Referência de Solicitação de Inscrição" icon="filter" href="/docs/pt-BR/laserstream/grpc">
    Todo campo de filtro de contas gRPC, incluindo `notifyOn`.
  </Card>

  <Card title="Filtragem notifyOn (WebSocket)" icon="bolt" href="/docs/pt-BR/rpc/websocket/notify-on-filtering">
    O mesmo campo `notifyOn` em `accountSubscribe` e `programSubscribe`.
  </Card>

  <Card title="Guia de Assinaturas de Contas" icon="wallet" href="/docs/pt-BR/laserstream/guides/account-subscription">
    Estratégias de filtragem e exemplos executáveis de monitoramento de contas via gRPC.
  </Card>

  <Card title="Filtragem de Conta de Token (ATA)" icon="coins" href="/docs/pt-BR/laserstream/token-account-filtering">
    Combinando transações que tocam nas contas de token que uma carteira possui.
  </Card>
</CardGroup>
