DeFi 核心协议与流动性挖矿

深入解析去中心化金融核心协议:自动做市商(AMM)数学模型、DEX 交易机制、借贷协议(Compound/Aave)、流动性挖矿收益计算与无常损失分析。附带 Solidity 实战代码。

导语:没有银行,如何完成金融

DeFi(Decentralized Finance)将传统金融的核心功能——交易、借贷、衍生品、保险——搬到了区块链上。它不依赖任何中介机构,而是通过智能合约自动执行金融规则。

截止到 2026 年,DeFi 协议的总锁仓价值(TVL)已超过 500 亿美元,每日在链上结算数十亿美元的交易量。

一句话总结:DeFi 用"可组合的乐高积木"替代了传统金融的中介机构——每一行代码都是透明的,每个人都可以审计和参与。


1. DEX 与自动做市商(AMM)

1.1 为什么传统订单簿不适合链上

中心化交易所(CEX)使用订单簿:买方挂买单,卖方挂卖单,撮合引擎匹配成交。

链上订单簿的问题:

  • gas 成本:每挂一个订单都要上链存储,修改或取消也要付 gas
  • 流动性碎片化:每个交易对独立做市,滑点巨大
  • MEV 攻击:订单簿的深度信息暴露,套利者可提前交易

1.2 Uniswap AMM 模型

Uniswap v2 发明了 x × y = k 恒定乘积做市商模型:

// 核心公式:x * y = k
// x = 代币 A 的储备量
// y = 代币 B 的储备量
// k = 常数(仅在添加/移除流动性时变化)

function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) 
    internal pure returns (uint amountOut) 
{
    require(amountIn > 0, "INSUFFICIENT_INPUT_AMOUNT");
    require(reserveIn > 0 && reserveOut > 0, "INSUFFICIENT_LIQUIDITY");
    
    uint amountInWithFee = amountIn * 997;  // 0.3% 手续费
    uint numerator = amountInWithFee * reserveOut;
    uint denominator = reserveIn * 1000 + amountInWithFee;
    amountOut = numerator / denominator;
}

价格形成机制:

  • 交易前储备:(1000 ETH, 2000 USDC),价格 = 2 USDC/ETH
  • 用 100 ETH 买入 USDC:
    x' = 1000 + 100 = 1100 ETH
    y' = k / x' = (1000 * 2000) / 1100 = 1818.18 USDC
    得到 USDC = 2000 - 1818.18 = 181.82 USDC
    实际价格 ≈ 181.82 / 100 = 1.818 USDC/ETH
    
  • 价格波动越大,滑点越大

1.3 无常损失(Impermanent Loss)

无常损失是 LP(流动性提供者)面临的核心风险:

def impermanent_loss(price_ratio):
    """
    price_ratio = 新价格 / 原始价格
    返回无常损失百分比
    """
    r = price_ratio
    il = 2 * (r ** 0.5) / (1 + r) - 1
    return il * 100

# 价格变化 vs 无常损失
# 价格 ×1.5  → IL = -2.0%
# 价格 ×2    → IL = -5.7%
# 价格 ×3    → IL = -13.4%
# 价格 ×5    → IL = -25.5%

关键理解:无常损失只在提取流动性时实现。如果价格回到初始水平,损失消失。

策略优点缺点
主动做市赚取手续费 + 挖矿奖励无常损失风险
稳定币对 LP无常损失极小收益率较低
单边质押无无常损失无交易手续费

一句话总结:AMM 用数学公式替代订单撮合,x*y=k 确保流动性始终可用,但 LP 承受价格波动导致的"无常损失"。


2. 借贷协议

2.1 Compound/Aave 核心机制

用户存入资产(Supply)
    │
    ├─ 获得 cToken/aToken(代表存款份额的可转让凭证)
    ├─ 存入资产进入资金池,供借款人使用
    └─ 开始按区块累计利息

用户借出资产(Borrow)
    │
    ├─ 必须有超额抵押(Collateral Factor 70%)
    ├─ 借款利率 = f(资金利用率) = 基准利率 + 斜率 × 利用率
    └─ 利息按每秒复利计算

2.2 利率模型

// Compound 的跳跃利率模型
function getBorrowRate(uint cash, uint borrows, uint reserves) public view returns (uint) {
    uint ur = utilizationRate(cash, borrows, reserves);  // 资金利用率
    
    if (ur <= kink) {
        // 低利用率:线性增长
        return multiplierPerBlock * ur / BASE + baseRatePerBlock;
    } else {
        // 高利用率:跳跃增长,激励还款
        uint normalRate = multiplierPerBlock * kink / BASE + baseRatePerBlock;
        uint excessUtil = ur - kink;
        return excessUtil * jumpMultiplierPerBlock / BASE + normalRate;
    }
}
参数含义
资金利用率borrows / (cash + borrows)
kink利用率拐点,通常 80%
baseRate基础利率
multiplier利率斜率
jumpMultiplier拐点后斜率(大幅提升)

