如何使用流和过滤器获取Telegram警报

  • QuickNode
  • 发布于 2024-07-27 23:47
  • 阅读 38

本文介绍了如何利用QuickNode的Streams功能,通过设置过滤器来监控Uniswap V2/V3上的特定ERC-20代币交易,并通过Telegram机器人发送通知。文章详细讲解了创建Telegram机器人、设置Streams、编写过滤器代码以及集成Telegram的步骤。

概述

你可以通过在 Stream 中设置过滤器来利用 Streams 的强大功能,实现链上事件提醒。你的过滤器可以包含对流数据进行评估的条件逻辑,还可以自定义发送到 Stream 目的地的有效载荷。过滤你的 Stream 确保你只为所需的数据付费。

创建一个 Telegram 机器人,每当有人在 Uniswap V2/V3 上购买特定的 ERC-20 代币时通知你,这是一种及时了解代币活动的实用方法。

在本指南中,我们将使用 $PEPE 作为示例代币。我们将设置一个 Stream 来监控转账,使用过滤器检测 Uniswap V2/V3 上的代币购买,并直接与 Telegram 集成以发送通知。

你将要做的事情

  • 创建一个 Telegram 机器人
  • 在 QuickNode 上创建一个 Stream
  • 过滤传入的 Stream 数据并创建一个消息有效载荷发送到你的 Telegram 机器人
  • 将消息有效载荷直接发送到你的 Telegram 机器人

你将需要的东西

创建 Telegram 机器人

  • 你可以通过向 Telegram 中的 @botfather 发送 /newbot 并按照提示操作来获取你的 Telegram 机器人Token。
  • 一旦你有了Token,将机器人添加为你希望消息出现的频道或群组的管理员。Token是 <bot_token>
  • 群组/频道中应该至少有一条消息。
  • 添加机器人后,在浏览器中访问此 URL。将 <bot_token> 替换为你的机器人Token:https://api.telegram.org/bot<bot_token>/getUpdates
  • 在响应中查找 chat 对象并复制其 id - 这是 <your_chat_id> - 请妥善保管,因为你稍后会需要它。

设置 Stream

导航到 QuickNode Streams 页面并点击 Create Stream 按钮。

Stream settings 页面上,将 Stream 配置为以下设置:

  • Chain: Ethereum
  • Network: Mainnet
  • Dataset: Receipts
  • Stream start: Latest
  • Stream payload: Modify the Stream before streaming

stream settings

然后,使用以下代码来过滤 Stream。该代码过滤包含 Uniswap V2 和 V3 交换的交易收据,其中 Uniswap 路由器将特定代币(在本例中为 $PEPE 代币)发送到一个地址。你可以根据需要修改过滤器。过滤器会从匹配的转账中创建一个有效载荷,我们将发送到我们的 Telegram 机器人。请确保将 <your_chat_id> 替换为你的 Telegram 聊天 ID。注意:在没有匹配事件的区块上,我们的代码将返回 null。这意味着我们的 Stream 只有在检测到流数据中的匹配事件时才会发送数据。

function main(stream) {
    const tokenContractAddress = "0x6982508145454Ce325dDbE47a25d4ec3d2311933";
    const uniswapV3SwapTopicHash = "0xc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca67";
    const uniswapV2SwapTopicHash = "0xd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d822";
    const transferTopicHash = "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef";
    const uniswapRouterAddress = "0x0000000000000000000000003fc91a3afd70395cd496c647d5a6cc9d4b2b7fad";
    const tokenName = "$PEPE"; // 代币名称
    const decimals = 18; // 代币的小数位数

    var messages = [];
    var data = stream.data[0];
    data.forEach(receipt => {
        var swaps = [];
        var tokenTransfers = [];

        // 过滤 Uniswap V3 和 V2 交换事件
        swaps = receipt.logs.filter(log =>
            log.topics[0] === uniswapV3SwapTopicHash ||
            log.topics[0] === uniswapV2SwapTopicHash
        );

        // 过滤匹配的代币转账
        tokenTransfers = receipt.logs.filter(log =>
            log.address.toLowerCase() === tokenContractAddress.toLowerCase() &&
            log.topics[0].toLowerCase() === transferTopicHash.toLowerCase() &&
            log.topics[1].toLowerCase() === uniswapRouterAddress.toLowerCase()
        );

        // 检查同一收据中是否有交换和转账
        // 将匹配的转账解析到消息中
        if (swaps.length > 0 && tokenTransfers.length > 0) {
            tokenTransfers.forEach(transfer => {
                let recipient = '0x' + transfer.topics[2].slice(26);
                let amount = parseInt(transfer.data, 16);
                let formattedAmount = (amount / Math.pow(10, decimals)).toFixed(decimals).replace(/\.?0+$/, ""); // 转换并格式化带小数位的金额
                messages.push({
                    recipient,
                    amount: formattedAmount,
                    transactionHash: receipt.transactionHash
                });
            });
        }
    });

    if (messages.length > 0) {
        let formattedMessages = messages.map(msg => {
            let addressLink = `[${msg.recipient}](https://etherscan.io/address/${msg.recipient})`;
            let txHashLink = `[${msg.transactionHash}](https://etherscan.io/tx/${msg.transactionHash})`;
            return `${addressLink} bought ${msg.amount} ${tokenName} in transaction ${txHashLink}!`;
        });
        return {
            chat_id: "<your_chat_id>",
            text: `** ${tokenName} Swaps detected!! **\n` + formattedMessages.join('\n'),
            parse_mode: "Markdown"
        };
    } else {
        return null;
    }
}

