|
| 1 | +# SDK 安全与能力覆盖评估报告 (2025-12-26) |
| 2 | + |
| 3 | +**评估对象:** AAStar SDK (`@aastar/sdk` 及相关包) vs 链上合约 (`SuperPaymaster`, `Registry`, `PaymasterV4`) |
| 4 | +**评估状态:** ⚠️ 发现关键架构不匹配 (Critical Mismatch) |
| 5 | + |
| 6 | +--- |
| 7 | + |
| 8 | +## 1. 概述 (Overview) |
| 9 | + |
| 10 | +经过对 SDK 源码与最新部署合约的深度对比分析,我们确认 SDK 在核心的 V3 (AOA) 功能上覆盖良好,但在最新的 V4 (AOA+) Paymaster 架构上存在**严重的方向性偏差**。此外,部分高级功能(如 BLS 签名生成、动态定价工厂配置)在 SDK 中缺失,限制了开发者的集成能力。 |
| 11 | + |
| 12 | +--- |
| 13 | + |
| 14 | +## 2. 差距分析 (Gap Analysis: Contracts vs SDK) |
| 15 | + |
| 16 | +### 2.1 Paymaster V4 (AOA+) - 🔴 严重不匹配 (Critical) |
| 17 | +* **合约现状 (`PaymasterV4.sol`):** |
| 18 | + * 采用 **Token Paymaster** 模式。 |
| 19 | + * 核心逻辑依赖 `addGasToken`、`addSBT`、`setMaxGasCostCap`。 |
| 20 | + * 验证逻辑 (`validatePaymasterUserOp`) 检查用户是否持有指定 SBT 或代币,并直接扣费。 |
| 21 | +* **SDK 现状 (`packages/paymaster/src/AOA-Plus`):** |
| 22 | + * 实现了一个 **Verifying Paymaster** 客户端 (`StandalonePaymasterClient`)。 |
| 23 | + * 核心方法是 `setVerifyingSigner` 和 `deployStandalone`。 |
| 24 | + * 依赖硬编码的 `PM_V4_ABI`,该 ABI 包含了合约中不存在的方法(如 `setVerifyingSigner`)。 |
| 25 | +* **影响:** |
| 26 | + * SDK 无法用于配置现有的 V4 合约(无法添加支持的代币/SBT)。 |
| 27 | + * SDK 缺少 V4 专用的 Middleware (`getV4PaymasterMiddleware`),导致开发者无法生成符合 V4 格式要求的 `paymasterAndData` (需包含 `[paymaster][gasLimits][token]`)。 |
| 28 | + |
| 29 | +### 2.2 SuperPaymaster V3 (AOA) - 🟠 功能缺失 |
| 30 | +* **合约现状:** 引入了 `xpntsFactory` 以支持动态预言机定价 (`setXPNTsFactory`)。 |
| 31 | +* **SDK 现状:** `SuperPaymasterClient` 仅支持 `setAPNTSPrice` (静态价格),缺少 `setXPNTsFactory` 方法。 |
| 32 | +* **风险:** `paymaster.ts` 中的 `depositETH` 方法调用了 `deposit()` (带 value)。需确保合约继承链中的 `BasePaymaster` 实现了 `receive()` 或无参 `deposit()`,否则会与 `deposit(uint256)` (代币充值) 混淆导致调用失败。 |
| 33 | + |
| 34 | +### 2.3 注册表与身份 (Registry & Identity) - 🟡 工具缺失 |
| 35 | +* **现状:** `Registry.sol` 的 `batchUpdateGlobalReputation` 需要提交 BLS 签名证明 (`proof`)。 |
| 36 | +* **缺失:** SDK (`registry.ts`, `dvt.ts`) 提供了上链调用的接口,但**未提供生成 BLS 证明的链下工具**。 |
| 37 | +* **影响:** 开发者无法使用纯 SDK 充当“信誉源”或 DVT 验证者,必须自行寻找第三方库来完成椭圆曲线签名和聚合。 |
| 38 | + |
| 39 | +### 2.4 质押模块 (Staking) - 🟡 API 设计误导 |
| 40 | +* **问题:** `staking.ts` 导出了 `lockStake` 方法。 |
| 41 | +* **事实:** 合约中 `lockStake` 被修饰符 `onlyRegistry` 保护,普通用户或 Operator 直接调用必败。 |
| 42 | +* **建议:** 该方法应标记为 `internal` 或仅供 SDK 内部的 `registerRole` 流程调用,避免误导开发者。 |
| 43 | + |
| 44 | +--- |
| 45 | + |
| 46 | +## 3. 代码质量与结构 (Code Quality & Structure) |
| 47 | + |
| 48 | +1. **ABI 管理混乱:** |
| 49 | + * 核心包 (`@aastar/core`) 统一管理了大部分 ABI,结构良好。 |
| 50 | + * **例外:** `AOA-Plus` 包内部硬编码了 `PM_V4_ABI`,未引用核心包。这是导致 V4 接口与合约脱节的直接原因。 |
| 51 | +2. **客户端组合模式 (Client Composition):** |
| 52 | + * SDK 使用 `createOperatorClient` 等工厂方法将不同的 `actions` (staking, paymaster, registry) 组合到 viem client 中。这种设计模式非常优秀,易于扩展和维护。 |
| 53 | +3. **依赖缺失:** |
| 54 | + * `FinanceClient` 引用了 `wrapGTokenToXPNTs`,依赖一个 `wrap` 接口。当前合约仓库中未找到对应的 Converter 合约,属于隐式依赖。 |
| 55 | + |
| 56 | +--- |
| 57 | + |
| 58 | +## 4. 改进建议 (Recommendations) |
| 59 | + |
| 60 | +### 🛑 立即修复 (Immediate Fixes) |
| 61 | +1. **重构 V4 客户端:** |
| 62 | + * 废弃当前的 `AOA-Plus` 实现。 |
| 63 | + * 基于 `PaymasterV4Base.sol` 重新生成 ABI。 |
| 64 | + * 实现 `addGasToken`, `addSBT`, `withdrawPNT` 等管理方法。 |
| 65 | +2. **实现 V4 Middleware:** |
| 66 | + * 在 SDK 中增加 `getV4PaymasterMiddleware`,支持 V4 特有的 `paymasterAndData` 打包逻辑 (自动填充 GasLimit 和 Token 地址)。 |
| 67 | + |
| 68 | +### 🚀 功能增强 (Enhancements) |
| 69 | +3. **集成 BLS 库:** |
| 70 | + * 引入 `noble-bls12-381` 等库,在 SDK 中提供 `BLSSigner` 类,支持 `signMessage` 和 `aggregateSignatures`,打通 DVT 流程的最后一步。 |
| 71 | +4. **完善 V3 配置:** |
| 72 | + * 在 `SuperPaymasterClient` 中增加 `setXPNTsFactory` 方法。 |
| 73 | + |
| 74 | +### 🛡️ 安全加固 (Security) |
| 75 | +5. **隐藏受限方法:** 从 `StakingActions` 的公开类型定义中移除 `lockStake`,或在文档中明确标注其仅供 Registry 内部调用。 |
| 76 | +6. **同步 ABI:** 强制所有子包 (`paymaster`, `tokens`) 从 `@aastar/core` 导入 ABI,禁止局部硬编码。 |
0 commit comments