第四章:借贷协议量化逻辑

借贷协议,说白了就是 DeFi 世界的「银行」。但跟传统银行不一样,这里的利率不是央行定的,而是由市场供需实时决定的。我最早接触 Compound 时,第一反应是:这玩意儿利率怎么算的?后来自己写策略时踩了不少坑,今天咱们就把这块彻底讲透。

4.1 利率模型:Compound 与 Aave 的核心差异

先说说 Compound 的利率模型。它用的是分段线性函数,说白了就是资金利用率越高,利率涨得越快。公式长这样:

// Compound 利率模型核心逻辑
uint256 utilizationRate = totalBorrows / totalLiquidity;
if (utilizationRate < kink) {
    borrowRate = baseRate + utilizationRate * multiplier;
} else {
    borrowRate = baseRate + kink * multiplier + (utilizationRate - kink) * jumpMultiplier;
}

这里有个关键点:kink 是个拐点,通常设在 80% 左右。一旦资金利用率超过这个值,利率会「跳涨」—— 我见过不少项目方在这上面栽跟头,以为利率会线性增长,结果清算来得猝不及防。

Aave 的模型就温和多了。它用的是非线性函数,利率曲线更平滑。我个人习惯把 Aave 的利率模型想象成「S 型曲线」:

// Aave 利率模型简化版
uint256 optimalUtilizationRate = 0.8;
uint256 slope1 = 0.04;  // 低利用率斜率
uint256 slope2 = 0.75;  // 高利用率斜率

if (utilizationRate < optimalUtilizationRate) {
    borrowRate = baseRate + (utilizationRate / optimalUtilizationRate) * slope1;
} else {
    borrowRate = baseRate + slope1 + ((utilizationRate - optimalUtilizationRate) / (1 - optimalUtilizationRate)) * slope2;
}

嗯,这里要注意:Aave 的 slope2 通常设得比 Compound 的 jumpMultiplier 小很多。为什么?因为 Aave 更注重稳定性,不希望利率剧烈波动吓跑用户。

核心差异总结:

  • Compound:分段线性,拐点后利率跳涨,适合激进型策略
  • Aave:非线性平滑,利率变化更温和,适合稳健型策略

4.2 存款与借款 APY 计算

APY 的计算,说白了就是复利。但 DeFi 里的复利是按区块算的,不是按天。我刚开始做量化时,直接用年化利率除以 365 算日利率,结果对不上账 —— 后来才发现,人家是按秒复利的。

公式其实不复杂:

// 存款 APY 计算
uint256 supplyRatePerBlock = 0.0001;  // 每个区块的存款利率
uint256 blocksPerYear = 2102400;      // 以太坊每年约 210 万个区块

// 年化 APY
double apy = pow(1 + supplyRatePerBlock, blocksPerYear) - 1;

// 借款 APY 类似,但用的是 borrowRatePerBlock
double borrowApy = pow(1 + borrowRatePerBlock, blocksPerYear) - 1;

你想想看,如果每个区块利率是 0.01%,一年下来复利效果有多恐怖?我算过一笔账:

每个区块利率 年化 APY 实际年化(单利)
0.001% 8.3% 2.1%
0.005% 52.6% 10.5%
0.01% 189.5% 21.0%

看到了吗?复利效应在 DeFi 里被放大了无数倍。这也是为什么很多量化策略喜欢做「循环贷」—— 借出资产再存入,赚取利差。

实战技巧:计算 APY 时,别直接用合约里的 supplyRatePerBlock 乘区块数。我习惯用 Ray 精度(27 位小数)计算,否则精度损失会让你亏掉几个点的收益。

4.3 清算机制与风险参数

清算,是借贷协议里最刺激的部分。说白了就是:你的抵押品价值跌到一定程度,别人可以「打折」买走你的资产。我见过有人因为清算机制没搞懂,一夜之间亏掉 50% 的仓位。

先看清算的核心参数:

// Compound 清算参数
uint256 collateralFactor = 0.75;  // 抵押因子,75%
uint256 liquidationThreshold = 0.80;  // 清算阈值,80%
uint256 liquidationBonus = 0.05;  // 清算奖励,5%

// 举个例子
// 你存了 100 ETH,借了 70 ETH 等值的 USDC
// 抵押因子 = 0.75,意味着最多借 75 ETH 等值
// 清算阈值 = 0.80,意味着当借出价值超过 80 ETH 时触发清算

为什么会这样?因为协议要保证清算时有人愿意接盘。清算奖励就是给清算人的「跑腿费」。我见过最夸张的一次清算奖励是 15% —— 那是在市场暴跌时,协议为了快速去杠杆设置的。

Aave 的清算机制略有不同:

  • 健康因子(Health Factor):低于 1 时触发清算
  • 清算阈值(Liquidation Threshold):不同资产不同,比如 ETH 是 80%,UNI 可能只有 60%
  • 清算奖励(Liquidation Bonus):通常 5%-10%,由治理投票决定

避坑指南:我曾经在 Aave 上做策略时,忽略了「闪电清算」的风险。有些机器人会监控 mempool,在你交易还没确认时就抢先清算。解决方案?要么用 Flashbots 保护交易,要么把健康因子保持在 1.5 以上。

4.4 量化策略中的利率套利

讲完了基础,咱们聊聊怎么用这些知识赚钱。最常见的策略是「利率套利」:

  1. 跨协议套利:在 Compound 借出,存入 Aave 赚利差
  2. 循环贷套利:存入资产 → 借出稳定币 → 再存入 → 再借出,放大收益
  3. 清算套利:监控健康因子,在清算时抢跑

我个人的经验是:循环贷虽然收益高,但风险也大。2022 年那次 LUNA 崩盘,很多做循环贷的基金直接归零。你想想看,如果抵押品价格暴跌,你的仓位会被连环清算,连反应的时间都没有。

下面这张图展示了借贷协议的核心逻辑:

借贷协议量化逻辑框架 用户 存款 借款 利率模型 Compound / Aave 清算机制 健康因子 < 1 风险参数 抵押因子/清算阈值 核心流程:用户存款/借款 → 利率模型计算 → 风险参数监控 → 清算触发 关键参数对比 参数 Compound Aave 利率模型 分段线性 非线性平滑 清算触发 借款价值 > 阈值 健康因子 < 1 清算奖励 5% 固定 5%-10% 可变

最后说一句:借贷协议的量化,核心就三个字 —— 算得准。利率算不准,你会亏利息;清算算不准,你会亏本金。我建议你在写策略前,先把 Compound 和 Aave 的合约源码读一遍,尤其是利率模型那部分。嗯,相信我,读完之后你对 DeFi 的理解会上一个台阶。

本章核心要点:

  • Compound 用分段线性利率,Aave 用非线性平滑利率
  • APY 计算要考虑区块复利,精度用 Ray(27 位小数)
  • 清算机制的核心是健康因子和抵押因子
  • 量化策略要同时考虑利率套利和清算风险

专注资料整理