快速入门指南 - OpenZeppelin 文档

本文档是OpenZeppelin Monitor的快速入门指南,介绍了如何设置和使用OpenZeppelin Monitor来监控区块链事件和交易,包括EVM和Stellar网络。通过自动化或手动方式设置Monitor,配置监控USDC transfer和Stellar DEX swap,并设置Slack和Email的通知。

快速入门指南

OpenZeppelin Monitor 是一个用于监控区块链事件和交易的强大工具。本指南将帮助你快速启动并运行,其中包含 EVM 和 Stellar 网络的实际示例。

你将学到什么

  • 如何在本地或使用 Docker 设置 OpenZeppelin Monitor

  • 如何配置以太坊上 USDC 转账的监控

  • 如何监控 Stellar 上的 DEX 交易

  • 如何通过 Slack 和电子邮件设置通知

前提条件

开始之前,请确保已安装以下内容:

  • Rust 2021 版 - 从源代码构建需要

  • Docker - 可选,用于容器化部署

  • Git - 用于克隆仓库

如果你没有安装 Rust,请访问 https://rustup.rs/ 进行安装。

快速设置选项

我们提供了两种设置路径来帮助你入门:

选项 1:自动设置(推荐)

为了获得最快的设置体验,请使用我们的自动脚本,它可以为你处理一切。

自动设置的功能

setup_and_run.sh 脚本提供了一个完整的解决方案,可以:

  • 从源代码构建 monitor 应用程序

  • 将示例配置examples/ 复制到 config/

  • 主要区块链的网络配置

  • 预配置的 monitor 示例(USDC 转账、Stellar DEX 交易)

  • 必需的过滤器脚本和基本触发器通知

  • 验证所有配置以确保正确设置

  • 可选地运行 monitor 以验证一切正常

运行自动设置
  1. 克隆仓库:
git clone https://github.com/openzeppelin/openzeppelin-monitor
cd openzeppelin-monitor
  1. 使脚本可执行:
chmod +x setup_and_run.sh
  1. 运行自动设置:
./setup_and_run.sh

该脚本在整个过程中提供彩色输出和清晰的指导。

自动设置后

完成后,你将拥有:

  • 一个完全构建的 OpenZeppelin Monitor

  • 准备好定制的示例配置

  • 关于后续步骤的明确指导

下一步: . 自定义 config/ 目录中的复制配置 . 更新 RPC URL 和通知凭据 . 使用 ./openzeppelin-monitor 运行 monitor

设置脚本创建带有占位符值的工作配置。在开始实际监控之前,请记住使用实际的 RPC 端点和通知凭据更新你的文件

选项 2:手动设置

适用于喜欢更多控制设置过程的用户。

从源代码构建
  1. 克隆和构建:
git clone https://github.com/openzeppelin/openzeppelin-monitor
cd openzeppelin-monitor
cargo build --release
  1. 将二进制文件移动到项目根目录:
mv ./target/release/openzeppelin-monitor .
Docker 设置

对于容器化部署:

  1. 启动服务:
docker compose up
默认情况下,Docker Compose 使用 Dockerfile.development。对于生产环境,请设置:<br>DOCKERFILE=Dockerfile.production 在运行命令之前。
Docker 管理命令
命令 描述
docker ps -a 验证容器状态
docker compose down 停止服务(不带指标)
docker compose --profile metrics down 停止服务(带指标)
docker compose logs -f 查看日志(跟踪模式)

环境配置

日志配置

通过设置 RUST_LOG 环境变量来配置日志详细程度:

级别 描述
error 仅错误消息
warn 警告和错误
info 常规信息(推荐)
debug 详细的调试信息
trace 非常详细的跟踪信息
export RUST_LOG=info

本地配置

复制示例环境变量文件并自定义它:

cp .env.example .env

有关详细的配置选项,请参阅 基本配置

实际示例

现在让我们设置实际的监控场景。选择与你的需求匹配的示例:

示例 1:监控 USDC 转账(以太坊)

此示例监控以太坊主网上的大型 USDC 转账,并在转账超过 10,000 USDC 时发送通知。

步骤 1:网络配置

创建以太坊主网配置:

## 仅在你尚未运行自动设置脚本时才需要(选项 1:自动设置)
cp examples/config/networks/ethereum_mainnet.json config/networks/ethereum_mainnet.json

关键配置详情:

{
  "network_type": "EVM",
  "slug": "ethereum_mainnet",
  "name": "Ethereum Mainnet",
  "rpc_urls": [\
    {\
      "type_": "rpc",\
      "url": {\
        "type": "plain",\
        "value": "YOUR_RPC_URL_HERE"\
      },\
      "weight": 100\
    }\
  ],
  "chain_id": 1,
  "block_time_ms": 12000,
  "confirmation_blocks": 12,
  "cron_schedule": "0 */1 * * * *",
  "max_past_blocks": 18,
  "store_blocks": false
}
重要提示:YOUR_RPC_URL_HERE 替换为你实际的以太坊 RPC 端点。你可以使用 Infura、Alchemy 等提供商,或运行你自己的节点。
步骤 2:Monitor 配置

