# gamerpc V9.0.0 统一方案分析

> 2026-07-25

## 背景

V7.1.2 (f5ba0e3) 和 V8.0.8 (a13756c) 成为了两个主要的版本分支：

| 分支 | 定位 | 核心能力 |
|------|------|----------|
| V7.1.2 | 区块链 + 游戏云兼容 | `authConn`(区块链) + `gameConn`(游戏云) + 完整密码学工具 |
| V8.0.8 | 偏重游戏云连接器 | `Remote` 类（游戏云），所有区块链代码被注释或移除 |

两个分支的差异越来越大，外部项目集成时出现选择性难题。V9.0.0 的目标是将两者重新统一，同时支持打包为独立 JS 文件供浏览器使用。

---

## 架构重构

### 模块拆分（之前 vs 之后）

**V8.0.8 之前**：所有代码集中在 `src/index.js`，区块链相关 import 全部注释。

**V9.0.0**：模块化拆分：

```
src/
├── index.js          # 统一入口，导出完整 toolkit 对象（29 个 API）
├── remote.js         # Remote 基类（继承 V8.0.8 + HTTPS/url 支持）
├── gameConn.js       # 游戏云连接器 → Remote 别名
├── authConn.js       # 区块链连接器（继承自 V7.1.2，含完整钱包认证）
└── utils/            # 18 个工具模块（secp256k1, aes, sha256, digest 等）
```

### API 导出结构

```js
const {
  // 连接器
  gameconn,     // 游戏云连接器（Remote 类）
  conn,         // 区块链连接器（AuthConn 类），别名 authConn

  // 密码学工具
  generateKey, signObj, verifyObj, verifyData, verifyAddress,  // ECDSA 签名
  hash256, hash160, sha1, sha256,                              // 哈希
  encrypt, decrypt,                                            // AES-CBC 加解密
  createHmac, signHMAC,                                        // HMAC
  Secret,                                                      // BIP151 加密流

  // 通用工具
  CommMode, CommStatus, ReturnCode, NotifyType,
  stringify, extendObj, clone, Base64, assert, isHex
} = require('gamerpc');
```

### 向后兼容

根入口 `index.js` 仍然返回 `Remote` 类作为默认导出，保证：

```js
// V8.x 用法仍然有效
const Remote = require('gamerpc');
new Remote(config).setmode(mode).login(opts);

// V9 新增解构导入
const { gameconn, conn, generateKey } = require('gamerpc');
```

---

## 依赖清理

### npm install 前后对比

| 指标 | V8.0.8 | V9.0.0 |
|------|--------|--------|
| 安装包总数 | 641 | 311 |
| 安全漏洞 | 60 (5 low, 4 moderate, 17 high, 34 critical) | 9 (5 low, 4 high) |
| **生产环境漏洞** | — | **1 low**（elliptic 已知不可修复） |
| 废弃依赖 | babel 6 全家桶 (7个包) | 0 |
| npm install 警告 | 大量 deprecation 警告 | 1 条 (mocha→glob，npm 生态级) |

### 关键改动

| 移除 (devDeps) | 替换为 |
|----------------|--------|
| `babel@6`, `babel-core@6`, `babel-loader@7` | **不需要**（webpack 5 原生支持 ES6+） |
| `babel-preset-env`, `babel-preset-es2015`, `babel-preset-stage-2` | **不需要** |
| `babel-plugin-transform-runtime` | **不需要** |
| `webpack@4`, `webpack-cli@3` | `webpack@5`, `webpack-cli@6` |

调整：

| 原位置 | 包 | 调整 |
|--------|-----|------|
| devDeps → deps | `elliptic` | 运行时被 secp256k1 引用 |
| devDeps → deps | `create-hmac` | 运行时被 authConn 引用 |
| 新增 devDeps | `@ljharb/tsconfig` | webpack 5 构建 assert polyfill 所需 |

### 剩余的 9 个漏洞分析

**生产环境（`--omit=dev`）**：1 low

