Compound III 抵押模型完整教學

Compound 是以太坊生態系統中最具影響力的去中心化借貸協議之一,其 Compound III(簡稱 cETH)版本帶來了重大的架構革新。與前代版本相比,Compound III 採用了更靈活的抵押品設計、引入了資產隔離概念,並大幅優化了資本效率。本文將深入分析 Compound III 的抵押模型設計、資產風險管理機制、利率模型以及使用者應注意的風險要點。

Compound III 抵押模型完整教學

概述

Compound 是以太坊生態系統中最具影響力的去中心化借貸協議之一,其 Compound III(簡稱 cETH)版本帶來了重大的架構革新。與前代版本相比,Compound III 採用了更靈活的抵押品設計、引入了資產隔離概念,並大幅優化了資本效率。本文將深入分析 Compound III 的抵押模型設計、資產風險管理機制、利率模型以及使用者應注意的風險要點。

Compound 演進歷程

Compound V2 回顧

特點

局限性

Compound III 重大革新

1. 單一抵押品類別

2. 隔離市場

3. 利率曲線優化

4. 預言機升級

抵押品設計

支持的抵押品

Compound III 主要支持高流動性資產作為抵押品:

抵押品抵押因子穩定性市場深度
ETH0.83非常高
cbBTC (Coinbase Wrapped BTC)0.80
USDC0.90非常高非常高
WBTC0.75
LINK0.70

抵押因子(Collateral Factor)

抵押因子決定了資產作為抵押品時可以借出的價值比例:

最大借款額 = 抵押品價值 × 抵押因子

示例

假設:

抵押品價值 = 10 × $2,000 = $20,000
最大借款額 = $20,000 × 0.83 = $16,600

借款能力計算

健康因子

健康因子是 Compound III 中最重要的風險指標:

健康因子 = 借款能力 / 借款餘額 × 100%

當健康因子低於 1.0 時,帳戶將被清算。

實際計算

// Compound III 健康因子計算
struct UserCollateral {
    uint128 balance;           // 抵押品餘額
    uint128 _reserved;         // 保留
}

struct UserBorrow {
    uint128 principal;         // 借款本金
    uint128 interestIndex;     // 利率指數
}

function healthFactor(
    address account,
    mapping(address => UserCollateral) storage collateral,
    mapping(address => UserBorrow) storage borrows
) internal view returns (uint256) {
    // 計算總借款能力
    uint256 totalBorrowingPower = 0;

    // 遍歷所有抵押品
    for (address asset : collateralAssets) {
        UserCollateral memory col = collateral[asset];
        if (col.balance > 0) {
            // 獲取資產價格
            uint256 price = oracle.getPrice(asset);
            // 計算借款能力
            uint256 assetValue = col.balance * price / 1e18;
            totalBorrowingPower += assetValue * collateralFactor[asset] / 1e18;
        }
    }

    // 計算總借款餘額
    uint256 totalBorrow = 0;
    for (address asset : borrowAssets) {
        UserBorrow memory borrow = borrows[asset];
        if (borrow.principal > 0) {
            // 計算應計利息
            uint256 currentBalance = borrow.principal *
                borrow.interestIndex / borrow.interestIndex;
            uint256 price = oracle.getPrice(asset);
            totalBorrow += currentBalance * price / 1e18;
        }
    }

    // 健康因子 = 借款能力 / 借款餘額
    if (totalBorrow == 0) return type(uint256).max;

    return totalBorrowPower * 1e18 / totalBorrow;
}

借款市場設計

隔離市場架構

Compound III 採用隔離市場設計,將借貸資產與抵押品分開:

結構

主要市場(主要抵押品)
├── 借款資產:USDC, USDT, DAI
└── 抵押品:ETH, cbBTC

其他市場(擴展)
├── 借款資產:更多穩定幣
└── 抵押品:更多代幣

優勢

借款限制

帳戶借款限額

每個資產有借款上限:

struct Market {
    uint128 totalSupply;        // 總供應量
    uint128 totalBorrow;       // 總借款
    uint104 rateModel;         // 利率模型
    uint64 lastUpdate;         // 上次更新
    uint128 borrowRate;       // 借款利率
    uint256 borrowCap;         // 借款上限
}

示例限制

資產借款上限原因
USDC$100,000,000流動性考量
DAI$50,000,000風險控制
ETH$10,000,000波動性大

利率模型

利率曲線

Compound III 使用分段線性利率模型:

借款利率 = 基礎利率 + (利用率 × 斜率)

參數示例(USDC)