设置 USDC 转账 monitor:

## 仅在你尚未运行自动设置脚本时才需要(选项 1:自动设置)
cp examples/config/monitors/evm_transfer_usdc.json config/monitors/evm_transfer_usdc.json
cp examples/config/filters/evm_filter_block_number.sh config/filters/evm_filter_block_number.sh

Monitor 配置概览:

{
  "name": "Large Transfer of USDC Token",
  "paused": false,
  "networks": ["ethereum_mainnet"],
  "addresses": [\
    {\
      "address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",\
      "contract_spec": [\
        {\
          "anonymous": false,\
          "inputs": [\
            {\
              "indexed": true,\
              "internalType": "address",\
              "name": "from",\
              "type": "address"\
            },\
            {\
              "indexed": true,\
              "internalType": "address",\
              "name": "to",\
              "type": "address"\
            },\
            {\
              "indexed": false,\
              "internalType": "uint256",\
              "name": "value",\
              "type": "uint256"\
            }\
          ],\
          "name": "Transfer",\
          "type": "event"\
        }\
      ]\
    }\
  ],
  "match_conditions": {
    "functions": [],
    "events": [\
      {\
        "signature": "Transfer(address,address,uint256)",\
        "expression": "value > 10000000000"\
      }\
    ],
    "transactions": [\
      {\
        "status": "Success",\
        "expression": null\
      }\
    ]
  },
  "trigger_conditions": [\
    {\
      "script_path": "./config/filters/evm_filter_block_number.sh",\
      "language": "bash",\
      "arguments": ["--verbose"],\
      "timeout_ms": 1000\
    }\
  ],
  "triggers": ["evm_large_transfer_usdc_slack", "evm_large_transfer_usdc_email"]
}
- expression: "value > 10000000000" 监控超过 10,000 USDC 的转账(USDC 有 6 位小数)<br> <br>- 删除 trigger_conditions 数组以禁用附加过滤<br> <br>- USDC 合约地址 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 是以太坊主网上的官方 USDC 合约
步骤 3:通知设置
Slack 通知
## 仅在你尚未运行自动设置脚本时才需要(选项 1:自动设置)
cp examples/config/triggers/slack_notifications.json config/triggers/slack_notifications.json

Slack 配置:

{
    "evm_large_transfer_usdc_slack": {
        "name": "Large Transfer Slack Notification",
        "trigger_type": "slack",
        "config": {
            "slack_url": {
                "type": "plain",
                "value": "SLACK_WEBHOOK_URL"
            },
            "message": {
                "title": "large_transfer_slack triggered",
                "body": "Large transfer of ${events.0.args.value} USDC from ${events.0.args.from} to ${events.0.args.to} | https://etherscan.io/tx/${transaction.hash}#eventlog"
            }
        }
    }
}
要获取 Slack webhook URL:<br>1. 转到 https://api.slack.com/apps<br> <br>2. 创建一个新应用程序或选择现有应用程序<br> <br>3. 启用“传入 Webhooks”<br> <br>4. 为你的频道创建一个 webhook
电子邮件通知
## 仅在你尚未运行自动设置脚本时才需要(选项 1:自动设置)
cp examples/config/triggers/email_notifications.json config/triggers/email_notifications.json

电子邮件配置:

{
    "evm_large_transfer_usdc_email": {
        "name": "Large Transfer Email Notification",
        "trigger_type": "email",
        "config": {
            "host": "smtp.gmail.com",
            "port": 465,
            "username": {
                "type": "plain",
                "value": "your_email@gmail.com"
            },
            "password": {
                "type": "plain",
                "value": "SMTP_PASSWORD"
            },
            "message": {
                "title": "large_transfer_usdc_email triggered",
                "body": "Large transfer of ${events.0.args.value} USDC from ${events.0.args.from} to ${events.0.args.to} | https://etherscan.io/tx/${transaction.hash}#eventlog"
            },
            "sender": "your_email@gmail.com",
            "recipients": [\
                "recipient1@example.com",\
                "recipient2@example.com"\
            ]
        }
    }
}
对于 Gmail,你需要使用“应用密码”而不是你的常规密码。启用 2FA 并在你的 Google 帐户设置中生成应用密码。
步骤 4:运行 Monitor

本地部署:

./openzeppelin-monitor

Docker 部署:

cargo make docker-compose-up
接下来会发生什么

运行后,monitor 将:

  1. 每分钟检查新的以太坊区块

  2. 监视超过 10,000 USDC 的 USDC 转账

  3. 在发生大型转账时通过 Slack 和电子邮件发送通知

自定义选项
  • 调整阈值: 修改 "value > 10000000000" 以更改最小转账金额

  • 监控其他代币: 为不同的 ERC20 代币创建新的 monitor 配置

  • 添加更多网络: 配置其他 EVM 网络(Polygon、BSC 等)