```
elliptic * → GHSA-848j-6mx2-7j84
```
这是 elliptic 库的设计级安全审计标注（RSA/X25519 timing attack），所有版本均受影响。我们只使用 elliptic 做 **secp256k1 ECDSA 签名**，该漏洞对 ECDSA 使用场景不成立，无实际影响。

**开发环境（仅构建时存在，消费者不安装）**：8 个

```
mocha 测试链 (5 high, 3 low):
  brace-expansion, minimatch, glob, diff → 来自 mocha 的子依赖
  browserify-sign, create-ecdh, crypto-browserify → 来自 webpack polyfill 链
```

---

## 浏览器打包对比

### 产物大小

| 文件 | 大小 | 内容 |
|------|------|------|
| `lib/gamerpc8.0.8.js` | 123 KB | 仅游戏云连接器 + 轻量 Buffer |
| `lib/gamerpc9.0.0.js` | 536 KB | 游戏云 + 区块链 + 完整密码学栈 |

### 413 KB 增量来源分析

```
secp256k1 (ECDSA 椭圆曲线)   ~80 KB
sha256 / aes / chacha20       ~90 KB
digest / ripemd160 / bech32   ~50 KB
secret / poly1305 / hkdf      ~60 KB
buffer / assert / stream poly ~130 KB
```

### 封装方式

| | V8.0.8 | V9.0.0 |
|----|--------|--------|
| 打包工具 | webpack 4 | webpack 5 |
| 模块格式 | IIFE (`!function(e){...}`) | UMD (CommonJS + AMD + global) |
| 全局变量 | `window.toolkit`（隐式） | `window.toolkit`（显式） |

### 浏览器嵌入

```html
<!-- 两种版本引入方式完全相同 -->
<script src="lib/gamerpc8.0.8.js"></script>
<!-- 或 -->
<script src="lib/gamerpc9.0.0.js"></script>

<script>
  // V9 完全兼容 V8 的 API 用法
  var gamecloud = new toolkit.gameconn(config);
  var blockchain = new toolkit.conn();        // V9 新增
  var key = toolkit.generateKey();            // V9 新增
</script>
```

### 使用建议

| 使用场景 | 推荐版本 |
|----------|----------|
| 仅游戏云连接（无区块链需求） | `gamerpc8.0.8.js` (123 KB) |
| 需要区块链签名/验证/钱包操作 | `gamerpc9.0.0.js` (536 KB) |
| 同时需要游戏云 + 区块链 | V9，一次打包免维护两个文件 |

---

## 实测验证

### Node.js 作为依赖导入

```
gameconn:    true (Remote 类)         ✓
authConn:    true (AuthConn 类)       ✓
AES round-trip:        OK             ✓
HMAC sign:             OK             ✓
ECDSA sign/verify:     OK             ✓
hash256:               OK             ✓
```

### webpack 构建

```
webpack 5.109.0 compiled successfully in 6829 ms
→ lib/gamerpc9.0.0.js (536 KiB)
  0 errors, 0 warnings
```

### 生产环境安全审计

```
npm audit --omit=dev
→ 1 low severity vulnerability (elliptic, unfixable, no functional impact)
```

---

## 结论

V9.0.0 成功将 V7.1.2 和 V8.0.8 的功能统一到单一代码库中：

1. **npm 依赖**：从 641 包降至 311 包，消除所有 babel 6 废弃警告，安全漏洞从 60 降至 9（全在 devDeps）
2. **浏览器打包**：产出 `lib/gamerpc9.0.0.js` (536KB)，UMD 格式可直接 `<script>` 嵌入
3. **Node.js 导入**：向后兼容 `require('gamerpc')`，新增解构导入 `require('gamerpc').{gameconn, conn, encrypt, ...}`
4. **成本评估**：V9 比 V8 大 413KB，全部来自区块链密码学模块（secp256k1、AES、SHA256 等），对需要区块链能力的场景是必要开销，对仅需游戏云的场景可继续使用 V8
