# RWADurian 榴莲认种平台 — 全景架构大纲

> 本文档是对 RWADurian 1.0（认种分配系统）与 2.0（算力挖矿系统）的完整业务与技术梳理。
> 可作为开发、运维、新成员 onboarding 的单一事实来源。

---

## 目录

1. [平台定位与核心概念](#1-平台定位与核心概念)
2. [系统全局拓扑](#2-系统全局拓扑)
3. [1.0 认种分配系统](#3-10-认种分配系统)
   - 3.1 基础设施层
   - 3.2 后端服务清单（13 个微服务）
   - 3.3 前端应用
   - 3.4 核心业务流程
4. [2.0 算力挖矿系统](#4-20-算力挖矿系统)
   - 4.1 部署模式
   - 4.2 后端服务清单（7 个微服务 + 1 前端）
   - 4.3 核心业务流程
5. [跨系统数据桥梁 — CDC](#5-跨系统数据桥梁--cdc)
6. [推荐层级体系](#6-推荐层级体系)
7. [认种与分配流程（1.0 核心）](#7-认种与分配流程10-核心)
8. [算力与挖矿流程（2.0 核心）](#8-算力与挖矿流程20-核心)
9. [代币与链上体系](#9-代币与链上体系)
10. [安全加固与运维要点](#10-安全加固与运维要点)
11. [关键文件索引](#11-关键文件索引)

---

## 1. 平台定位与核心概念

| 概念 | 说明 |
|------|------|
| **RWADurian** | 一个以真实榴莲果树为底层资产的 RWA（Real World Asset）认种参与平台 |
| **认种（Planting）** | 用户花费 USDT 认种一棵果树，每棵树价格 15,831 USDT |
| **推荐关系（Referral）** | 用户通过推荐码邀请新用户，形成无限层级的树形结构 |
| **分配（Reward）** | 每笔认种产生的资金按 10 种权益类型分配给系统账户和上级链路用户 |
| **授权层级（Authorization）** | 根据团队业绩（认种量、省市占比）授予社区/省公司/市公司等经营资格 |
| **算力（Contribution）** | 1.0 认种行为通过 CDC 同步到 2.0，转化为用户的算力值 |
| **挖矿（Mining）** | 2.0 系统按算力占比进行每秒级 Share Token 分配，模拟"挖矿"收益 |
| **eUSDT / fUSDT** | 链上 ERC-20 代币，分别代表"积分股"和"积分值"，可在 2.0 交易市场流通 |

---

## 2. 系统全局拓扑

```
┌─────────────────────────────────────────────────────────────────────────┐
│                           用户端                                        │
│   mobile-app (Flutter)     mining-app (Flutter)                        │
│   admin-web (Next.js 14)   mining-admin-web (Next.js 14)               │
└──────────────┬─────────────────────────────┬────────────────────────────┘
               │ HTTPS / Kong Gateway        │ HTTPS
               ▼                             ▼
┌──────────────────────────────┐  ┌──────────────────────────────────────┐
│     1.0 认种分配系统          │  │       2.0 算力挖矿系统                │
│  docker-compose.yml          │  │  docker-compose.2.0.yml              │
│                              │  │                                      │
│  13 NestJS 微服务            │  │  7 NestJS 微服务 + 1 前端            │
│  ┌─────────────────────────┐ │  │  ┌──────────────────────────────┐   │
│  │ identity   │ referral   │ │  │  │ auth        │ contribution  │   │
│  │ wallet     │ reward     │ │  │  │ mining      │ trading       │   │
│  │ planting   │ authorize  │ │  │  │ mining-admin│ mining-wallet │   │
│  │ blockchain │ admin      │ │  │  │ mining-blockchain            │   │
│  │ mpc        │ backup     │ │  │  └──────────────────────────────┘   │
│  │ leaderboard│ presence   │ │  │                                      │
│  │ reporting  │            │ │  │  mining-admin-web (Next.js)          │
│  └─────────────────────────┘ │  └──────────────────────────────────────┘
│                              │        ▲
│  ┌─────────────────────────┐ │        │ CDC (Debezium → Kafka)
│  │ PostgreSQL 16 (13 DB)   │─┼────────┘
│  │ Redis 7     (DB 0-11)   │ │
│  │ Kafka 7.5   (单 Broker) │ │  ┌──────────────────────────────────────┐
│  │ Debezium 2.5.4          │ │  │ 独立模式额外基础设施                  │
│  │ Zookeeper 7.5           │ │  │ postgres-2 / redis-2 / debezium-2   │
│  └─────────────────────────┘ │  └──────────────────────────────────────┘
│                              │
│  MPC System (Go, 9 服务)     │  KAVA 主网 / BSC
└──────────────────────────────┘  智能合约 (DurianUSDT, eUSDT, fUSDT)
```

---

## 3. 1.0 认种分配系统

### 3.1 基础设施层

| 组件 | 版本 | 端口 | 说明 |
|------|------|------|------|
| PostgreSQL | 16-alpine | 127.0.0.1:5432 | 13 个独立数据库，WAL logical 模式 |
| Redis | 7-alpine | 6379 | AOF 持久化，20 个 DB（DB 0-11 分配给各服务） |
| Kafka | 7.5.0 | 9092/9093/29092 | 单 Broker，auto-create topics |
| Zookeeper | 7.5.0 | 2181 | Kafka 协调 |
| Debezium | 2.5.4.Final | 127.0.0.1:8084 | CDC 连接器，ExtractNewRecordState SMT |

**关键配置：**
- `max_slot_wal_keep_size=10GB` — 防止 WAL 无限积压（历史事故：305GB）
- `max_replication_slots=20` / `max_wal_senders=20`
- Kafka 9093 端口为远程 MPC 访问预留（192.168.1.111）

### 3.2 后端服务清单

| 服务 | 端口 | Redis DB | 核心职责 |
|------|------|----------|----------|
| **identity-service** | 3000 | 0 | 用户注册/登录、KYC、SMS、头像、钱包地址创建 |
| **wallet-service** | 3001 | 1 | 钱包余额、冻结/解冻、充值/提现、区域账户 |
| **backup-service** | 3002 | — | 钱包私钥加密备份与恢复（限速 3次/天） |
| **planting-service** | 3003 | 2 | 认种订单创建 → 选省市 → 确认 → 支付 → 合同签署 |
| **referral-service** | 3004 | 3 | 推荐关系树、团队统计、龙虎榜分值计算 |
| **reward-service** | 3005 | 4 | 10 类权益分配、奖励待领/已领/过期状态机 |
| **mpc-service** | 3006 | 5 | MPC 密钥管理，桥接 Go 版 MPC System |
| **leaderboard-service** | 3007 | 6 | 用户排行榜 |
| **reporting-service** | 3008 | 7 | 系统账户报表聚合 |
| **authorization-service** | 3009 | 8 | 社区/省公司/市公司授权，月度考核评估 |
| **admin-service** | 3010 | 9 | 后台管理（版本、用户、CDC） |
| **presence-service** | 3011 | 10 | 用户在线状态（180s 窗口，60s 快照） |
| **blockchain-service** | 3012 | 11 | KAVA 链交互、充提监控、热钱包管理 |

**MPC System（Go 语言，独立网络）：**
- account-service / session-coordinator / message-router / server-party / server-party-api 等 9 个服务
- gRPC + WebSocket 通信
- TSS（门限签名）实现多方安全计算

### 3.3 前端应用

| 应用 | 技术栈 | 说明 |
|------|--------|------|
| **mobile-app** | Flutter (Dart) | 用户端 APP，17 个功能模块（认种/充值/提现/KYC/排行/交易等） |
| **admin-web** | Next.js 14 + React | 管理后台（仪表盘、用户管理、订单管理） |
| **mobile-upgrade** | Next.js 14 | APP 版本管理 & OTA 更新服务器 |

### 3.4 核心业务流程概览

```
用户注册 → 获取推荐码 → 被推荐人注册（建立推荐关系）
                                    ↓
                          用户充值 USDT（链上）
                                    ↓
                          创建认种订单（选省市 → 支付 → 签合同）
                                    ↓
                          触发 10 类权益分配（见第 7 章）
                                    ↓
                          CDC 同步到 2.0（算力 → 挖矿）
```

---

## 4. 2.0 算力挖矿系统

### 4.1 部署模式

| 模式 | 网络 | 基础设施 | 适用场景 |
|------|------|----------|----------|
| **Shared（默认）** | services_rwa-network | 复用 1.0 的 PG/Redis/Kafka | 同机部署 |
| **Standalone** | rwa-2-network | 独立 postgres-2/redis-2 + 远程 Kafka 9093 | 分机部署 |

### 4.2 后端服务清单

| 服务 | 端口 | Redis DB | 核心职责 |
|------|------|----------|----------|
| **contribution-service** | 3020 | 10 | CDC 消费 → 算力计算 → 15 级 + 3 阶梯分配 |
| **mining-service** | 3021 | 16 | 按秒分配 Share Token、挖矿账户管理 |
| **trading-service** | 3022 | 12 | eUSDT/fUSDT 交易撮合、做市商 |
| **mining-admin-service** | 3023 | 13 | 挖矿后台管理、池账户（销毁池/挖矿池） |
| **auth-service** | 3024 | 14 | 2.0 认证，CDC 同步 1.0 用户 |
| **mining-wallet-service** | 3025 | 15 | KAVA 链钱包管理 |
| **mining-blockchain-service** | 3026 | 8 | 链上操作（eUSDT/fUSDT/USDT）、区块扫描 |
| **mining-admin-web** | 3100 | — | 挖矿管理后台（Next.js） |

### 4.3 核心业务流程概览

```
1.0 认种订单 (MINING_ENABLED)
        ↓ Debezium CDC
contribution-service 消费 → 算力计算（个人70% + 团队15级7.5% + 奖励3阶7.5%）
        ↓ Outbox Event
mining-service 同步算力 → 每秒按占比分配 Share Token
        ↓
trading-service 提供 eUSDT/fUSDT 交易市场
        ↓
mining-blockchain-service 处理链上充提
```

---

## 5. 跨系统数据桥梁 — CDC

### 5.1 CDC 数据流

| 源（1.0 表） | Kafka Topic | 消费者（2.0） | 用途 |
|---------------|-------------|---------------|------|
| identity.user_accounts | `cdc.identity.public.user_accounts` | auth-service, admin-service, contribution-service | 同步用户注册 |
| identity.wallet_addresses | `cdc.identity.public.wallet_addresses` | auth-service | 同步钱包地址 |
| planting.planting_orders | `cdc.planting.public.planting_orders` | contribution-service | 同步认种订单 → 算力 |
| referral.referral_relationships | `cdc.referral.public.referral_relationships` | contribution-service | 同步推荐关系 → 团队算力 |

### 5.2 CDC 消息格式（ExtractNewRecordState 展平后）

```json
{
  "order_id": 1,
  "tree_count": 1,
  "account_sequence": "D25122700015",
  "status": "MINING_ENABLED",
  "__op": "c",
  "__table": "planting_orders",
  "__source_ts_ms": 1767892060857,
  "__deleted": "false"
}
```

### 5.3 消费顺序保证（contribution-service）

contribution-service 采用 **Collect-Sort-Process** 模式：
1. **Phase 1**: 消费 `cdc.identity.public.user_accounts`（全量用户）
2. **Phase 2**: 消费 `cdc.referral.public.referral_relationships`（全量推荐关系）
3. **Phase 3**: 消费 `cdc.planting.public.planting_orders`（收集 → 按 order_id 排序 → 顺序处理）

**严格顺序的原因**：计算团队算力必须先有推荐关系数据，否则分配错误。

### 5.4 幂等性保证

```
每条 CDC 消息 → INSERT ProcessedCdcEvent(topic, offset)
               → 若 UNIQUE 冲突则跳过
               → 业务逻辑在同一事务内执行
               → Serializable 隔离级别
```

---

## 6. 推荐层级体系

### 6.1 数据模型

```
ReferralRelationship（不可变）
├── userId / accountSequence（唯一标识）
├── referrerId（直接推荐人，null = 根节点）
├── ancestorPath: BigInt[]（从直接推荐人到根的链路）
├── depth（链路深度，0 = 根节点）
├── myReferralCode / usedReferralCode
└── directReferralCount / activeDirectCount

TeamStatistics（实时更新）
├── selfPlantingCount / selfPlantingAmount
├── totalTeamPlantingCount / totalTeamPlantingAmount
├── maxSingleTeamPlantingCount（最大单腿）
├── effectivePlantingCountForRanking（龙虎榜分值）
└── provinceCityDistribution: JSON
```

### 6.2 推荐树结构示例

```
Root (depth=0, ancestorPath=[])
├── A (depth=1, ancestorPath=[Root])
│   ├── B (depth=2, ancestorPath=[A, Root])
│   │   └── D (depth=3, ancestorPath=[B, A, Root])
│   └── C (depth=2, ancestorPath=[A, Root])
└── E (depth=1, ancestorPath=[Root])
```

### 6.3 龙虎榜分值公式

```
effectivePlantingCountForRanking = totalTeamPlantingCount - maxSingleTeamPlantingCount
```

**设计目的**：鼓励均衡发展，防止"单腿烧伤"。

### 6.4 授权层级与考核

| 层级 | 要求 | 权益 |
|------|------|------|
| **社区（Community）** | 直推 ≥5，认种 ≥500 棵 | 社区权益分配 576 USDT/棵 |
| **市公司（City）** | 团队 ≥10,000 棵，本市占比 ≥50% | 市团队 288 + 市区域 252 USDT/棵 |
| **省公司（Province）** | 团队 ≥20,000 棵，本省占比 ≥60% | 省团队 144 + 省区域 108 USDT/棵 |

**月度考核**：authorization-service 每月评估，根据阶梯目标判断是否保留/降级授权。

---

## 7. 认种与分配流程（1.0 核心）

### 7.1 认种订单生命周期

```
CREATED → 选省市 → 确认省市 → PAID（冻结资金）→ 合同签署 → 确认扣款 → 分配触发
                                    │                  │
                                    │            contract.signed ✓
                                    │            contract.expired ✗ → 权益归系统
                                    │
                              Outbox 发布事件:
                              planting.planting.created → referral-service
                              planting-events → authorization-service
```

### 7.2 三阶段支付安全机制

| 阶段 | 操作 | 说明 |
|------|------|------|
| **冻结** | wallet.freezeForPlanting() | 资金不可用但未扣除 |
| **合同** | 等待 contract.signed / expired | 24 小时签署窗口 |
| **确认** | wallet.confirmPlantingDeduction() | 冻结 → 实际扣款，触发分配 |

### 7.3 十类权益分配（每棵树 15,831 USDT）

#### 系统费用（自动分配，10,863 USDT）

| # | 类型 | 金额 | 目标账户 |
|---|------|------|----------|
| 1 | 成本费 | 2,800 | S0000000002 |
| 2 | 运营费 | 2,100 | S0000000003 |
| 3 | 总部基金 | 203 | S0000000001 |
| 4 | RWAD 底池 | 5,760 | S0000000004 |

#### 用户权益（基于推荐链，4,968 USDT + 算力）

| # | 类型 | 金额 | 分配对象 | 附加 |
|---|------|------|----------|------|
| 5 | 分享权益 | 3,600 | 直接推荐人 | 无推荐人 → S0000000005 |
| 6 | 省团队权益 | 144 | 链路中最近的省公司授权者 | — |
| 7 | 省区域权益 | 108 | 被授权省份 | +1% 算力 |
| 8 | 市团队权益 | 288 | 链路中最近的市公司授权者 | — |
| 9 | 市区域权益 | 252 | 被授权城市 | +2% 算力 |
| 10 | 社区权益 | 576 | 链路中最近的社区管理者 | — |

### 7.4 奖励状态机

```
PENDING（24h 倒计时）
  ├─ 用户再次认种 → SETTLEABLE（可结算）
  │                    └─ 用户主动结算 → SETTLED（已结算，入钱包余额）
  └─ 24h 超时未领取 → EXPIRED（过期，归总部社区）
```

### 7.5 Kafka 事件流

```
planting-service ──planting.planting.created──→ referral-service
                                                    │
                                         更新团队统计 + 等待合同
                                                    │
                                         contract.signed / expired
                                                    │
                                         confirmDeduction → wallet
                                                    │
                              ┌─ planting.order.paid ──→ reward-service → distributeRewards()
                              └─ planting.order.expired → reward-service → 权益归系统账户
```

---

## 8. 算力与挖矿流程（2.0 核心）

### 8.1 算力（Contribution）计算

**触发**：1.0 认种订单状态变为 `MINING_ENABLED` 时，通过 CDC 同步到 contribution-service。

#### 算力分配比例

| 来源 | 比例 | 说明 |
|------|------|------|
| **个人算力（PERSONAL）** | 70% | 认种即生效 |
| **团队层级（TEAM_LEVEL）** | 7.5% | 15 级，每级 0.5% |
| **团队奖励（TEAM_BONUS）** | 7.5% | 3 阶梯，每阶 2.5% |
| **运营费** | 12% | 系统账户 |
| **省公司** | 1% | 省区域系统账户 |
| **市公司** | 2% | 市区域系统账户 |

#### 团队算力解锁条件

| 层级 | 条件 |
|------|------|
| Level 1-5（2.5%） | 用户自己有认种即可 |
| Level 6-10（2.5%） | 直推 ≥3 人且有认种 |
| Level 11-15（2.5%） | 直推 ≥5 人且有认种 |
| Bonus Tier 1（2.5%） | 用户自己有认种 |
| Bonus Tier 2（2.5%） | 直推 ≥2 人且有认种 |
| Bonus Tier 3（2.5%） | 直推 ≥4 人且有认种 |

#### 每棵树算力值

```
contribution_per_tree = 22617 × (1 + currentUnit × 0.003)

currentUnit 每 100 棵全网认种递增一次：
  Trees 1-999:    unit=0,  multiplier=1.000
  Trees 1000-1099: unit=1,  multiplier=1.003
  Trees 1100-1199: unit=2,  multiplier=1.006
  ...
```

### 8.2 挖矿（Mining）分配

**全局参数：**

| 参数 | 值 |
|------|------|
| 总份额 | 100.02 亿 Share |
| 初始分配池 | 2 亿 Share |
| 减半周期 | 2 年（63,072,000 秒） |

**分配公式：**

```
每秒全网分配量 = secondDistribution（随时代递减）

用户每秒挖矿 = secondDistribution × (用户有效算力 / 全网总算力)

有效算力 = 个人算力 + 已解锁的团队算力
```

**挖矿价格：**

```
price = sharePool / (TOTAL_SHARES - blackHole - circulationPool)
```

### 8.3 交易市场

- **eUSDT（积分股）**：代表挖矿产出的 Share Token 对应价值
- **fUSDT（积分值）**：代表未来价值
- trading-service 提供 eUSDT/fUSDT 交易撮合
- 做市商账户由 mining-admin-service 管理
- **销毁池（Burn Pool）**：100 亿 Token
- **挖矿池（Mining Pool）**：200 万 Token

---

## 9. 代币与链上体系

### 9.1 链上合约

| 合约 | 链 | 地址 |
|------|------|------|
| dUSDT (DurianUSDT) | KAVA | 0xA9F3A35dBa8699c8C681D8db03F0c1A8CEB9D7c3 |
| eUSDT (Energy USDT) | KAVA | 0x7C3275D808eFbAE90C06C7E3A9AfDdcAa8563931 |
| fUSDT (Future USDT) | KAVA | 0x14dc4f7d3E4197438d058C3D156dd9826A161134 |
| USDT (BSC 备用) | BSC | 0x55d398326f99059fF775485246999027B3197955 |

### 9.2 MPC 多方计算钱包

- Go 语言实现，9 个服务组件
- TSS（门限签名）保障私钥安全
- 用户无需直接管理私钥，通过 MPC 协议完成签名
- 热钱包提现由 blockchain-service 调度

### 9.3 区块扫描

- 扫描间隔：5 秒
- 确认块数：12 块
- RPC 故障自动切换（4 个 KAVA RPC 端点，3 分钟切换）

---

## 10. 安全加固与运维要点

### 10.1 端口安全

| 服务 | 绑定 | 说明 |
|------|------|------|
| PostgreSQL | 127.0.0.1:5432 | 仅本地访问 |
| Debezium REST | 127.0.0.1:8084 | 防 SSRF（历史事故：3 个恶意连接器注入） |
| Redis | 127.0.0.1:6379 | 仅本地访问 |

### 10.2 WAL 安全

- `max_slot_wal_keep_size=10GB` — 上限防 WAL 爆盘（历史事故：305GB）
- `OFFSET_FLUSH_INTERVAL_MS=10000` — Debezium 偏移刷新加速

### 10.3 密钥管理

- JWT_SECRET / SERVICE_JWT_SECRET — 服务间认证
- MPC_JWT_SECRET — MPC 系统认证
- WALLET_ENCRYPTION_SALT — 钱包加密
- SHARE_MASTER_KEY — MPC 主密钥
- Aliyun API Keys — SMS / KYC 三方服务

### 10.4 可靠性模式

| 模式 | 说明 |
|------|------|
| **Outbox Pattern** | 数据库事务 + 事件发布原子性，指数退避重试（最长 4 小时） |
| **Idempotency** | ProcessedEvent + ProcessedCdcEvent 表防重复消费 |
| **Compensation** | payment_compensations 表处理冻结失败/确认失败/分配失败 |
| **Health Check** | 所有服务 /api/v1/health 或 /api/v2/health，30s 间隔 |
| **Restart Policy** | unless-stopped 自动重启 |

---

## 11. 关键文件索引

### 11.1 编排文件

| 文件 | 用途 |
|------|------|
| `backend/services/docker-compose.yml` | 1.0 系统全量编排（13 服务 + 基础设施） |
| `docker-compose.2.0.yml` | 2.0 系统编排（7 服务 + 前端 + 可选基础设施） |
| `backend/mpc-system/docker-compose.yml` | MPC 系统编排 |

### 11.2 核心业务代码

| 路径 | 说明 |
|------|------|
| `backend/services/planting-service/src/application/` | 认种订单业务逻辑 |
| `backend/services/reward-service/src/application/` | 分配计算与奖励状态机 |
| `backend/services/referral-service/src/application/` | 推荐关系与团队统计 |
| `backend/services/authorization-service/src/application/` | 授权层级与月度考核 |
| `backend/services/contribution-service/src/application/` | 算力计算与 CDC 消费 |
| `backend/services/mining-service/src/domain/services/` | 挖矿分配算法 |
| `backend/services/wallet-service/src/application/` | 钱包操作（冻结/解冻/分配） |
| `backend/services/blockchain-service/src/` | 链上交互与区块扫描 |

### 11.3 数据库 Schema

| 路径 | 说明 |
|------|------|
| `backend/services/*/prisma/schema.prisma` | 各服务 Prisma Schema |
| `backend/services/scripts/init-databases.sh` | 13 个数据库初始化脚本 |

### 11.4 前端入口

| 路径 | 说明 |
|------|------|
| `frontend/mobile-app/lib/main.dart` | Flutter 用户端入口 |
| `frontend/mobile-app/lib/features/` | 17 个功能模块 |
| `frontend/admin-web/src/app/` | Next.js 管理后台 |
| `frontend/mining-admin-web/src/app/` | Next.js 挖矿后台 |

### 11.5 智能合约

| 路径 | 说明 |
|------|------|
| `contracts/DurianUSDT.sol` | ERC-20 代币合约 |
| `contracts/build/DurianUSDT.abi` | 编译后 ABI |

---

## 附录：账户编号规则

| 格式 | 示例 | 说明 |
|------|------|------|
| D + YYMMDD + 5位序号 | D25121400002 | 用户账户 |
| S + 10位序号 | S0000000001 | 系统账户（总部/成本/运营/底池） |
| 9 + 省代码 | 9440000 | 省级系统账户 |
| 8 + 市代码 | 8440100 | 市级系统账户 |
| 7 + 省代码 | 7440000 | 省团队默认账户 |
| 6 + 市代码 | 6440100 | 市团队默认账户 |