基礎利率:2%
拐點利用率:80%
斜率1(0-80%):3%
斜率2(80%-100%):50%

利率計算公式

function getBorrowRate(Market storage market) internal returns (uint256) {
    uint256 utilization = market.totalBorrow * 1e18 / market.totalSupply;

    if (utilization < utilizationKink1) {
        // 低利用率區間
        return baseRate + utilization * multiplier1 / 1e18;
    } else if (utilization < utilizationKink2) {
        // 中等利用率區間
        return baseRate + utilizationKink1 * multiplier1 / 1e18 +
            (utilization - utilizationKink1) * multiplier2 / 1e18;
    } else {
        // 高利用率區間(陡峭曲線)
        return baseRate + utilizationKink1 * multiplier1 / 1e18 +
            (utilizationKink2 - utilizationKink1) * multiplier2 / 1e18 +
            (utilization - utilizationKink2) * multiplier3 / 1e18;
    }
}

供應利率

供應者收到的利率是借款利率乘以利用率再扣除協議費用:

供應利率 = 借款利率 × 利用率 × (1 - 協議費用率)

清算機制

清算觸發

清算條件

當帳戶健康因子低於 1.0 時,任何人都可以發起清算:

function liquidate(
    address borrower,
    address assetToSeize,
    uint256 repayAmount
) external {
    // 驗證健康因子
    uint256 health = accountLiquidity[borrower];
    require(health < 0, "Account healthy");

    // 計算清算獎勵
    uint256 seizeAmount = repayAmount *
        liquidationIncentive[assetToSeize] / 1e18;

    // 執行清算
    // 1. 償還借款
    // 2. 沒收抵押品
    // 3. 轉移資產
}

清算激勵

Compound III 使用激勵機制鼓勵清算人參與:

清算溢價(Liquidation Incentive)

抵押品清算溢價
ETH5%
cbBTC5%
USDC3%
WBTC5%

清算計算示例

假設:

清算還款:$10,000
清算人獲得抵押品:$10,500($10,000 × 1.05)
用戶損失:$500(5%)

風險管理

抵押品風險

價格波動風險

加密貨幣價格波動可能導致帳戶被清算:

抵押品24小時波動對借款影響
ETH±5-15%可能觸發清算
WBTC±3-8%中等風險
USDC±0.1%幾乎無風險

流動性風險

某些抵押品可能在市場壓力下失去流動性:

帳戶風險管理

建議借款比例

保守型:借款 < 30% 借款能力
平衡型:借款 30-50% 借款能力
激進型:借款 50-70% 借款能力(不推薦)

風險監控腳本

// monitor-compound.js
const { ethers } = require('ethers');

const COMPOUND_III_ADDRESS = "0xc3d688B66703497DAA19211EEdff47f25384cdc3"; // Compound III
const ERC20_ABI = ["function balanceOf(address) view returns (uint256)"];

async function checkAccountHealth(account, provider) {
    const compound = new ethers.Contract(
        COMPOUND_III_ADDRESS,
        COMPOUND_ABI,
        provider
    );

    // 獲取帳戶健康因子
    const health = await compound.getAccountLiquidity(account);

    if (health[0] < 0) {
        // 健康因子 < 1
        console.log(`WARNING: Account ${account} is liquidatable!`);
        console.log(`Liquidity: ${ethers.formatEther(health[1])}`);
    } else {
        console.log(`Account healthy. Liquidity: ${ethers.formatEther(health[1])}`);
    }
}

// 持續監控
setInterval(() => {
    checkAccountHealth(walletAddress, provider);
}, 60000); // 每分鐘檢查

清算保護策略

1. 維持充足抵押率

始終保持健康因子在 1.5 以上,為價格波動留出緩衝。

2. 分散抵押品

將資產分散到多個抵押品類型,降低單一資產風險。

3. 設置警報

使用工具如 Tenderly 或自建監控,在健康因子接近臨界值時發送警報。

4. 準備應急資金

保持一定數量的流動資金,以便在需要時及時增加抵押品或償還借款。

實際操作指南

借款流程

步驟 1:供應抵押品

// 供應 ETH 作為抵押品
function supplyCollateral(address asset, uint256 amount) external {
    // 批准 ERC20
    IERC20(asset).approve(compoundAddr, amount);

    // 調用供應函數
    ICompoundV3(compoundAddr).supply(asset, amount);
}

步驟 2:啟用借款

// 啟用借款
function enableCollateral(address asset) external {
    ICompoundV3(compoundAddr).toggleAccountCollateral(asset, true);
}

