rwadurian/docs/mining-ecosystem-architectu...

404 lines
33 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 榴莲生态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. 开发顺序建议
1. **Phase 1: 数据同步**
- contribution-service: CDC 消费者实现
- 同步用户、认种、推荐关系数据
2. **Phase 2: 算力计算**
- contribution-service: 算力计算逻辑
- 老用户算力初始化
3. **Phase 3: 挖矿分配**
- mining-service: 全局状态管理
- mining-service: 每日分配、每分钟销毁
4. **Phase 4: 交易功能**
- trading-service: 买卖逻辑
- trading-service: K线生成
5. **Phase 5: 管理后台**
- mining-admin-service: 配置管理、监控
- mining-admin-web: 前端实现
6. **Phase 6: 用户端**
- mining-app: Flutter App 实现
---
## 9. 文档索引
| 服务/应用 | 开发指导文档路径 |
|----------|----------------|
| contribution-service | [backend/services/contribution-service/DEVELOPMENT_GUIDE.md](../backend/services/contribution-service/DEVELOPMENT_GUIDE.md) |
| mining-service | [backend/services/mining-service/DEVELOPMENT_GUIDE.md](../backend/services/mining-service/DEVELOPMENT_GUIDE.md) |
| trading-service | [backend/services/trading-service/DEVELOPMENT_GUIDE.md](../backend/services/trading-service/DEVELOPMENT_GUIDE.md) |
| mining-admin-service | [backend/services/mining-admin-service/DEVELOPMENT_GUIDE.md](../backend/services/mining-admin-service/DEVELOPMENT_GUIDE.md) |
| mining-admin-web | [frontend/mining-admin-web/DEVELOPMENT_GUIDE.md](../frontend/mining-admin-web/DEVELOPMENT_GUIDE.md) |
| mining-app | [frontend/mining-app/DEVELOPMENT_GUIDE.md](../frontend/mining-app/DEVELOPMENT_GUIDE.md) |