借贷协议
借贷协议
本页内容正在整理中,欢迎贡献。
概述
去中心化借贷协议允许用户在无需信用审查的情况下,通过超额抵押资产来借入其他资产。Aave 和 Compound 是以太坊上最大的借贷协议,两者共同定义了 DeFi 借贷的核心机制。
主要内容
核心机制
超额抵押借贷流程:
1. 存款方:存入 ETH → 获得 aETH / cETH(代表存款凭证)2. 借款方:存入 ETH 作为抵押品 → 借出 USDC(抵押率 < 清算阈值)3. 利息:借款方支付利息,存款方赚取利息4. 清算:抵押品价值跌至清算阈值以下时,清算人可偿还债务换取抵押品关键参数
| 参数 | 说明 | 示例 |
|---|---|---|
| LTV(贷款价值比) | 可借出金额 / 抵押品价值 | ETH: 80% |
| 清算阈值 | 触发清算的临界 LTV | ETH: 82.5% |
| 清算奖励 | 清算人获得的折扣 | 5-10% |
| 健康系数 | 清算阈值 / 当前借款比率 | >1 安全 |
// 健康系数计算(Aave 风格)healthFactor = (抵押品总价值 × 清算阈值) / 借款总价值
// 当 healthFactor < 1 时,可被清算与 Aave V3 交互
// SPDX-License-Identifier: MITpragma solidity ^0.8.20;
import "@aave/core-v3/contracts/interfaces/IPool.sol";import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
contract AaveInteraction { IPool constant POOL = IPool(0x87870Bca3F3fD6335C3F4ce8392D69350B4fA4E2); // 主网
// 存款 function supply(address asset, uint256 amount) external { IERC20(asset).transferFrom(msg.sender, address(this), amount); IERC20(asset).approve(address(POOL), amount); POOL.supply(asset, amount, msg.sender, 0); }
// 借款 function borrow(address asset, uint256 amount) external { // interestRateMode: 1 = 稳定利率, 2 = 浮动利率 POOL.borrow(asset, amount, 2, 0, msg.sender); }
// 还款 function repay(address asset, uint256 amount) external { IERC20(asset).transferFrom(msg.sender, address(this), amount); IERC20(asset).approve(address(POOL), amount); POOL.repay(asset, amount, 2, msg.sender); }
// 查询账户状态 function getAccountData(address user) external view returns ( uint256 totalCollateralBase, uint256 totalDebtBase, uint256 availableBorrowsBase, uint256 currentLiquidationThreshold, uint256 ltv, uint256 healthFactor ) { return POOL.getUserAccountData(user); }}利率模型
DeFi 借贷利率根据资金利用率动态调整:
利用率 U = 已借出金额 / 总存款金额
分段线性利率模型(Aave 风格): 当 U < 最优利用率(U_optimal): 借贷利率 = 基础利率 + U/U_optimal × 斜率1
当 U ≥ U_optimal: 借贷利率 = 基础利率 + 斜率1 + (U - U_optimal)/(1 - U_optimal) × 斜率2 (陡峭增长,激励存款人存入)存款利率 = 借贷利率 × 利用率 × (1 - 协议储备率)
清算机制
// Aave 清算调用示例interface IPool { function liquidationCall( address collateralAsset, // 清算人想获取的抵押品 address debtAsset, // 被清算的债务 address user, // 被清算的账户 uint256 debtToCover, // 偿还的债务金额(或 type(uint256).max 全部偿还) bool receiveAToken // 是否接收 aToken 而非底层资产 ) external;}
// 清算流程:// 1. 检查账户 healthFactor < 1// 2. 批准 debtAsset 授权给 Pool// 3. 调用 liquidationCall// 4. 获得 collateralAsset(含 5-10% 奖励)Compound cToken 模型
Compound 使用 cToken 模型,存款自动复利:
// cToken 汇率随时间增长// cToken 数量 × exchangeRate = 底层资产数量
// 存款function mint(uint mintAmount) external returns (uint);
// 取款function redeem(uint redeemTokens) external returns (uint);function redeemUnderlying(uint redeemAmount) external returns (uint);
// 借款function borrow(uint borrowAmount) external returns (uint);
// 还款function repayBorrow(uint repayAmount) external returns (uint);风险注意事项
- 清算风险:价格波动导致抵押不足时,头寸会被清算并损失抵押品
- 利率风险:浮动利率可能在市场紧张时急剧上升
- 智能合约风险:协议本身可能存在漏洞
- 预言机风险:价格操纵可能触发恶意清算
深入阅读
- Aave V3 文档
- Compound 文档
- 闪电贷 —— 借贷协议的特殊功能
- MEV 基础 —— 清算机器人如何工作