2.3 清算机制

function liquidate(address borrower, address repayToken, address seizeToken) external {
    // 1. 检查借款人的健康因子 < 1
    // 健康因子 = (抵押品价值 × 折扣) / 借款总额
    require(healthFactor(borrower) < 1e18, "Account is healthy");
    
    // 2. 清算人偿还借款人的债务
    uint repayAmount = min(borrowBalance, maxCloseFactor);
    
    // 3. 清算人获得抵押品(通常有 5-10% 折扣激励)
    uint seizeTokens = repayAmount * liquidationIncentive / priceOfSeizeToken;
    
    // 4. 执行转移
    transferCollateral(borrower, msg.sender, seizeTokens);
}

一句话总结:DeFi 借贷通过超额抵押 + 动态利率 + 清算机制,实现了无需信用评级的"无信任借贷"。


3. 流动性挖矿(Yield Farming)

3.1 收益来源拆解

流动性挖矿的收益来自三层叠加:

总 APY = 交易手续费分成 (APR)
       + 治理代币奖励 (APR)
       + 底层存款利息 (APR)
       - gas 成本摊销
       - 无常损失

3.2 挖矿策略对比

策略操作风险预期 APY
稳定币质押USDC/USDT LP低无常损失3-8%
ETH/wstETH相关资产 LP极低无常损失2-5%
商品对 LP高波动资产对正常无常损失10-50%
杠杆挖矿借入资产循环投入清算风险不确定
治理代币挖矿质押获得治理权代币价格波动高波动

3.3 收益计算合约

contract YieldCalculator {
    function calculateAPY(
        uint dailyRewardPerLP,     // 每日代币奖励 / LP 总量
        uint tokenPrice,           // 奖励代币价格(USD)
        uint lpTokenPrice,         // LP token 价格(USD)
        uint tradingFeeAPR,        // 年交易手续费率
        uint daysPerYear           // 365
    ) public pure returns (uint totalAPY) {
        uint rewardAPR = dailyRewardPerLP * tokenPrice * daysPerYear / lpTokenPrice;
        totalAPY = rewardAPR + tradingFeeAPR;
    }
    
    // 考虑复利的精确计算
    function calculateAPYCompounded(
        uint rewardPerBlock,       // 每区块奖励代币数
        uint blocksPerYear,        // 年区块数(ETH: ~2.6M)
        uint tokenPrice,
        uint lpValue
    ) public pure returns (uint apy) {
        uint yearlyRewardUSD = rewardPerBlock * blocksPerYear * tokenPrice;
        // 简单 APR
        apy = yearlyRewardUSD * 10000 / lpValue;  // 基点,10000=100%
    }
}

一句话总结:流动性挖矿的收益 = 协议手续费 + 治理代币补贴,风险 = 无常损失 + 智能合约漏洞 + gas 成本。


4. DeFi 风险

风险类型说明防护
智能合约漏洞代码被攻击(重入、溢出、逻辑错误)多重审计、Bug Bounty、保险(Nexus Mutual)
预言机操纵喂价被闪电贷攻击Chainlink 去中心化预言机、TWAP
治理攻击恶意提案通过代币投票时间锁(Timelock)、否决权
无常损失价格波动导致 LP 亏损稳定币对、对冲策略
MEV三明治攻击、抢跑私有交易池、MEV Blocker
跨链桥风险多签/私钥被盗导致资产丢失多重验证、ZK 桥

一句话总结:DeFi 的高收益伴随着高风险——智能合约漏洞和预言机操纵是历史上造成数十亿美元损失的主要原因。


5. 总结

DeFi 协议的三大支柱:

  1. DEX + AMM — Uniswap 的 x*y=k 让任何人都可以成为做市商
  2. 借贷协议 — 超额抵押 + 动态利率模型实现了无信任借贷
  3. 流动性挖矿 — 治理代币激励机制吸引初始流动性

阅读延伸:

继续阅读

探索更多技术文章

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

全部文章 返回首页

「blockchain」更多文章

  1. 智能合约安全审计与常见漏洞
  2. Hardhat 与 Foundry 开发工具链
  3. ERC-20 与 ERC-721 标准详解