
Garden HTLC Swapper 安全审计:OtterSec
技术
.TL;DR,OtterSec 审查了 Garden 的 HTLC swapper 合约,涵盖 EVM 与 Bitcoin script 两种实现。共提出两项 informational 发现;其一是各链到期语义不一致,该问题已修复。其二指出,锁定资金在合约到期后仍可赎回;团队有意保留了这一行为。
Garden 委托 OtterSec 对 swapper 程序进行外部安全评估;该程序是实现 Garden 跨链原子兑换功能的核心合约。本次审计涵盖了 Hash Time Lock Contract 的 EVM 合约与 Bitcoin script 实现。
HTLCs 是让 Garden 架构得以运作的密码学原语。每一笔兑换都是一个独立的 HTLC:资金通过哈希条件和时间窗口被锁定。交易对手可以提交正确的秘密原像来领取这些资金,或者由发起方在到期后取回。这里没有桥合约,没有聚合流动性,没有托管方。HTLC 实现的正确性就是该协议的安全模型,这使其成为启动安全计划的恰当起点。
审计范围
本次审计于 2023 年 8 月进行。OtterSec 团队;Nicholas R. Putra、Woosun Song 和 Robert Chen,评估了 swapper 代码库。
两个组件在审计范围内:
- contracts/AtomicSwap.sol: Ethereum 侧的 Solidity 实现,涵盖资金发起、基于秘密的赎回以及基于到期的退还逻辑
- bitcoin/AtomicSwap.ts: 使用 OP_CHECKSEQUENCEVERIFY 实现时间锁输出的 Bitcoin script 实现
OtterSec 的方法论分为两条主线。设计审查考察经济合理性,即资金是否可能被提取、服务是否可能被拒绝,且不依赖任何特定链的实现细节。实现审查覆盖链上执行的具体细节:重入、访问控制、算术溢出、账户所有权和舍入误差。两条主线都应用于两条链的实现。
审计发现
OS-CTL-SUG-00;各链到期语义不一致
Ethereum 与 Bitcoin 的实现在语义层面对 expiry 参数的表达方式不同。在 AtomicSwap.sol 中,expiry 被校验为一个绝对区块高度:
require(expiry > block.number, "AtomicSwap: expiry cannot be lower than current block");这意味着 expiry 指向一个特定区块。合约会拒绝任何该区块已经过去的发起操作。
在 Bitcoin script 中,expiry 通过 OP_CHECKSEQUENCEVERIFY 处理。该操作码并不引用绝对区块;它衡量的是自 UTXO 创建以来经过的相对时间。Bitcoin 侧的 expiry 是一段时长,而不是一个固定的时间点。
两种实现单独运行时都是正确的。风险出现在跨链开发中:同时在技术栈两侧工作的开发者可能会带着关于 expiry 含义的错误假设,而随着代码库的增长,这一语义差距会作为可维护性和正确性风险不断扩大。
OS-CTL-SUG-01;到期后仍可赎回
在标准的 HTLC 设计中,交易对手的赎回窗口与发起方的退还窗口是互斥的。一旦到期,交易对手就无法再使用秘密原像赎回;只有发起方才能取回资金。Garden 的实现并未强制这种互斥性:在 Ethereum 与 Bitcoin 两侧,redeem 函数在合约到期后仍可被调用。
OtterSec 提出了两项发现,均被归类为 Informational;这是最低的严重等级,代表最佳实践建议,而非可被利用的漏洞。未发现任何 Critical、High、Medium 或 Low 严重等级的问题。
处理措施
OS-CTL-SUG-00 已修复 两种实现已对齐,今后使用一致的到期语义。OS-CTL-SUG-01 未做修复,这一决定是有意为之。到期后赎回是一项结构性属性;它不会在计数器上强制施加硬性截止。
总结
两项 informational 发现;一项已修复,一项在有据可依的理由下被有意保留。没有 critical、high、medium 或 low 严重等级的漏洞。没有可被利用的逻辑,没有访问控制问题,没有算术风险。
自本次审查以来,Garden 已与 Trail of Bits 完成了覆盖整个协议的安全评估(2024 年 4 月),并与 Zellic 完成了 Move 应用评估(2025 年 6 月)。Garden 还通过 Code4rena 举办了竞赛式漏洞赏金(2025 年 12 月),奖励总额 $37,500,共收到 813 份提交,目标是 EVM、Solana、Sui 和 Starknet 上的 HTLC 架构。
Last updated