清算人领走的是币还是凭证:liquidationCall 里 receiveAToken 那条分支 图 1
清算人领走的是币还是凭证:liquidationCall 里 receiveAToken 那条分支 · 图 1

大多数人把清算理解成一件事:替借款人还债,然后按折扣拿走他的抵押品。但在 Aave v3 的合约里,最后这一步其实有两条岔路,开关是清算函数上的一个布尔参数 receiveAToken。选哪条路,决定清算人账户里出现的是真币还是一张记账凭证,也决定清算完成后你还得做几笔额外交易。

先固定共同的前半段。清算人调用 liquidationCall,传入抵押资产、债务资产、借款人地址和要代偿的债务数额;合约校验健康因子低于一之后,计算实际代偿额与实际划走的抵押额,销毁借款人的债务凭证,更新债务市场的利率。到这里两条分支没有差别,差别从抵押品交付那一刻开始。

如果 receiveAToken 为假,合约走的是烧毁借款人 aToken 并把底层币转给清算人的路线:先把抵押市场的状态和利率刷新一次,把借款人名下等额 aToken 销毁,再把底层资产直接从金库转进清算人钱包。这条路干净,清算人拿到的是可以随时动用、可以再去兑换或提走的原生资产,代价是这次调用本身多付一次真实转账的燃料,清算人还得持有该资产的余额记录。

如果 receiveAToken 为真,合约改用 transferOnLiquidation 直接把 aToken 从借款人名下过户给清算人,底层币全程不动。这是一次纯粹的记账变更,账本上只改持有人。合约还多做了一步检查:若清算人此前该资产余额为零,会把这笔 aToken 在其名下作为抵押品启用——当然前提是隔离模式或相关模式的约束允许。也就是说,选择凭证结算的清算人,可能在同一笔交易里顺带变成一个该市场的存款人。

两条路的账要分开算。凭证结算省掉的是底层资产转移的燃料和之后拆包、兑换的动作,但清算人接下来若想变现,仍要自己调用赎回把 aToken 换成底层币,届时按当时的市场利用率承担利率与滑点;而且这笔 aToken 挂在名下期间,其协议记账随全局指数增长,账面数字每个区块都在变,做盈亏核对时必须用份额口径换算,直接读枚数会产生微小偏差。底层币结算则相反,拿到手就是静态余额,没有后续记账漂移,但即时成本略高。

隔离模式在这两条路上有一个容易被忽略的差别。合约注释明确写着,走凭证过户时会像普通转账一样检查隔离模式的约束,也就是说清算人原本在某个隔离市场里有债务时,新收进来的一笔凭证可能受该市场债务上限或资产启用状态影响。对做跨市场清算自动化的团队,这是一条必须在模拟阶段覆盖的分支:同样的清算交易,receiveAToken 取真和取假可能一个成功一个回滚。

还有一种实战情形值得留意。当清算人本身就是同一协议的大存款人,接收凭证可以省掉把资金再存回去的整条链路:清算所得的 aToken 直接留在存款账上,继续按存款利率计息,等待下一次部署。反过来,如果一个组织政策要求清算所得必须即时转出冷钱包或多签,那么凭证结算反而多出一段信任真空期,政策与机制在这里必须对齐。

执行前建议按三步核对:第一步看目标抵押资产的 aToken 地址与是否冻结,凭证路径对可转让性敏感;第二步用同一个健康因子分别模拟两条分支的净到账,确认凭证过户不会撞上你自己账户的隔离约束;第三步把后续变现的时间成本写进策略参数,而不是默认清算收益等于清算奖励。这两条分支没有优劣,只有和你的资金流转安排是否匹配。

本文只讨论合约机制与操作路径,示例数字不构成收益承诺,本文内容不构成投资建议;清算与借贷存在智能合约及市场风险,参与前请核对官方合约与文档并自担相关风险。

清算人领走的是币还是凭证:liquidationCall 里 receiveAToken 那条分支 图 2
清算人领走的是币还是凭证:liquidationCall 里 receiveAToken 那条分支 · 图 2