跳转到内容

借贷协议

借贷协议

本页内容正在整理中,欢迎贡献

概述

去中心化借贷协议允许用户在无需信用审查的情况下,通过超额抵押资产来借入其他资产。Aave 和 Compound 是以太坊上最大的借贷协议,两者共同定义了 DeFi 借贷的核心机制。

主要内容

核心机制

超额抵押借贷流程:

1. 存款方:存入 ETH → 获得 aETH / cETH(代表存款凭证)
2. 借款方:存入 ETH 作为抵押品 → 借出 USDC(抵押率 < 清算阈值)
3. 利息:借款方支付利息,存款方赚取利息
4. 清算:抵押品价值跌至清算阈值以下时,清算人可偿还债务换取抵押品

关键参数

参数说明示例
LTV(贷款价值比)可借出金额 / 抵押品价值ETH: 80%
清算阈值触发清算的临界 LTVETH: 82.5%
清算奖励清算人获得的折扣5-10%
健康系数清算阈值 / 当前借款比率>1 安全
// 健康系数计算(Aave 风格)
healthFactor = (抵押品总价值 × 清算阈值) / 借款总价值
// 当 healthFactor < 1 时,可被清算

与 Aave V3 交互

// SPDX-License-Identifier: MIT
pragma 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);

风险注意事项

  1. 清算风险:价格波动导致抵押不足时,头寸会被清算并损失抵押品
  2. 利率风险:浮动利率可能在市场紧张时急剧上升
  3. 智能合约风险:协议本身可能存在漏洞
  4. 预言机风险:价格操纵可能触发恶意清算

深入阅读