步驟 3:借款

// 借款 USDC
function borrow(address asset, uint256 amount) external {
    ICompoundV3(compoundAddr).borrow(asset, amount);
}

還款流程

// 還款
function repay(address asset, uint256 amount) external {
    // 批准還款
    IERC20(asset).approve(compoundAddr, amount);

    // 調用還款
    ICompoundV3(compoundAddr).repay(asset, amount);
}

提取抵押品

// 提取抵押品
function withdrawCollateral(address asset, uint256 amount) external {
    // 檢查提取後健康因子
    uint256 health = getHealthFactor(msg.sender);
    require(health > 1.5, "Health factor too low");

    ICompoundV3(compoundAddr).withdraw(asset, amount);
}

與競爭協議比較

Compound III vs MakerDAO

特性Compound IIIMakerDAO
抵押品類型精選高流動性資產多樣化資產
借款方式浮動利率穩定利率
清算方式即時清算荷蘭式拍賣
靈活性中等
複雜度較低較高

Compound III vs Aave

特性Compound IIIAave V3
抵押模型隔離市場統一風險池 + 隔離模式
利率模型固定參數參數化可調整
清算激勵固定溢價浮動
Portals

進階使用場景

槓桿策略

示例:槓桿 ETH

  1. 供應 ETH 作為抵押品
  2. 借款 USDC
  3. 將 USDC 換成 ETH
  4. 再次供應 ETH
  5. 重複步驟 2-4

風險:如果 ETH 價格下跌,可能被清算。

收益優化

示例:循環借貸

  1. 供應高收益抵押品(如 ETH)
  2. 借款低收益資產(如 USDC)
  3. 供應 USDC 到其他 DeFi 協議
  4. 賺取差異收益

流動性挖礦

Compound III 定期舉辦流動性挖礦活動:

安全性考量

智慧合約風險

預言機風險

社交工程風險

結論

Compound III 代表了去中心化借貸協議的重要演進,其隔離市場設計和精簡的抵押品策略為用戶提供了更安全、更高效的借貸體驗。通過理解抵押模型、利率機制和風險管理策略,用戶可以更好地利用 Compound III 進行資產管理。

對於借款人而言,關鍵是維持足夠的健康因子並實施適當的風險控制。對於流動性提供者而言,理解利率模型有助於優化收益策略。

常見問題

Compound III 與 V2 有何不同?

Compound III 採用隔離市場設計,只支持精選的高流動性抵押品,並大幅優化了 Gas 效率和利率模型。

如何避免被清算?

保持健康因子在 1.5 以上,監控抵押品價格波動,並準備應急資金。

借款利率如何計算?

借款利率基於市場利用率,採用分段線性函數。利用率越高,利率越高。

Compound III 支援哪些抵押品?

主要支援 ETH、cbBTC、WBTC、USDC 和 LINK 等高流動性資產。

清算後會損失多少?

除了償還借款本金外,還需要支付 3-5% 的清算溢價作為清算人激勵。

Compound III 與其他借貸協議的利率差異有多大?

利率差異取決於市場供需狀況。一般而言:

如何設定健康的借款比例?

建議的借款比例策略:

風險偏好借款比例健康因子建議
保守< 30%> 2.0
均衡30-50%> 1.5
激進50-70%> 1.2
極度高槓桿> 70%> 1.0(不推薦)

Compound III 支援閃電貸嗎?

是的,Compound III 支援閃電貸功能。開發者可以利用閃電貸在同一區塊內完成複雜操作,無需前期資金:

// Compound III 閃電貸示例
function flashLoan(uint256 amount) external {
    // 借款
    ICompoundV3(address(this)).borrow(asset, amount);

    // 在同一區塊內執行操作
    // ...

    // 立即償還(否則交易失敗)
    IERC20(asset).transfer(address(pool), amount + fee);
}

Compound III 的 Gas 效率如何?

相比 V2,Compound III 優化了約 30% 的 Gas 消耗:

如何監控我的帳戶健康狀況?

有多種方式監控帳戶健康:

  1. 官方介面:app.compound.finance 直接查看儀表板
  2. 區塊瀏覽器:查詢合約餘額計算
  3. 開發者 API:使用 Compound.js 庫查詢
  4. 自建監控:部署監控機器人追蹤健康因子

延伸閱讀

借貸協議深度分析

DeFi 風險管理

DeFi 進階策略

延伸閱讀與來源

這篇文章對您有幫助嗎?

評論

發表評論

注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。

目前尚無評論,成為第一個發表評論的人吧!