你可以点击 Run Test 按钮以确保你的过滤器语法正确。你将看到一个示例响应,该响应在 Receipts 数据集上测试了你的过滤器代码。你可以将测试的区块编号设置为 20040311,其中发生了 $PEPE 交换。

为了检索历史数据,你不需要启用重组处理选项,但如果你想流式传输实时数据,你可以启用 Latest block delayRestream on reorg 功能来处理重组。你可以在此处了解更多关于重组的信息 here。页面完成后,点击 Next,你将需要配置你的 Stream 目的地。

然后,在 Stream destination 页面上,将目的地设置为 Webhook 并配置为与以下详细信息一致。如果未提及某个字段,可以保持原样。

  • Destination URL: 输入 Telegram API 的 URL,https://api.telegram.org/bot<your_bot_token>/sendMessage,确保插入 <your_bot_token> 所指示的内容。
  • Custom headers: 启用此选项并包含以下标头:Content-Type: application/json

在激活 Stream 之前,使用 Test Destination 按钮验证你的设置。你可以返回上一步调整区块编号(例如,设置为符合你过滤条件的区块编号 - block\ 20019228)。这允许你在上线之前使用特定的 Streams 数据测试你的机器人。

要通过 CLI 再次测试,我们将发送一个 curl 请求来测试我们的 Telegram 机器人。打开你的终端应用程序并发送此 curl 请求,其中包含一个示例有效载荷,如果配置正确,它将触发你的 Telegram 机器人。请确保在 curl 请求中替换 <your_bot_token><your_chat_id>

curl -X POST \
 -H "Content-Type: application/json" \
 -d '{
   "chat_id": "<your_chat_id>",
   "parse_mode": "Markdown",
   "text": "** $PEPE Swaps detected!! **\n[0x000000fee13a103a10d593b9ae06b3e05f2e7e1c](https://etherscan.io/address/0x000000fee13a103a10d593b9ae06b3e05f2e7e1c) bought 3265.647766725334804505 $PEPE in transaction [0xce33006642e3e3491171b1324c3692a0178d155af1c09732b6ceb2255d8c3d7e](https://etherscan.io/tx/0xce33006642e3e3491171b1324c3692a0178d155af1c09732b6ceb2255d8c3d7e)!\n[0x236a6a5b483df9fb61a477e70cf2a8a85e7e36d5](https://etherscan.io/address/0x236a6a5b483df9fb61a477e70cf2a8a85e7e36d5) bought 1302993.458923408761620522 $PEPE in transaction [0xce33006642e3e3491171b1324c3692a0178d155af1c09732b6ceb2255d8c3d7e](https://etherscan.io/tx/0xce33006642e3e3491171b1324c3692a0178d155af1c09732b6ceb2255d8c3d7e)!"
 }' \
 https://api.telegram.org/bot<your_bot_token>/sendMessage

最后,点击 Create a Stream 按钮。Stream 启动后,检查你添加了机器人的 Telegram 频道或群组。

当检测到 $PEPE 交换时,你将从你的 Telegram 机器人看到类似这样的消息:

telegram bot messages

就这样!你刚刚创建了一个端到端的 Telegram 提醒系统,使用 Streams 和过滤器。要了解更多信息,请查看以下资源。

更多资源

最后思考

如果你有任何问题,请直接 联系我们。如果你有任何想法或建议,例如希望我们支持的新目的地、功能、指标或数据集。

此外,通过关注我们的 Twitter 并加入我们的 DiscordTelegram 公告频道,了解最新动态。

我们 ❤️ 反馈!

让我们知道 如果你有任何反馈或新主题的请求。我们很乐意听取你的意见。

  • 原文链接: quicknode.com/guides/qui...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
QuickNode
QuickNode
江湖只有他的大名,没有他的介绍。