33 KiB
33 KiB
榴莲生态2.0 挖矿系统架构总览
1. 系统架构图
┌─────────────────────────────────────────────────────────────────────────────────┐
│ 用户端应用 │
├─────────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────┐ ┌─────────────────────────┐ │
│ │ Mining App │ │ Mining Admin Web │ │
│ │ (Flutter 用户端) │ │ (Next.js 管理后台) │ │
│ │ │ │ │ │
│ │ - 贡献值展示 │ │ - 系统配置管理 │ │
│ │ - 实时收益显示 │ │ - 用户查询 │ │
│ │ - 买卖兑换 │ │ - 报表统计 │ │
│ │ - K线图 │ │ - 初始化任务 │ │
│ │ - 资产展示 │ │ - 审计日志 │ │
│ └───────────┬─────────────┘ └───────────┬─────────────┘ │
│ │ │ │
└──────────────┼────────────────────────────────────────┼──────────────────────────┘
│ │
▼ ▼
┌─────────────────────────────────────────────────────────────────────────────────┐
│ API Gateway (Nginx) │
└─────────────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────────┐
│ 微服务层 │
├─────────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐ │
│ │ Contribution │ │ Mining │ │ Trading │ │
│ │ Service │ │ Service │ │ Service │ │
│ │ (贡献值/算力) │ │ (挖矿分配) │ │ (交易) │ │
│ │ Port: 3020 │ │ Port: 3021 │ │ Port: 3022 │ │
│ ├─────────────────────┤ ├─────────────────────┤ ├─────────────────────┤ │
│ │ - CDC数据同步 │ │ - 积分股分配 │ │ - 买卖撮合 │ │
│ │ - 算力计算 │ │ - 每分钟销毁 │ │ - K线生成 │ │
│ │ - 明细账管理 │ │ - 价格计算 │ │ - 手续费处理 │ │
│ │ - 过期处理 │ │ - 全局状态 │ │ - 流通池管理 │ │
│ └──────────┬──────────┘ └──────────┬──────────┘ └──────────┬──────────┘ │
│ │ │ │ │
│ └────────────────────────┼────────────────────────┘ │
│ │ │
│ ┌───────────▼───────────┐ │
│ │ Mining Admin │ │
│ │ Service │ │
│ │ (挖矿管理) │ │
│ │ Port: 3023 │ │
│ ├───────────────────────┤ │
│ │ - 配置管理 │ │
│ │ - 系统监控 │ │
│ │ - 数据初始化 │ │
│ │ - 审计日志 │ │
│ └───────────────────────┘ │
│ │
├─────────────────────────────────────────────────────────────────────────────────┤
│ 现有服务 (集成) │
│ │
│ ┌─────────────────────┐ ┌─────────────────────┐ ┌─────────────────────┐ │
│ │ Identity │ │ Wallet │ │ Planting │ │
│ │ Service │ │ Service │ │ Service │ │
│ │ (用户) │ │ (钱包) │ │ (认种) │ │
│ └─────────────────────┘ └─────────────────────┘ └─────────────────────┘ │
│ │
│ ┌─────────────────────┐ │
│ │ Referral │ │
│ │ Service │ │
│ │ (推荐关系) │ │
│ └─────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────────────────┐
│ 基础设施层 │
├─────────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ PostgreSQL │ │ Kafka │ │ Redis │ │ Debezium Connect │ │
│ │ (数据库) │ │ (消息队列) │ │ (缓存) │ │ (CDC) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────────┘
2. 服务职责与端口分配
| 服务名称 | 端口 | 数据库 | 核心职责 |
|---|---|---|---|
| contribution-service | 3020 | rwa_contribution | 算力计算、CDC同步、明细账 |
| mining-service | 3021 | rwa_mining | 积分股分配、销毁、价格计算 |
| trading-service | 3022 | rwa_trading | 买卖交易、K线、流通池 |
| mining-admin-service | 3023 | rwa_mining_admin | 配置管理、监控、初始化 |
3. 数据流向
3.1 算力计算流程
┌─────────────────────────────────────────────────────────────────────────┐
│ 算力计算数据流 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ Identity Service Planting Service Referral Service │
│ │ │ │ │
│ │ CDC │ CDC │ CDC │
│ ▼ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Debezium Kafka Connect │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Contribution Service │ │
│ │ │ │
│ │ 1. 同步用户数据 (synced_users) │ │
│ │ 2. 同步认种数据 (synced_adoptions) │ │
│ │ 3. 同步推荐关系 (synced_referrals) │ │
│ │ 4. 计算用户算力: │ │
│ │ - 个人算力 (70%) │ │
│ │ - 团队层级算力 (0.5% × N级) │ │
│ │ - 团队额外奖励 (2.5% × N档) │ │
│ │ 5. 记录算力明细账 │ │
│ │ 6. 生成每日算力快照 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ │ Event: daily-snapshot-created │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Mining Service │ │
│ │ │ │
│ │ 根据算力快照分配每日积分股 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
3.2 挖矿分配流程
┌─────────────────────────────────────────────────────────────────────────┐
│ 挖矿分配数据流 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ 每日凌晨定时任务: │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Mining Service │ │
│ │ │ │
│ │ 1. 获取昨日算力快照 │ │
│ │ 2. 计算全网总算力 │ │
│ │ 3. 计算每个用户算力占比 │ │
│ │ 4. 根据占比分配当日积分股: │ │
│ │ - 第1-2年: 每日 1369.86 股 │ │
│ │ - 第3-4年: 每日 684.93 股 │ │
│ │ - 依次减半... │ │
│ │ 5. 更新用户积分股账户 │ │
│ │ 6. 记录挖矿明细账 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 每分钟定时任务: │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Mining Service │ │
│ │ │ │
│ │ 1. 计算当前销毁量: │ │
│ │ 销毁量 = (100亿 - 黑洞量) ÷ 剩余分钟数 │ │
│ │ 2. 执行销毁(进入黑洞) │ │
│ │ 3. 重新计算价格: │ │
│ │ 价格 = 积分股池 ÷ (100.02亿 - 黑洞 - 流通池) │ │
│ │ 4. 记录销毁明细账 │ │
│ │ 5. 记录价格快照 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
3.3 交易流程
┌─────────────────────────────────────────────────────────────────────────┐
│ 交易数据流 (卖出) │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ 用户发起卖出: │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Trading Service │ │
│ │ │ │
│ │ 1. 获取当前价格 │ │
│ │ 2. 计算卖出倍数: │ │
│ │ 倍数 = (100亿 - 销毁量) ÷ (200万 - 流通池量) │ │
│ │ 3. 计算卖出销毁量: │ │
│ │ 销毁量 = 卖出量 × 倍数 │ │
│ │ 4. 计算交易额: │ │
│ │ 交易额 = (卖出量 + 销毁量) × 价格 │ │
│ │ 5. 计算手续费 (10%) │ │
│ │ 6. 执行交易: │ │
│ │ - 扣减用户积分股 │ │
│ │ - 积分股进入流通池 │ │
│ │ - 从积分股池扣减绿积分给用户 │ │
│ │ - 手续费注入积分股池 │ │
│ │ 7. 记录交易明细账 │ │
│ │ 8. 更新K线数据 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ │ Event: trade-completed │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Mining Service │ │
│ │ │ │
│ │ 1. 更新流通池状态 │ │
│ │ 2. 触发卖出销毁(提前销毁未来的量) │ │
│ │ 3. 重新计算每分钟销毁量 │ │
│ │ 4. 重新计算价格 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
4. 服务间通信
4.1 事件驱动 (Kafka Topics)
| Topic | 发布者 | 订阅者 | 说明 |
|---|---|---|---|
dbserver1.rwa_identity.users |
Debezium | contribution-service | 用户CDC |
dbserver1.rwa_planting.adoptions |
Debezium | contribution-service | 认种CDC |
dbserver1.rwa_referral.referral_relations |
Debezium | contribution-service | 推荐关系CDC |
contribution.daily-snapshot-created |
contribution-service | mining-service | 每日算力快照 |
mining.shares-distributed |
mining-service | trading-service, mining-admin | 积分股分配完成 |
mining.price-updated |
mining-service | trading-service, mining-admin | 价格更新 |
trading.trade-completed |
trading-service | mining-service | 交易完成 |
mining-admin.config-updated |
mining-admin-service | 所有服务 | 配置更新 |
4.2 同步调用 (HTTP)
mining-admin-service → contribution-service: 获取用户算力详情
mining-admin-service → mining-service: 获取全局状态、用户积分股
mining-admin-service → trading-service: 获取交易统计、K线数据
trading-service → mining-service: 获取当前价格、全局状态
trading-service → wallet-service: 扣减/增加绿积分
5. 关键数据表关系
5.1 跨服务数据关联
所有服务统一使用 account_sequence 作为跨服务关联键,不使用 userId
┌─────────────────────────────────────────────────────────────────────────┐
│ account_sequence 关联 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ Identity Service │
│ └── users.account_sequence ────────────────────────────────┐ │
│ │ │
│ Contribution Service │ │
│ ├── synced_users.account_sequence ─────────────────────────┤ │
│ ├── contribution_accounts.account_sequence ────────────────┤ │
│ └── contribution_records.account_sequence ─────────────────┤ │
│ │ │
│ Mining Service │ │
│ ├── share_accounts.account_sequence ───────────────────────┤ │
│ └── daily_mining_records.account_sequence ─────────────────┤ │
│ │ │
│ Trading Service │ │
│ ├── trade_orders.account_sequence ─────────────────────────┤ │
│ └── trade_transactions.account_sequence ───────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
5.2 明细账设计原则
每个服务都维护自己的明细账,确保数据可追溯:
| 服务 | 明细账表 | 记录内容 |
|---|---|---|
| contribution-service | contribution_records | 每笔算力来源 |
| mining-service | daily_mining_records | 每日挖矿分配 |
| mining-service | burn_records | 每次销毁详情 |
| trading-service | trade_transactions | 每笔交易流水 |
6. 关键配置参数
6.1 贡献值配置
| 参数 | 默认值 | 说明 |
|---|---|---|
| base_contribution | 22617 | 基础贡献值 |
| increment_percentage | 0.3% | 每单位递增比例 |
| unit_size | 100 | 单位大小(棵) |
| personal_rate | 70% | 个人分配比例 |
| level_rate_per | 0.5% | 每级分配比例 |
| bonus_rate_per | 2.5% | 每档奖励比例 |
6.2 分配配置
| 阶段 | 时长 | 总量 | 每日分配 |
|---|---|---|---|
| 第1阶段 | 2年 | 100万 | 1369.86 |
| 第2阶段 | 2年 | 50万 | 684.93 |
| 第3阶段 | 2年 | 25万 | 342.47 |
| ... | ... | ... | ... |
6.3 交易配置
| 参数 | 默认值 | 说明 |
|---|---|---|
| buy_fee_rate | 10% | 买入手续费 |
| sell_fee_rate | 10% | 卖出手续费 |
| transfer_enabled | false | 转账开关 |
7. 部署架构
┌─────────────────────────────────────────────────────────────────────────┐
│ Docker Compose │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ 服务容器: │
│ ├── contribution-service (3020) │
│ ├── mining-service (3021) │
│ ├── trading-service (3022) │
│ └── mining-admin-service (3023) │
│ │
│ 基础设施容器: │
│ ├── postgres (5432) - 已有,新增 schema │
│ ├── kafka (9092) - 已有 │
│ ├── redis (6379) - 已有 │
│ └── debezium-connect (8084) - 已有,新增 connector │
│ │
│ 前端容器: │
│ ├── mining-admin-web (3100) │
│ └── api-gateway (nginx) - 已有,新增路由 │
│ │
└─────────────────────────────────────────────────────────────────────────┘
8. 开发顺序建议
-
Phase 1: 数据同步
- contribution-service: CDC 消费者实现
- 同步用户、认种、推荐关系数据
-
Phase 2: 算力计算
- contribution-service: 算力计算逻辑
- 老用户算力初始化
-
Phase 3: 挖矿分配
- mining-service: 全局状态管理
- mining-service: 每日分配、每分钟销毁
-
Phase 4: 交易功能
- trading-service: 买卖逻辑
- trading-service: K线生成
-
Phase 5: 管理后台
- mining-admin-service: 配置管理、监控
- mining-admin-web: 前端实现
-
Phase 6: 用户端
- mining-app: Flutter App 实现
9. 文档索引
| 服务/应用 | 开发指导文档路径 |
|---|---|
| contribution-service | backend/services/contribution-service/DEVELOPMENT_GUIDE.md |
| mining-service | backend/services/mining-service/DEVELOPMENT_GUIDE.md |
| trading-service | backend/services/trading-service/DEVELOPMENT_GUIDE.md |
| mining-admin-service | backend/services/mining-admin-service/DEVELOPMENT_GUIDE.md |
| mining-admin-web | frontend/mining-admin-web/DEVELOPMENT_GUIDE.md |
| mining-app | frontend/mining-app/DEVELOPMENT_GUIDE.md |