示例 2:监控 DEX 交易(Stellar)

此示例监控 Stellar 主网上的大型 DEX 交易。

步骤 1:网络配置

创建 Stellar 主网配置:

## 仅在你尚未运行自动设置脚本时才需要(选项 1:自动设置)
cp examples/config/networks/stellar_mainnet.json config/networks/stellar_mainnet.json

关键配置详情:

{
  "network_type": "Stellar",
  "slug": "stellar_mainnet",
  "name": "Stellar Mainnet",
  "rpc_urls": [\
     {\
      "type_": "rpc",\
      "url": {\
        "type": "plain",\
        "value": "YOUR_RPC_URL_HERE"\
      },\
      "weight": 100\
    }\
  ],
  "network_passphrase": "Public Global Stellar Network ; September 2015",
  "block_time_ms": 5000,
  "confirmation_blocks": 2,
  "cron_schedule": "0 */1 * * * *",
  "max_past_blocks": 20,
  "store_blocks": true
}
步骤 2:Monitor 配置

设置 DEX 交易 monitor:

## 仅在你尚未运行自动设置脚本时才需要(选项 1:自动设置)
cp examples/config/monitors/stellar_swap_dex.json config/monitors/stellar_swap_dex.json
cp examples/config/filters/stellar_filter_block_number.sh config/filters/stellar_filter_block_number.sh

Monitor 配置概览:

{
  "name": "Large Swap By Dex",
  "paused": false,
  "networks": ["stellar_mainnet"],
  "addresses": [\
    {\
     "address": "CA6PUJLBYKZKUEKLZJMKBZLEKP2OTHANDEOWSFF44FTSYLKQPIICCJBE",\
      "contract_spec": [\
        {\
          "function_v0": {\
            "doc": "",\
            "name": "swap",\
            "inputs": [\
              {\
                "doc": "",\
                "name": "user",\
                "type_": "address"\
              },\
              {\
                "doc": "",\
                "name": "in_idx",\
                "type_": "u32"\
              },\
              {\
                "doc": "",\
                "name": "out_idx",\
                "type_": "u32"\
              },\
              {\
                "doc": "",\
                "name": "in_amount",\
                "type_": "u128"\
              },\
              {\
                "doc": "",\
                "name": "out_min",\
                "type_": "u128"\
              }\
            ],\
            "outputs": ["u128"]\
          }\
        }\
      ]\
    }\
  ],
  "match_conditions": {
    "functions": [\
      {\
        "signature": "swap(Address,U32,U32,U128,U128)",\
        "expression": "out_min > 1000000000"\
      }\
    ],
    "events": [],
    "transactions": [\
      {\
        "status": "Success",\
        "expression": null\
      }\
    ]
  },
  "trigger_conditions": [\
    {\
      "script_path": "./config/filters/stellar_filter_block_number.sh",\
      "language": "bash",\
      "arguments": ["--verbose"],\
      "timeout_ms": 1000\
    }\
  ],
  "triggers": ["stellar_large_swap_by_dex_slack"]
}
- contract_spec 字段对于 Stellar 合约是可选的。如果未提供,monitor 会自动从链中获取合约的 SEP-48 接口<br> <br>- 你可以使用 Stellar Contract Explorer 探索 Stellar 合约接口<br> <br>- 表达式 "out_min > 1000000000" 监控最小输出超过 10 亿个代币的交易
步骤 3:通知设置

为 Stellar 交易设置 Slack 通知:

## 仅在你尚未运行自动设置脚本时才需要(选项 1:自动设置)
cp examples/config/triggers/slack_notifications.json config/triggers/slack_notifications.json

Slack 配置:

{
  "stellar_large_swap_by_dex_slack": {
    "name": "Large Swap By Dex Slack Notification",
    "trigger_type": "slack",
    "config": {
      "slack_url": {
        "type": "plain",
        "value": "slack-webhook-url"
      },
      "message": {
        "title": "large_swap_by_dex_slack triggered",
        "body": "${monitor.name} triggered because of a large swap of ${functions.0.args.out_min} tokens | https://stellar.expert/explorer/public/tx/${transaction.hash}"
      }
    }
  }
}
步骤 4:运行 Monitor

本地部署:

./openzeppelin-monitor

Docker 部署:

cargo make docker-compose-up
接下来会发生什么

运行后,monitor 将:

  1. 每分钟检查新的 Stellar 区块

  2. 监视大型 DEX 交易

  3. 在发生大型交易时通过 Slack 发送通知

后续步骤

既然你已经运行了 OpenZeppelin Monitor,以下是一些建议:

测试和验证

安全和最佳实践

高级配置

获取帮助

  • 检查 GitHub Issues 以了解已知问题

  • 查看 用户文档 以了解详细的配置选项

  • 加入 OpenZeppelin 社区以获得支持

从简单的监控场景开始,逐步增加复杂性。这有助于你了解系统的工作方式,并使故障排除更容易。

← 用户文档

架构指南 →

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

0 条评论

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