> ## 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/zh/rpc/websocket/notify-on-filtering)。

## 问题：写锁生成重复更新

在 Solana 上，验证器会为事务写锁的每个账户发出账户更新——即使没有指令实际写入账户，因此其 lamports 和数据未更改。对于繁忙的账户，这意味着一连串消耗带宽但不携带新信息的重复“未更改”通知。

## 过滤模式

`notifyOn` 取以下两个值之一：

| 值       | 发送更新时机        | 用于                      |
| ------- | ------------- | ----------------------- |
| `lock`  | 事务写锁账户，无论是否写入 | 默认选项——完全可见性，包括仅被事务触及的账户 |
| `write` | 事务实际写入账户      | 消除无操作噪音——大多数使用者不会失去任何信息 |

需要了解的两个细节：

* **相同数据的写入仍算作写入**并会被传递。`write` 筛选掉仅锁定的接触，而不是碰巧保持相同字节的写入。实际上，这些相同数据的写入很少见——在大多数情况下不到 5% 的更新。
* `write` 删除的更新是您已收到状态的精确副本。如果您依赖更新作为“此账户已被事务锁定”的信号（例如，活动跟踪），请继续使用 `lock`。

省略该字段的订阅行为完全不变，因此可以安全地添加到现有过滤器中。

## 在 LaserStream gRPC 中使用

在您的 `SubscribeRequest` 中为账户过滤器设置 `notifyOn`：

```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`。在线路层面，这是 `SubscribeRequestFilterAccounts` 的 `notify_on` 字段（proto 标签 31），枚举值为 `NOTIFY_ON_LOCK`（0，默认）和 `NOTIFY_ON_WRITE`（1）。有关每个账户过滤器字段，请参阅[订阅请求参考](/docs/zh/laserstream/grpc#订阅请求)。

在 gRPC 上，`notifyOn` 是通过 [Helius LaserStream SDK](/docs/zh/laserstream/clients) 提供的 Helius 扩展——标准的 Yellowstone 客户端不暴露该字段。

## 相关

<CardGroup cols={2}>
  <Card title="订阅请求参考" icon="filter" href="/docs/zh/laserstream/grpc">
    每个 gRPC 账户过滤器字段，包括 `notifyOn`。
  </Card>

  <Card title="notifyOn 过滤 (WebSocket)" icon="bolt" href="/docs/zh/rpc/websocket/notify-on-filtering">
    `accountSubscribe` 和 `programSubscribe` 上相同的 `notifyOn` 字段。
  </Card>

  <Card title="账户订阅指南" icon="wallet" href="/docs/zh/laserstream/guides/account-subscription">
    过滤策略和可运行的账户监控示例，基于 gRPC。
  </Card>

  <Card title="代币账户 (ATA) 过滤" icon="coins" href="/docs/zh/laserstream/token-account-filtering">
    匹配影响钱包拥有的代币账户的交易。
  </Card>
</CardGroup>
