# 云算力平台卖方客户端

本程序为云算力平台卖方客户端，用于将卖方身份与GPU主机绑定，实现自动挖矿匹配功能。

## 功能特性

1. **身份绑定**：将云算力平台上的卖方身份和GPU主机进行绑定
2. **GPU信息上报**：自动获取并上报主机GPU详细参数（GPU型号、显存容量等）
3. **自动挖矿匹配**：自动匹配买方的挖矿需求，无需手动操作挖矿

## 系统要求

- Go 1.25.4 或更高版本
- Windows 或 Linux 操作系统
- 已配置好挖矿环境（显卡驱动、挖矿软件、执行权限等）

## 编译方法

在项目根目录下运行（Windows / Linux 通用）：

```bash
go build -o bin/client ./cmd
```

- Windows 下会生成 `bin/client.exe`
- Linux 下会生成 `bin/client`

## 使用方法

1. **身份文件(auth)**：确认 `bin` 目录下存在 `auth` 文件，该文件会在下载客户端时自动生成，请勿删除、修改、移动该文件

2. **运行客户端（需管理员/root 权限）**：
   - Windows: 以“管理员身份运行”命令行或终端，然后执行：
     ```bash
     ./client.exe
     ```
   - Linux: 使用 root 或 sudo 启动：
     ```bash
     sudo ./bin/client
     ```

3. 客户端将自动：
   - 读取身份信息
   - 进行权限自检（非 root / 非管理员会直接退出并给出提示）
   - 获取主机 UUID（作为机器码）和 GPU 信息
   - 连接到云算力平台服务器
   - 进行 TCP 心跳保活和自动重连
   - 自动检查远程版本并执行更新（需要配置远程更新服务）
   - 等待并处理挖矿任务

## 重要注意事项

### 启动前准备

1. **挖矿环境配置**：确保客户端执行主机已配置好挖矿环境，包括：
   - 显卡驱动已正确安装
   - 挖矿软件已安装并配置
   - 执行权限已设置
   - 可以手动通过挖矿软件进行挖矿

### GPU 操作注意事项

#### 移除 GPU

- 如果要对本机GPU进行移除（拔出GPU）操作，云算力平台会同步移除对应的GPU
- **重要**：如果在相关GPU有租约且没有在平台申请故障处理的情况下直接移除GPU，会导致产生罚没
- **建议**：在有租约的情况下要移除故障GPU，请第一时间前往平台申请故障处理，在平台确认后再进行移除GPU的操作

#### 更换 GPU

- 如果要对本机GPU进行更换（拔出后又新插入GPU）操作，云算力平台会重新读取GPU数据
- 如果更换型号相同，则会按原有配置上架
- 如果更换的型号不同，则需在更换后前往卖家中心手动调整上架配置
- **重要**：如果在相关GPU有租约且没有在平台申请故障处理的情况下直接更换GPU，可能会导致产生罚没
- **建议**：在有租约的情况下要更换故障GPU，请第一时间前往平台申请故障处理，在平台确认后再进行更换GPU的操作

### 持续挖矿（可选）

- 在 `bin/mining.linux.conf` 或 `bin/mining.windows.conf` 中配置 `[sustain]` 段，可以在**没有租约时自动挖矿**。
- 当有租约任务下发时，客户端会自动停止持续挖矿，执行租约任务；租约结束后会自动恢复持续挖矿。

## 项目结构

```
cloud-client/
├── bin/                    # 编译输出目录
│   ├── auth                 # 身份认证文件（需手动创建）
│   ├── mining.linux.conf    # Linux 挖矿配置（含持续挖矿配置）
│   └── mining.windows.conf  # Windows 挖矿配置（含持续挖矿配置）
├── cmd/                    # 主程序目录
│   ├── main.go            # 程序入口
│   ├── windows.bat        # Windows 编译脚本
│   └── linux.sh           # Linux 编译脚本
├── internal/              # 内部包
│   ├── client.go          # 客户端主逻辑
│   ├── msg/               # 消息处理
│   ├── src/               # 系统相关实现
│   │   ├── linux/         # Linux 系统实现（GPU、挖矿进程管理、权限检测等）
│   │   └── windows/       # Windows 系统实现（GPU、挖矿进程管理、权限检测等）
│   ├── sustain/           # 持续挖矿管理
│   ├── updater/           # 自动更新模块
│   └── utils/             # 工具函数（文件读写、UUID 等）
├── go.mod                 # Go 模块定义
└── README.md              # 本文件
```