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

# notifyOn 필터링

> LaserStream gRPC 스트림에서 notifyOn 필터를 사용하여 변화 없는 계정 업데이트를 건너뛰고, 실제로 거래가 계정에 기록될 때만 알림을 받으세요.

LaserStream의 `notifyOn` 필터는 gRPC 계정 구독에서 거래가 **쓰기 잠금을 했지만 기록하지 않은** 계정에 대한 업데이트를 건너뛰게 합니다. 동일한 필터가 WebSocket `accountSubscribe` 및 `programSubscribe` 메서드에서도 가능합니다 — [WebSocket을 통한 notifyOn 필터링](/docs/ko/rpc/websocket/notify-on-filtering)을 참조하세요.

## 문제점: 쓰기 잠금이 중복 업데이트를 생성합니다

Solana에서는 검증자가 거래가 쓰기 잠금을 설정한 모든 계정에 대해 계정 업데이트를 발행합니다 — 실제로 계정에 명령어가 기록되지 않아 램포트와 데이터가 변경되지 않은 경우에도 그렇습니다. 바쁜 계정의 경우, 이는 새로운 정보를 제공하지 않고 대역폭을 소비하는 "변화 없음" 중복 알림의 끊임없는 흐름을 의미합니다.

## 필터 모드

`notifyOn`는 두 가지 값 중 하나를 가집니다:

| Value   | 업데이트 전송 시점                     | 사용 시기                                |
| ------- | ------------------------------ | ------------------------------------ |
| `lock`  | 거래가 계정을 쓰기 잠금했을 때, 기록 여부와 관계없이 | 기본값 — 거래로 인해 단순히 터치된 계정을 포함하여 전체 가시성 |
| `write` | 거래가 실제로 계정에 기록했을 때             | 변화 없음 소음을 줄일 때 — 대부분의 소비자는 손실이 없습니다  |

알아두면 좋은 두 가지 사항:

* **동일한 데이터를 기록하는 경우에도 기록으로 간주**되어 전달됩니다. `write`는 잠금 전용 터치를 필터링하며, 같은 바이트를 남기는 기록은 포함되지 않습니다. 실제로 이러한 동일 데이터 기록은 드물며 — 대부분의 경우 업데이트의 5% 미만입니다.
* `write`가 제거하는 업데이트는 이미 수신한 상태의 정확한 복제본입니다. 거래에 의해 계정이 잠금되었다는 신호로 업데이트에 의존한다면 (예: 활동 추적), `lock`에 머무르세요.

필드를 생략한 구독은 이전과 정확히 동일하게 작동하므로, 기존 필터에 추가해도 안전합니다.

## LaserStream gRPC에서 사용하기

`notifyOn`를 계정 필터에 설정하세요: `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);
});
```

Rust SDK에서는 `notify_on: NotifyOn::Write as i32`를 설정하세요. 네트워크 레벨에서는 이것이 `notify_on` 필드의 `SubscribeRequestFilterAccounts` (proto tag 31)이며, 열거형 값은 `NOTIFY_ON_LOCK` (0, 기본값)과 `NOTIFY_ON_WRITE` (1)입니다. 모든 계정 필터 필드에 대한 [Subscribe Request 참조](/docs/ko/laserstream/grpc#구독-요청)를 참조하세요.

gRPC에서 `notifyOn`는 [Helius LaserStream SDK](/docs/ko/laserstream/clients)를 통해 사용할 수 있는 Helius 확장 기능입니다 — 기본 Yellowstone 클라이언트는 필드를 노출하지 않습니다.

## 관련 항목

<CardGroup cols={2}>
  <Card title="구독 요청 참조" icon="filter" href="/docs/ko/laserstream/grpc">
    `notifyOn`를 포함한 모든 gRPC 계정 필터 필드.
  </Card>

  <Card title="notifyOn 필터링 (WebSocket)" icon="bolt" href="/docs/ko/rpc/websocket/notify-on-filtering">
    `notifyOn` 필드를 `accountSubscribe` 및 `programSubscribe`에서 사용합니다.
  </Card>

  <Card title="계정 구독 가이드" icon="wallet" href="/docs/ko/laserstream/guides/account-subscription">
    gRPC를 통한 필터링 전략과 실행 가능한 계정 모니터링 예시.
  </Card>

  <Card title="토큰 계정 (ATA) 필터링" icon="coins" href="/docs/ko/laserstream/token-account-filtering">
    지갑이 가진 토큰 계정을 건드리는 거래와 일치시킵니다.
  </Card>
</CardGroup>
