# sniper-rs **Repository Path**: deepplayer/sniper-rs ## Basic Information - **Project Name**: sniper-rs - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-06 - **Last Updated**: 2026-08-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # sniper-rs 基于 Rust 的加密货币新币监控与告警系统。 程序轮询 Jupiter 的新发代币列表,将新代币写入本地 SQLite,然后通过三级事件队列查询 OKX DEX 的 5 分钟 K 线;当新代币在发现时的 5 分钟涨幅超过阈值(`close / open - 1 > 500`,即 500 倍以上)时,通过 SMTP 发送告警邮件。 ## 工作原理 1. 每 3 秒轮询 Jupiter `/tokens/v2/recent` 获取新发代币;若返回 429 限流,轮询间隔按 4s → 8s → 16s 指数退避(最长 60s),请求成功后恢复 3s。 2. 过滤:`updatedAt - createdAt > 30s` 且 5 分钟涨跌幅 < 0 的代币会被从数据库删除,不再处理。 3. 新代币(`INSERT OR IGNORE` 返回新增)写入 SQLite,并进入 Lv1 事件队列。 4. Lv1 立即查询 OKX 5 分钟 K 线,计算 `close / open - 1`: - 涨幅 ≤ 0:结束,不做任何处理; - 涨幅 > 500:发送告警邮件(主题「发现新的百倍币」); - 查询失败:按事件级别重试或降级。 > 注意:每个新代币只在发现时被检查一次;Lv2/Lv3 是失败后的补偿路径,并不会周期性复查已处理过的代币。 ## 事件队列 | 级别 | 触发时机 | 失败处理 | |------|----------|----------| | Lv1 | 事件驱动,有新代币立即处理,每批最多 4 条 | 不重试,直接降级到 Lv2 | | Lv2 | 降级后 5 秒触发 | 最多重试 2 次,再失败降级到 Lv3 | | Lv3 | 降级后 2 分钟触发 | 失败即放弃 | - 遇到 HTTP 429 限流时,在同一级别重新入队,200ms 后重试。 - OKX 请求全局限流:任意 1200ms 窗口内最多 1 个请求。 ## 模块说明 | 模块 | 职责 | |------|------| | `src/jupiter.rs` | 轮询 Jupiter 新代币,过滤、入库、入队 | | `src/queue.rs` | 三级事件队列、重试/降级、涨幅判断与告警触发 | | `src/okx.rs` | OKX DEX API 客户端、HMAC 签名、滑动窗口限流 | | `src/db.rs` | tokens 表增删查(turso 本地 SQLite) | | `src/email.rs` | SMTP 邮件发送(环境变量配置,BCC 群发) | | `src/logger.rs` | 北京时间彩色日志 | | `src/beijing_time.rs` | 北京时间工具 | | `src/main.rs` | 启动入口、环境变量校验、建表 | ## 配置 复制 `.env.example` 为 `.env` 并填写。程序启动时通过 `dotenvy` 自动加载。 | 环境变量 | 必填 | 说明 | |----------|------|------| | `OKX_API_KEY` | ✅ | OKX API Key | | `OKX_SECRET_KEY` | ✅ | OKX API Secret | | `OKX_PASSPHRASE` | ✅ | OKX API Passphrase | | `SMTP_HOST` | ✅ | SMTP 服务器地址,如 `smtp.exmail.qq.com` | | `SMTP_PORT` | 否 | SMTP 端口,默认 `465`(SMTPS) | | `SMTP_USERNAME` | ✅ | SMTP 登录用户名,同时作为发件人邮箱 | | `SMTP_PASSWORD` | ✅ | SMTP 密码/授权码 | | `EMAIL_FROM_NAME` | 否 | 发件人显示名称,默认 `Sniper Bot` | | `EMAIL_TO` | ✅ | 收件人邮箱,多个用英文逗号分隔(BCC 密送) | | `TOKENS_DB` | 否 | SQLite 数据库路径,默认 `./tokens.db` | ### 注入到 shell 环境(可选) 程序启动时通过 `dotenvy` 自动加载 `.env`,一般无需手动注入。如需把 `.env` 变量注入当前 shell(例如给其他命令行工具使用),可以 source 本仓库的脚本: ```bash source ./envsetup.sh # 加载 .env,覆盖已存在的同名变量 source ./envsetup.sh --keep # 保留已存在的变量(不覆盖) source ./envsetup.sh path/to/.env # 加载指定文件 ``` 脚本默认覆盖已存在的变量,支持注释、引号和 `export` 前缀,并兼容 CRLF 换行。 ## 运行 ```bash # 编译 cargo build --release cargo zigbuild --release --target aarch64-unknown-linux-musl # 运行(需先配置 .env) cargo run --release ``` ### 测试邮件 ```bash cargo run --example test_email ["自定义内容"] cargo zigbuild --release --target aarch64-unknown-linux-musl --example test_email ``` ## 数据库 启动时自动创建 `tokens` 表(`id` / `symbol` / `created_at` / `updated_at`),无需手动初始化。 ## 许可证 MIT