> ## Documentation Index
> Fetch the complete documentation index at: https://docs.monad.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# 如何使用 QuickNode Streams 索引每一笔 WMON 转账

在本指南中，您将学习如何使用 QuickNode Streams 索引 Monad 测试网上每一笔 [WMON](https://testnet.monadvision.com/token/0xFb8bf4c1CC7a94c73D209a149eA2AbEa852BC541) 转账，包括内部交易。

## 什么是 QuickNode Streams？

[QuickNode Streams](https://www.quicknode.com/docs/streams/getting-started) 是一个 web3 数据流解决方案，支持 Monad 的实时和历史数据，提供：

* **可靠的数据交付** —— 精确一次、有保证的交付，无缝接入您的数据湖。Streams 确保每个区块、收据或跟踪按数据集最终性顺序精确交付一次，避免数据损坏或缺失等问题
* **实时数据一致性** —— 稳定、实时的数据流传输
* **高效的历史数据处理** —— 可配置的日期范围和目的地，简化历史数据管理
* **易于集成** —— 通过用户友好界面简单设置
* **透明的用户体验** —— 清晰的日志、指标和用量跟踪

## 设置指南

### 1. 初始设置

1. 注册 [QuickNode](https://dashboard.quicknode.com/?prompt=signup) 并登录仪表板。

2. 在左侧边栏点击"Streams"。

<img src="https://mintcdn.com/monadfoundation-40611fb6/c3ZcPFY7YVeS_v57/static/img/guides/indexers/quicknode-streams/1.png?fit=max&auto=format&n=c3ZcPFY7YVeS_v57&q=85&s=45af743f3b05e07e8893b71d3adf5c95" alt="QuickNode Dashboard" width="3020" height="1572" data-path="static/img/guides/indexers/quicknode-streams/1.png" />

3. 点击"Create Stream"。

<img src="https://mintcdn.com/monadfoundation-40611fb6/5Mt9_Scj9fq4fC68/static/img/guides/indexers/quicknode-streams/2.png?fit=max&auto=format&n=5Mt9_Scj9fq4fC68&q=85&s=298f9cc7938b656fd8019b91dceabf5f" alt="Create Stream Button" width="3020" height="1572" data-path="static/img/guides/indexers/quicknode-streams/2.png" />

### 2. 配置流的范围

1. 为您的流命名。本示例中我们将其命名为 `monad-quicknode-stream`。

2. 在"Network"部分，从下拉菜单中选择 `Monad`。

3. 在"Stream Start"部分，您可以选择从最新区块或某个特定区块号开始流。

<img src="https://mintcdn.com/monadfoundation-40611fb6/5Mt9_Scj9fq4fC68/static/img/guides/indexers/quicknode-streams/3.png?fit=max&auto=format&n=5Mt9_Scj9fq4fC68&q=85&s=c6eed146a40724537dc658df231b8f84" alt="Stream Configuration" width="3020" height="1572" data-path="static/img/guides/indexers/quicknode-streams/3.png" />

4. 在"Stream End"部分，您可以选择流一直运行直到手动暂停，或到达某个特定区块号时结束。

5. 在"Latest block delay"部分，您可以设置接收数据的区块延迟数。本指南将立即接收数据。<br /><br />例如：如果区块延迟为 `3`，则只有当包含最新区块在内的 `3` 个区块**有新数据可用时**，您才会收到数据，这在发生重组时会有帮助。

6. 在"Restream on reorg"部分，您可以决定是否在发生重组时希望收到更新后的数据的重播。本指南中我们将其保持关闭。

7. 完成后点击"Next"。

<img src="https://mintcdn.com/monadfoundation-40611fb6/5Mt9_Scj9fq4fC68/static/img/guides/indexers/quicknode-streams/4.png?fit=max&auto=format&n=5Mt9_Scj9fq4fC68&q=85&s=54aa6a2c7ebc006c5e90a54a5a3fade0" alt="Additional Settings" width="3020" height="1572" data-path="static/img/guides/indexers/quicknode-streams/4.png" />

### 3. 设置数据集

1. 在"Dataset"下拉菜单中，您可以根据用例选择所需的数据集。本指南将选择 `Block with Receipts`，因为我们希望过滤 WMON 合约发出的事件日志。

* 可选：启用"Batch messages"以在单条消息中接收多个区块。当流不是从最新区块开始时，这可能会很有用。

<img src="https://mintcdn.com/monadfoundation-40611fb6/5Mt9_Scj9fq4fC68/static/img/guides/indexers/quicknode-streams/5.png?fit=max&auto=format&n=5Mt9_Scj9fq4fC68&q=85&s=bf3c8e7153b1342bd24bda88017774e0" alt="Dataset Selection" width="3020" height="1572" data-path="static/img/guides/indexers/quicknode-streams/5.png" />

2. 您可以输入一个区块号并点击"Fetch payload"进行测试。

<img src="https://mintcdn.com/monadfoundation-40611fb6/5Mt9_Scj9fq4fC68/static/img/guides/indexers/quicknode-streams/6.png?fit=max&auto=format&n=5Mt9_Scj9fq4fC68&q=85&s=debec8a048b8005069230c4810e28aba" alt="Raw Payload Example" width="3020" height="1572" data-path="static/img/guides/indexers/quicknode-streams/6.png" />

### 4. 创建 WMON 转账过滤器

1. 在"Modify the stream payload"部分，您可以通过点击 **"Customize your payload"** 来定义过滤器。本指南中，我们将过滤器设置为仅获取涉及 WMON 转账的收据。

<img src="https://mintcdn.com/monadfoundation-40611fb6/5Mt9_Scj9fq4fC68/static/img/guides/indexers/quicknode-streams/7.png?fit=max&auto=format&n=5Mt9_Scj9fq4fC68&q=85&s=8e1f01eac7cbe4c6f28effe53eb909f8" alt="modify stream image" width="3020" height="1572" data-path="static/img/guides/indexers/quicknode-streams/7.png" />

2. QuickNode 提供了一组过滤器模板。选择 **Decoded ERC20 transfers** 模板：

<img src="https://mintcdn.com/monadfoundation-40611fb6/5Mt9_Scj9fq4fC68/static/img/guides/indexers/quicknode-streams/8.png?fit=max&auto=format&n=5Mt9_Scj9fq4fC68&q=85&s=d03402848962df2305c136f0d5023a81" alt="image for filter" width="3020" height="1572" data-path="static/img/guides/indexers/quicknode-streams/8.png" />

3. 会出现编辑器：

<img src="https://mintcdn.com/monadfoundation-40611fb6/5Mt9_Scj9fq4fC68/static/img/guides/indexers/quicknode-streams/9.png?fit=max&auto=format&n=5Mt9_Scj9fq4fC68&q=85&s=ec754b7b195591df6ab402af673765c5" alt="image of filter editor" width="3020" height="1572" data-path="static/img/guides/indexers/quicknode-streams/9.png" />

当前的过滤器允许所有 ERC20 转账通过。将过滤器代码替换为：

```js lines theme={null}
function main(stream) {  
  const erc20Abi = `[{
    "anonymous": false,
    "inputs": [
      {"indexed": true, "type": "address", "name": "from"},
      {"indexed": true, "type": "address", "name": "to"},
      {"indexed": false, "type": "uint256", "name": "value"}
    ],
    "name": "Transfer",
    "type": "event"
  }]`;
  
  const data = stream.data ? stream.data : stream;
  
  // Decodes logs from the receipts that match the Transfer event ABI
  var result = decodeEVMReceipts(data[0].receipts, [erc20Abi]);
  
  // Filter for receipts with decoded logs
  result = result.filter(receipt => {
        // Check if there are any ERC20 transfers
        if(receipt.decodedLogs) {
            // Check if there are any WMON transfers
            receipt.decodedLogs = receipt.decodedLogs.filter(log => log.address == "0xFb8bf4c1CC7a94c73D209a149eA2AbEa852BC541");
            
            // Return receipt if there logs which indicate a WMON transfer.
            return receipt.decodedLogs.length > 0;
        }

        // Return nothing if there are no ERC20 transfers.
        return false;
    });
  
  return { result };
}
```

4. 使用"Run test"测试过滤器

<img src="https://mintcdn.com/monadfoundation-40611fb6/c3ZcPFY7YVeS_v57/static/img/guides/indexers/quicknode-streams/10.png?fit=max&auto=format&n=c3ZcPFY7YVeS_v57&q=85&s=785e53afb0ceeec4744ba77291881590" alt="run test image" width="3020" height="1572" data-path="static/img/guides/indexers/quicknode-streams/10.png" />

5. "Save & close"保存过滤器。

<img src="https://mintcdn.com/monadfoundation-40611fb6/c3ZcPFY7YVeS_v57/static/img/guides/indexers/quicknode-streams/11.png?fit=max&auto=format&n=c3ZcPFY7YVeS_v57&q=85&s=de37ea8a1fc4ad93db19a482924aed09" alt="save & close image" width="3020" height="1572" data-path="static/img/guides/indexers/quicknode-streams/11.png" />

6. 点击"Next"

### 5. 设置流的目的地

本指南将简化流目的地的设置，使用 `Webhook` 作为"Destination Type"。

1. 让我们使用类似 [Svix Play](https://www.svix.com/play/) 的网站，快速获取一个 webhook 并测试流。

<img src="https://mintcdn.com/monadfoundation-40611fb6/c3ZcPFY7YVeS_v57/static/img/guides/indexers/quicknode-streams/12.png?fit=max&auto=format&n=c3ZcPFY7YVeS_v57&q=85&s=86707a59c23625dee43dd9d2d0580814" alt="svix play image" width="3020" height="1572" data-path="static/img/guides/indexers/quicknode-streams/12.png" />

2. 从 Svix Play 复制 webhook URL：

<img src="https://mintcdn.com/monadfoundation-40611fb6/c3ZcPFY7YVeS_v57/static/img/guides/indexers/quicknode-streams/13.png?fit=max&auto=format&n=c3ZcPFY7YVeS_v57&q=85&s=26db768937957f5379075027250b86a5" alt="svix play copy url image" width="3020" height="1576" data-path="static/img/guides/indexers/quicknode-streams/13.png" />

3. 在 QuickNode 中：

* 选择 `Webhook` 作为目的地类型
* 粘贴您的 webhook URL
* 其他设置保持默认

<img src="https://mintcdn.com/monadfoundation-40611fb6/c3ZcPFY7YVeS_v57/static/img/guides/indexers/quicknode-streams/14.png?fit=max&auto=format&n=c3ZcPFY7YVeS_v57&q=85&s=82115bb2f75230195488472879744f48" alt="webhook dropdown image" width="3020" height="1576" data-path="static/img/guides/indexers/quicknode-streams/14.png" />

4. 点击"Check Connection"测试 webhook URL。检查您是否在 Svix Play 仪表板中收到了"PING"消息。

<img src="https://mintcdn.com/monadfoundation-40611fb6/c3ZcPFY7YVeS_v57/static/img/guides/indexers/quicknode-streams/15.png?fit=max&auto=format&n=c3ZcPFY7YVeS_v57&q=85&s=78479d82f42a7fb1f3e49361b15c536a" alt="check connection image" width="3020" height="1576" data-path="static/img/guides/indexers/quicknode-streams/15.png" />

<img src="https://mintcdn.com/monadfoundation-40611fb6/c3ZcPFY7YVeS_v57/static/img/guides/indexers/quicknode-streams/16.png?fit=max&auto=format&n=c3ZcPFY7YVeS_v57&q=85&s=0baa20bf87e23a3b9a92520c1fd1a164" alt="ping message image" width="3020" height="1576" data-path="static/img/guides/indexers/quicknode-streams/16.png" />

5. 点击"Send Payload"发送测试载荷到 webhook。

<img src="https://mintcdn.com/monadfoundation-40611fb6/5Mt9_Scj9fq4fC68/static/img/guides/indexers/quicknode-streams/17.png?fit=max&auto=format&n=5Mt9_Scj9fq4fC68&q=85&s=23f8bc7e7f931792e604101467c877fe" alt="add send payload image" width="3020" height="1576" data-path="static/img/guides/indexers/quicknode-streams/17.png" />

<img src="https://mintcdn.com/monadfoundation-40611fb6/5Mt9_Scj9fq4fC68/static/img/guides/indexers/quicknode-streams/18.png?fit=max&auto=format&n=5Mt9_Scj9fq4fC68&q=85&s=fcb343228f0fab68e78be58a6e002bce" alt="svix payload image" width="3020" height="1576" data-path="static/img/guides/indexers/quicknode-streams/18.png" />

6. 最后点击"Create a Stream"创建流。

<img src="https://mintcdn.com/monadfoundation-40611fb6/5Mt9_Scj9fq4fC68/static/img/guides/indexers/quicknode-streams/19.png?fit=max&auto=format&n=5Mt9_Scj9fq4fC68&q=85&s=fd0c433eb457899661f7f19d9b7bc19a" alt="create stream image" width="3020" height="1576" data-path="static/img/guides/indexers/quicknode-streams/19.png" />

### 6. 启动并监控

您现在应该可以看到流将消息发送到 webhook 了！

<img src="https://mintcdn.com/monadfoundation-40611fb6/5Mt9_Scj9fq4fC68/static/img/guides/indexers/quicknode-streams/20.png?fit=max&auto=format&n=5Mt9_Scj9fq4fC68&q=85&s=205d9d177d072b55d5cbf3cb2ec4ad1f" alt="stream delivering image" width="3020" height="1576" data-path="static/img/guides/indexers/quicknode-streams/20.png" />

<img src="https://mintcdn.com/monadfoundation-40611fb6/c3ZcPFY7YVeS_v57/static/img/guides/indexers/quicknode-streams/1.gif?s=77b30c3b9d9d3bdc444270b3b7eebeed" alt="svix streaming receiving message video" width="800" height="417" data-path="static/img/guides/indexers/quicknode-streams/1.gif" />

您可以通过点击右上角的开关暂停流。

<img src="https://mintcdn.com/monadfoundation-40611fb6/5Mt9_Scj9fq4fC68/static/img/guides/indexers/quicknode-streams/21.png?fit=max&auto=format&n=5Mt9_Scj9fq4fC68&q=85&s=9a43a8b593176fa0bc2d2990397d1570" alt="pause switch image" width="3020" height="1576" data-path="static/img/guides/indexers/quicknode-streams/21.png" />

## 后续步骤

* 在 QuickNode 仪表板中监控您的流的性能
* 根据需要调整过滤器参数
* 准备好后连接到您的生产 webhook 端点

您的流现在将追踪所有 WMON 转账，直到手动暂停或达到您指定的结束区块。
