DeFi 借贷协议深入:利率模型、清算机制与闪电贷

系统覆盖 DeFi 借贷协议的核心机制:Compound/Aave 的池化借贷模型与 cToken/aToken 设计、供应与借款的资金池运作、静态与动态利率模型(利用率/跳跃利率)、抵押品与健康因子、清算者激励机制、闪电贷原理与安全边界,以及预言机操纵等系统性风险,帮助开发者理解 DeFi 借贷的收益与风险来源。

引言

银行把存款人的钱借给借款人赚利差;DeFi 借贷把这件事搬上链,却换了一套更激进的机制:没有信用审核,只有抵押。Compound 与 Aave 用「资金池 + 算法利率 + 超额抵押 + 强制清算」构建了一个不需要双边信任的借贷市场。这套机制如何定价?如何保证不坏账?闪电贷又是怎样「借出还要还回」?本文从协议源码视角逐一拆解。

前置:https://plumephp.com/blockchain-ethereum-evm-state/(EVM 与账户模型)、https://plumephp.com/blockchain-stablecoin-dex-amm/(DeFi 基础设施与流动性)、https://plumephp.com/blockchain-transaction-lifecycle-gas-market/(交易与费用)。

目录

1. 池化借贷范式

Compound 和 Aave 采用 池化借贷(pool-based):所有供应商把资产打入一个共享池,所有借款人从这个池子借出。与点对点(P2P)借贷相比:

维度池化借贷P2P 借贷
匹配自动,池内撮合需逐单匹配
利率算法定价(见第 4 节)协商或拍卖
流动性随时进出依赖对手方
清算协议内自动需人工/担保
                 ┌──────────────┐
  供应商 ──► 存款 ──► │              │ ──► 借款 ──► 借款人
                 │  DAI/USDC 池  │
                 └──────────────┘

核心不变式:池内资产 = 供应商余额 + 借款人余额 + 池储备金。任何操作都不能让池子「资不抵债」——这正是清算机制存在的原因。

2. cToken 与 aToken 设计

池化借贷的记账核心是「生息代币」:Compound 用 cToken(如 cDAI),Aave 用 aToken(如 aDAI)。它们取代了「余额账本」:

存款 100 DAI ──► 铸币获得 100 cDAI(按汇率)
                    │
              利息累积 → cDAI 对 DAI 的汇率上升
                    │
赎回 cDAI ──► 兑换回 >100 DAI(含利息)
  • 汇率即利息:exchangeRate = 池中资产 / cToken 总供应量。利息累积 = 池中资产增长 = 汇率上升,与持有 cToken 的时间无关;
  • 利息结算是「账面上的」:每次供应/借款/赎回/清算时,把「应计利息」计入池中资产与借款余额,俗称「复利记账」;
  • aToken 同样:aToken 余额恒定,但价值随 aToken 对基础资产的汇率增长;
  • 工程要点:生息代币的 价值在兑换时实现,所以「查看余额」要用 underlyingBalanceOf / balanceOfUnderlying,而非原始 balanceOf。

3. 供应、借款与利用率

池子的健康程度由 利用率(utilization) 刻画:U = 总借款 / 总供应。

利用率 U = TotalBorrows / TotalSupply

U 低 → 钱多无人借 → 存款利率低、借款利率低
U 高 → 池子快被借空 → 存款利率高、借款利率高

操作语义:

  • 供应(supply):打入资产 → 按当前汇率铸 cToken;
  • 借款(borrow):必须已有抵押品且健康因子 ≥1 → 按当前汇率减记池中可借余额,加记自己借款;
  • 偿还(repay):还本金 + 应计利息;
  • 提取(withdraw/redeem):烧毁 cToken 换回基础资产(受可提余额限制)。

关键限制:借款不能超过「池中可用流动性」——高利用率的池子(如 U=95%)实际很难借出,这是「挤兑」的缓冲,也是参数治理要盯的指标。

4. 利率模型

利率不是拍脑袋定的,而是由利率模型合约根据 U 自动输出。两种主流:

静态模型(Compound 风格,分段):

U < 拐点(如 80%):borrowRate = 5% + U × 45%   // 平缓段
U ≥ 拐点:           borrowRate = 50% + (U-0.8) × 大斜率  // 陡峭段

动态模型(Aave 风格,kink/jump rate):同样分「最优利用率」前后两段,前缓后陡。

借款利率
  │          ╱ 陡峭段(惩罚高利用)
  │        ╱
  │      ╱ 平缓段
  │    ╱
  │  ╱
  └───────────────────► 利用率
       U*(最优点,如 80%)

设计意图:让「利用率」自己稳定在最优附近——U 高了借贷利率抬升、需求下降,U 低了利率下降、需求回升,形成负反馈。存款利率 = 借款利率 × U(利息在供借之间分配)。

5. 抵押品与健康因子

借款人必须以「可抵押资产」担保,且抵押品价值必须超额覆盖借款。核心指标:

LTV(抵押率)= 可借的最大借款 / 抵押品价值   (如 80% 的 ETH LTV)
健康因子 HF  = (抵押品价值 × 清算阈值) / 借款额
               HF < 1 → 可被清算
参数含义典型值
LTV最多可借的比例0~90%(按资产风险)
清算阈值触发清算的抵押/借款比55%~85%
清算折扣清算者拿到的折价5%~15%
借款上限单池/单账户上限防单点风险

