Aptos Core 维护人员合并了一项关键漏洞修复,解决了数据库修剪系统中的状态 KV 截断泄露问题。在 PR #352 中详细记录的该问题发生在 `truncate_state_kv_db_shards` 函数无法发现并删除首次写入密钥创建的孤立状态值时。
根本原因在于截断逻辑依赖 `StaleStateValueIndexByKeyHashSchema` 来识别要删除的条目。然而,首次写入密钥创建(即不存在先前版本的情况)从未写入陈旧索引条目,导致截断扫描完全遗漏了这些条目。这导致孤立的 `StateValueByKeyHashSchema` 条目遗留在截断点之外,可能导致数据库膨胀和性能下降。
此修复为首次写入密钥创建引入了带有 `version = Version::MAX` 的哨兵陈旧索引条目。这使现有的基于 `stale_since_version` 的扫描能够发现这些条目并将其正确清理。修剪器通过对哨兵检查 `is_first_write()` 来跳过不必要的无操作删除,确保效率。
测试覆盖范围得到显著扩展:`db_debugger/truncate/mod.rs` 中的测试套件现在使用 500 个账户池(从 5 个增加),可靠地在截断目标版本之后触发新密钥创建,proptest 案例从 1 个增加到 5 个。新提取的参数化辅助程序 `arb_blocks_to_commit_with_params` 提高了测试灵活性。现有的修剪器和状态存储测试继续通过,确认向后兼容性。
