一个用于周期性检测 EVM 链(当前以 BSC 为主)上地址原生代币余额,并在余额超出配置阈值时通过多种 webhook(企业微信 / 飞书(Lark) / Telegram)发送告警的轻量级守护程序。
下载release文件执行
支持的命令行参数:
-host: 监听地址 (默认: 127.0.0.1)-port: 监听端口 (默认: 12808)-debug: 启用调试模式
balance-bot/
├── internal/
│ ├── config/ # 配置管理
│ ├── core/ # 核心业务逻辑
│ └── utils/ # 通用工具
├── main.go # 程序入口
└── config.json # 配置文件
- 周期性按
config.json中的interval(秒)检查每个地址的原生代币余额。 - 当余额低于
min或高于max时发送告警消息。 - 支持通过企业微信、飞书(Lark)、Telegram webhook 发送告警。
- 自动生成
config.json示例(如果项目目录下没有该文件)。 - 日志系统:使用
slog+ 按天轮转的文件写入(logs/目录)。
程序使用项目根目录下的 config.json。如果不存在,程序会写入一个示例文件并退出一次,用户需编辑后再次运行。
示例内容:
{
"webhook": {
"wecom": "",
"lark": "",
"telegram_token": "",
"telegram_chat_id": ""
},
"interval": 30,
"tokens": [
{
"address": "0x1234567890abcdef1234567890abcdef12345678",
"chainId": "56",
"name": "MyWallet01",
"min": 0.1,
"max": 1000
}
],
"healthCheck": {
"interval": 10,
"warnCount": 3
}
}字段说明:
webhook.wecom:企业微信机器人 webhook URL(可选)。webhook.lark:飞书(Lark) 机器人 webhook URL(可选)。webhook.telegram_token:Telegram Bot token(可选)。webhook.telegram_chat_id:Telegram chat id(可选)。interval:余额检测间隔(秒),默认 30 秒。tokens:要监控的地址列表:address(必填):钱包地址。chainId(可选):链 ID(默认56,即 BSC)。name(可选):地址别名,用于通知展示。min(可选):低于该值发送告警(以原生代币为单位,如 BNB/ETH)。默认0.1(见源码默认值)。max(可选):高于该值发送告警(默认不限制)。
healthCheck.interval:健康检查间隔(秒),默认 10 秒。healthCheck.warnCount:未收到健康 ping 后触发告警的次数,默认 3 次。
注意:当前只查询原生链币(如 BNB/ETH)的余额,不包含 ERC20/ERC721 等代币的余额查询。
- 默认日志目录:
logs/,按天轮转,同时输出到 stdout。 - 若想自定义日志级别或轮转策略,参考
internal/utils/logger.go中InitLogger/NewEnhancedLogger的参数。
-
当余额低于
min,通知示例:"
⚠️ Balance for 0x1234**5678(MyWallet01) on chain 56 is below minimum 0.100000: 0.050000" -
当余额高于
max,类似格式。 -
健康检查告警示例:
⚠ Health check timeout for taoli-tools, last heartbeat at 2025-10-16T10:31:25+08:00
- 地址余额通过 JSON-RPC
eth_getBalance获取,默认 decimals=18(源码中用于将 wei 转为浮点数)。 - BSC RPC 列表位于
internal/core/evm.go的BSC_RPC,使用轮询索引以分散请求压力。 - HTTP 请求使用
fasthttp客户端封装;SendPost/SendGet 均有统一处理与 JSON 编解码。
- 仅支持原生代币余额查询,若需 ERC20 代币支持需扩展:
- 查询合约
balanceOf,并处理 token 的 decimals 值。
- 查询合约
- 当前只为链 ID
56提供 RPC 列表,添加其它链需要在GetRPC中扩展并提供 RPC 列表。 - 大量地址或非常短的间隔可能需要调整 HTTP 客户端连接数与轮询策略以避免 RPC 被限流。
- 支持 ERC20 token 余额与 token 配置(合约地址 + decimals)。
- RPC 健康检查(失败次数达到阈值时从池中剔除并回退到备用 RPC)。
- 告警去重与严重等级(避免连续重复通知)。
请参阅仓库根目录的 LICENSE 文件。