4.8 KiB
4.8 KiB
架构设计
总体概览
┌───────────────┐ ┌────────────────┐ ┌─────────────────────┐
│ Client/BC系统 │ ---> │ Netts Energy API│ ---> │ Netts.io (Host Mode) │
└───────────────┘ └────────────────┘ └─────────────────────┘
│ │
│ REST /api/v1/energy/rent│
▼ ▼
┌──────────────────────────────────────────────────────────────────────────┐
│ Netts Energy Orchestrator │
│ ┌────────────┐ ┌──────────────────┐ ┌──────────────────────────────┐ │
│ │ HTTP Server│→│ Energy Service │→│ Netts Client (API v2) │ │
│ │ (chi) │ │ - 业务规则 │ │ - usdt/analyze │ │
│ │ │ │ - Host Mode判断 │ │ - time/status/add/order │ │
│ └────────────┘ └──────────────────┘ └──────────────────────────────┘ │
│ ▲ │ │
│ └──────────── config/logger ────────┘ │
└──────────────────────────────────────────────────────────────────────────┘
模块分解
1. cmd/server
- 应用入口,解析
-config参数。 - 初始化配置、日志、Netts Client、业务服务与 HTTP Server。
2. internal/config
- 负责加载 YAML 配置与环境变量覆盖。
- 内置默认值、校验逻辑,确保 API Key 与阈值正确。
3. internal/logger
- 基于
log/slog的结构化日志工厂。 - 支持 text / json 输出格式。
4. internal/netts
- 轻量封装 Netts API。
- 具备重试、User-Agent、X-Real-IP 注入、错误码处理等。
- 在
GetAddressStatus中把 “Address not found” 映射为可识别的ErrAddressNotFound。
5. internal/service
- 业务编排核心:
- 调用
usdt/analyze计算推荐能量; - 检查 Host Mode 状态,必要时自动
time/add; - 当周期低于阈值时,根据配置
targetCycles自动下单; - 返回分析详情、周期变化、下单记录。
- 调用
- 通过接口解耦,便于单元测试和未来 mock。
6. internal/http
- 使用
chi构建 REST API。 - 提供健康检查与
POST /api/v1/energy/rent主入口。 - 响应中包含分析、Host Mode 状态以及订单结果,方便上游系统直接使用。
关键流程
- 租赁请求:上游在归集前发送
from_address与to_address,可附带金额。 - 能量分析:调用 Netts
usdt/analyze获取推荐能量。 - Host Mode 确认:
- 如果地址未加入,且配置允许自动加入 ⇒ 调用
time/add。 - 否则直接报错,交由上游处理。
- 如果地址未加入,且配置允许自动加入 ⇒ 调用
- 周期管理:
- 读取
time/status。 - 若
cycles_remaining < minCycles⇒ 计算补足数量并调用time/order。 - 下单后可选等待
postOrderWait秒,再次查询状态。
- 读取
- 响应汇总:返回推荐能量、是否新增 Host Mode、下单详情、剩余周期、分析数据等。
与既有系统的协作
- 触发时机:在归集执行前(或按周期任务)调用本服务,确保地址有足够能量。
- 地址生命周期:推荐在创建新充值地址时即调用
rent接口,让服务负责 Host Mode 注册;现有地址可批量调用time/add或逐次触发。 - 成本监控:可据
analysis.cost_breakdown与OrderResult中的total_cost统计能量开销,并和旧的 Feee 系统成本对比。 - 告警策略:根据
cycles_after、status.cycles_remaining制定阈值告警;Netts 自带 webhook 可配合使用。
扩展点
- 多币种支持:Netts 文档提供更多接口(如
prices、usdt-public),可按需扩展。 - 持久化缓存:目前状态全由 Netts API 提供,如需本地缓存可在
service层引入数据库或 Redis。 - 批量调度:可增加定时任务扫描地址列表并调用
EnsureEnergy,形成全自动化闭环。