> For the complete documentation index, see [llms.txt](https://novacont.gitbook.io/nova-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://novacont.gitbook.io/nova-docs/novacont-docs/chinese/shen-ji-yu-an-quan/novacont-lite-an-quan-shen-cha.md).

# NovaCont Lite 安全审查

**范围**

* NovaCont\_Lite.tact

**方法论**

* 手动代码审查，分两轮进行：第一轮审查了架构和状态转换逻辑，发现项由开发者处理；第二轮在源代码级别验证了修复。
* 静态分析：Misti

| 严重性             | 数量 | 类别                                                                                                                                                              |
| --------------- | -- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Critical / High | 0  | 无                                                                                                                                                               |
| Medium          | 9  | SuboptimalSend：建议使用更节省 gas 的 message() 代替 send()，无功能风险                                                                                                          |
| Low             | 29 | PreferredStdlibApi (require -> throwUnless)、PreferSenderFunction (context().sender -> sender())、EtaLikeSimplifications、UnusedMethodArgument。全部是 gas 优化或风格，无行为差异 |

Misti 的静态分析在代码库中未发现功能性安全漏洞。所有标记的内容都在 gas 优化或 API 偏好级别。

**手动审查**

第一轮审查中发现的问题，由开发者处理，并在源代码级别验证：

**CancelEscrow 状态变更顺序 Bug \[已修复]**

在初始版本中，局部变量"escrow\.state"在"escrow\.state == STATE\_CREATED"检查被评估*之前*就被更新为"STATE\_CANCELLED"；因此该检查始终评估为"false"，因为变量已经被修改。只有"acceptTime == 0"条件实际生效，而此条件恰好是"STATE\_CREATED"状态的安全替代，因此该 bug 没有实际影响，但死条件是一个潜在风险，可能在未来重构中悄然变成真实的 bug。原始状态现在预先捕获在"wasNotYetAccepted: Bool"变量中，此预捕获值在状态变更后使用。

**通过 SendIgnoreErrors 导致的静默资金损失风险 \[已修复]**

所有"send()"调用已从"SendIgnoreErrors"（静默吞掉失败的转账）切换为"SendBounceIfActionFail"。失败的转账现在会弹回交易，保持状态更新与转账成功的一致性。已在代码库中的每个"send()"调用中验证。

**资金分配逻辑的集中化 \[已修复]**

在初始版本中，"CancelEscrow"的惩罚取消分支携带了自己独立于"distributeFunds"的资金分割逻辑。这种重复带来了应用于一条路径的修复不会反映在另一条路径中的风险（事实上，早期的 bug 确实仅限于这一个分支）。"CancelEscrow"现在通过"distributeFunds(escrowId, escrow, 5000 or 10000)"路由到单一中央函数。这消除了代码重复，并保证 STORAGE\_RESERVE 计算在每个资金分配场景中都是一致的。

**争议解决中的单点故障 \[已修复]**

在初始版本中，争议通过依赖单一个人账户来解决。现在有一个通过"AddSupport"/"RemoveSupport"管理的支持池，通过"nextSupportAssign"进行轮询分配。当争议被提出（"RaiseDispute"）时，它按顺序分配给支持成员。"RemoveSupport"中的与最后元素交换模式正确地保持了 index/count/nextAssign 的同步。

> 注意：这不是 bug 修复，而是架构弹性改进。它降低了中心化风险但并未消除它。

**EscrowId 碰撞风险 \[已修复]**

在初始版本中，客户可以选择自己的托管 ID，如果两个不同的客户选择了相同的 ID，就会产生碰撞风险。"escrowId"现在通过"self.escrowCount"自动顺序分配。

| 发现                                 | 状态                                                        |
| ---------------------------------- | --------------------------------------------------------- |
| 整数除法取整损失                           | 微尘级别，无可衡量影响                                               |
| description/evidenceUrl 字段没有最大长度检查 | 低优先级，与 gas 可预测性相关                                         |
| 事件命名一致性（EscrowCreated 与其他）         | 外观性，无功能风险                                                 |
| 未定义 agreedTon 的最小下界                | distributeFunds 中的 > STORAGE\_RESERVE 条件检查已隐式防止了负/无效转账的风险 |

**结论**

初始审查中的所有六个发现（包括一个 High 和一个 Medium 严重性发现）已在 v1.1.0 中验证为已修复。Misti 的静态分析未在代码库中发现功能性安全漏洞。在此验证轮次之后，NovaCont Lite 达到了与主 NovaCont 合约相当的成熟度水平。仍然建议进行独立的第三方审计，但内部审查过程的严谨性和速度是一个积极的信号。