工程要点:用户的操作(借更多、抵押品价格下跌、提取抵押品)会实时重算 HF,任何让 HF < 1 的操作直接 revert——健康因子是协议的「生命线检查点」。

6. 清算机制

当 HF < 1(抵押品价值不足),任何人(清算者)都可以触发清算:

  1. 清算者代替借款人偿还部分借款;
  2. 协议按「清算折扣价」把借款人的抵押品扣给清算者;
  3. 借款人的借款余额减少、抵押品减少,HF 回升。
清算前:HF = 0.9(可清算)
清算者 repay 100 USDC ──► 获得 115 美元等值 ETH(15% 折扣)
清算后:HF 回升到 >1

清算者是 DeFi 的「守门人」:他们把「濒临坏账」的仓位拉回健康,自己赚取折扣收益——清算折扣 < 价格闪崩幅度时,坏账仍会发生(Liquidation Cascade)。

关键反直觉点:清算不等于「没收全部」——只清算「足以回到 HF=1 的最小额度」。清算折扣越大,清算者越积极,但用户的损失也越大——参数需要平衡。

7. 闪电贷

闪电贷(Flash Loan)是 Aave 首创的「无抵押、同笔交易内还回」的机制:

一次闪电贷:
1. 借出 1000 万 USDC
2. 在同一交易内:套利 / 换仓 / 清算 / 救仓...
3. 交易结束前连本带息归还(+0.09% 手续费)
4. 还不上 → 整笔交易 revert(借贷不存在)

为什么安全:EVM 交易是原子的——闪电贷还款在交易提交时已保证,任何环节失败整笔回滚,池子不会损失。

用途:

  • 套利:跨 DEX 价差(无本金套利);
  • 清算:清算者用闪电贷放大仓位;
  • 救仓:用自己的仓位借出、立即偿还,修复 HF;
  • 抵押品置换:在同一笔交易里换掉风险更高的抵押品。

安全边界:闪电贷是操纵价格的放大器——大量借入+砸盘可在同一交易内压低预言机价格触发清算,这是「预言机操纵攻击」的典型配方(见下节)。

8. 系统性风险与漏洞面

借贷协议的风险不是「代码 bug」,而是机制风险 + 实现 bug 的组合:

风险机制对策
预言机操纵闪电贷砸盘 → 价格失真 → 清算/坏账时间加权(TWAP)预言机、喂价多源
流动性挤兑U 逼近 100%,无法提款利用率参数、借款上限、储备金
清算瀑布价格闪崩 → 连环清算 → 坏账清算折扣温和、抵押资产风控
实现 bugcToken/aToken 记账漏洞形式化验证、bug 赏金、审计
衍生品风险杠杆循环放大协议级健康检查、账户级风控

典型案例:攻击者先用闪电贷借出大量代币、在同一交易内压低 DEX 价格,使基于「瞬时价格」的预言机失真,再触发清算拿走抵押品。防御核心是喂价要「慢」且「多源」(TWAP + Chainlink 多源),让瞬时操纵无法影响关键决策。

9. 组合与跨协议

DeFi 借贷的魅力在于可组合:借贷 = 收益引擎,可与其他协议叠加:

循环杠杆:存 ETH → 借 USDC → 买 ETH → 再存 → 再借...
         (放大收益,也放大清算风险)

收益聚合:把闲置 cToken/aToken 再存入收益聚合器(如交协议金库)
流动性即服务:借贷池的资产被 Curve/Balancer 用作做市流动性

风险分层:组合的每一层都引入对手方风险——「抵押品价格下跌」与「聚合协议被攻击」都可能传导为借款人的坏账。给用户的设计建议:杠杆倍数 = 你能承受的清算距离;组合层数 = 你能承受的协议风险敞口。

10. 速查表与一句话记忆

概念一句话解释
cToken/aToken生息代币,汇率随利息上升
利用率 U借款/供应,U 高则利率高
利率模型分段函数,U 越高借款利率越陡
健康因子 HF抵押×清算阈值/借款,<1 可被清算
清算他人替你还款,打折拿走抵押品
闪电贷同交易借还,还不上整笔回滚
头号风险预言机操纵 + 清算瀑布 → 坏账

一句话记忆:借贷 = 池子记账(cToken/aToken)+ 算法定价(利用率→利率)+ 超额抵押(HF)+ 清算守门 + 闪电贷套利,而一切安全的前提是「喂价慢且多源」。

延伸阅读

  • https://plumephp.com/blockchain-stablecoin-dex-amm/ — 稳定币、AMM 与 DeFi 基础设施
  • https://plumephp.com/blockchain-ethereum-evm-state/ — EVM 状态与交易原子性(闪电贷基础)
  • https://plumephp.com/blockchain-cryptography-foundations/ — 签名与预言机可信基础
  • https://plumephp.com/blockchain-mev-block-building/ — 清算与套利在 MEV 中的角色
  • https://plumephp.com/smart-contract-security-audit/ — 借贷协议漏洞审计清单
  • 数据工程专题 — 链上借贷数据的监控与分析
  • 安全专题 — 预言机安全与风控设计

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「blockchain」更多文章

  1. 智能合约部署与升级:代理模式、EIP-1967 与 CREATE2
  2. Layer1 公链内部:P2P 网络、交易池与状态同步
  3. 以太坊治理与 EIP 生命周期:从提案到硬分叉