本文档是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/ 进行安装。 |
我们提供了两种设置路径来帮助你入门:
为了获得最快的设置体验,请使用我们的自动脚本,它可以为你处理一切。
setup_and_run.sh
脚本提供了一个完整的解决方案,可以:
从源代码构建 monitor 应用程序
将示例配置从 examples/
复制到 config/
主要区块链的网络配置
预配置的 monitor 示例(USDC 转账、Stellar DEX 交易)
必需的过滤器脚本和基本触发器通知
验证所有配置以确保正确设置
可选地运行 monitor 以验证一切正常
git clone https://github.com/openzeppelin/openzeppelin-monitor
cd openzeppelin-monitor
chmod +x setup_and_run.sh
./setup_and_run.sh
该脚本在整个过程中提供彩色输出和清晰的指导。
完成后,你将拥有:
一个完全构建的 OpenZeppelin Monitor
准备好定制的示例配置
关于后续步骤的明确指导
下一步:
. 自定义 config/
目录中的复制配置
. 更新 RPC URL 和通知凭据
. 使用 ./openzeppelin-monitor
运行 monitor
设置脚本创建带有占位符值的工作配置。在开始实际监控之前,请记住使用实际的 RPC 端点和通知凭据更新你的文件。 |
适用于喜欢更多控制设置过程的用户。
git clone https://github.com/openzeppelin/openzeppelin-monitor
cd openzeppelin-monitor
cargo build --release
mv ./target/release/openzeppelin-monitor .
对于容器化部署:
docker compose up
默认情况下,Docker Compose 使用 Dockerfile.development 。对于生产环境,请设置:<br>DOCKERFILE=Dockerfile.production 在运行命令之前。 |
命令 | 描述 |
---|---|
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
有关详细的配置选项,请参阅 基本配置。
现在让我们设置实际的监控场景。选择与你的需求匹配的示例:
此示例监控以太坊主网上的大型 USDC 转账,并在转账超过 10,000 USDC 时发送通知。
创建以太坊主网配置:
## 仅在你尚未运行自动设置脚本时才需要(选项 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 等提供商,或运行你自己的节点。 |
设置 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 合约 |
## 仅在你尚未运行自动设置脚本时才需要(选项 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 帐户设置中生成应用密码。 |
本地部署:
./openzeppelin-monitor
Docker 部署:
cargo make docker-compose-up
运行后,monitor 将:
每分钟检查新的以太坊区块
监视超过 10,000 USDC 的 USDC 转账
在发生大型转账时通过 Slack 和电子邮件发送通知
调整阈值: 修改 "value > 10000000000"
以更改最小转账金额
监控其他代币: 为不同的 ERC20 代币创建新的 monitor 配置
添加更多网络: 配置其他 EVM 网络(Polygon、BSC 等)
此示例监控 Stellar 主网上的大型 DEX 交易。
创建 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
}
设置 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 亿个代币的交易 |
为 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}"
}
}
}
}
本地部署:
./openzeppelin-monitor
Docker 部署:
cargo make docker-compose-up
运行后,monitor 将:
每分钟检查新的 Stellar 区块
监视大型 DEX 交易
在发生大型交易时通过 Slack 发送通知
既然你已经运行了 OpenZeppelin Monitor,以下是一些建议:
验证你的 RPC 端点是否正常工作
使用小额交易测试通知通道
使用环境变量或 Hashicorp Cloud Vault 来存储凭据
定期更新你的 RPC 端点和 monitor 配置
在 examples/config/monitors
目录 中探索其他示例
同时设置对多个网络的监控
为复杂条件配置自定义过滤器脚本
检查 GitHub Issues 以了解已知问题
查看 用户文档 以了解详细的配置选项
加入 OpenZeppelin 社区以获得支持
从简单的监控场景开始,逐步增加复杂性。这有助于你了解系统的工作方式,并使故障排除更容易。 |
- 原文链接: docs.openzeppelin.com/mo...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!