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. 單一抵押品類別
- 移除多抵押品支援(與 MakerDAO 不同)
- 專注於超流動性抵押品
- 降低系統複雜性
2. 隔離市場
- 借貸資產與抵押品分離
- 減少系統性風險
- 提高資本效率
3. 利率曲線優化
- 更陡峭的利率曲線
- 激勵長期借貸
- 更精細的風險定價
4. 預言機升級
- 改進的價格餵送
- 更快的價格更新
- 增強抗操縱能力
抵押品設計
支持的抵押品
Compound III 主要支持高流動性資產作為抵押品:
| 抵押品 | 抵押因子 | 穩定性 | 市場深度 |
|---|---|---|---|
| ETH | 0.83 | 高 | 非常高 |
| cbBTC (Coinbase Wrapped BTC) | 0.80 | 高 | 高 |
| USDC | 0.90 | 非常高 | 非常高 |
| WBTC | 0.75 | 高 | 高 |
| LINK | 0.70 | 中 | 中 |
抵押因子(Collateral Factor)
抵押因子決定了資產作為抵押品時可以借出的價值比例:
最大借款額 = 抵押品價值 × 抵押因子
示例
假設:
- 存放 10 ETH(價格 $2,000)
- ETH 抵押因子:0.83
抵押品價值 = 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)
| 抵押品 | 清算溢價 |
|---|---|
| ETH | 5% |
| cbBTC | 5% |
| USDC | 3% |
| WBTC | 5% |
清算計算示例
假設:
- 用戶借款 USDC:$10,000
- 抵押品:ETH(價格 $2,000)
- 健康因子:0.85(觸發清算)
- 清算溢價:5%
清算還款:$10,000
清算人獲得抵押品:$10,500($10,000 × 1.05)
用戶損失:$500(5%)
風險管理
抵押品風險
價格波動風險
加密貨幣價格波動可能導致帳戶被清算:
| 抵押品 | 24小時波動 | 對借款影響 |
|---|---|---|
| ETH | ±5-15% | 可能觸發清算 |
| WBTC | ±3-8% | 中等風險 |
| USDC | ±0.1% | 幾乎無風險 |
流動性風險
某些抵押品可能在市場壓力下失去流動性:
- 深度不夠的市場
- 與其他 DeFi 協議的相關性
- 恐慌性拋售導致價格暴跌
帳戶風險管理
建議借款比例
保守型:借款 < 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 III | MakerDAO |
|---|---|---|
| 抵押品類型 | 精選高流動性資產 | 多樣化資產 |
| 借款方式 | 浮動利率 | 穩定利率 |
| 清算方式 | 即時清算 | 荷蘭式拍賣 |
| 靈活性 | 中等 | 高 |
| 複雜度 | 較低 | 較高 |
Compound III vs Aave
| 特性 | Compound III | Aave V3 |
|---|---|---|
| 抵押模型 | 隔離市場 | 統一風險池 + 隔離模式 |
| 利率模型 | 固定參數 | 參數化可調整 |
| 清算激勵 | 固定溢價 | 浮動 |
| Portals | 無 | 有 |
進階使用場景
槓桿策略
示例:槓桿 ETH
- 供應 ETH 作為抵押品
- 借款 USDC
- 將 USDC 換成 ETH
- 再次供應 ETH
- 重複步驟 2-4
風險:如果 ETH 價格下跌,可能被清算。
收益優化
示例:循環借貸
- 供應高收益抵押品(如 ETH)
- 借款低收益資產(如 USDC)
- 供應 USDC 到其他 DeFi 協議
- 賺取差異收益
流動性挖礦
Compound III 定期舉辦流動性挖礦活動:
- 供應和借款可獲得 COMP 代幣獎勵
- 獎勵根據活動調整
- 可通過官方儀表板查詢
安全性考量
智慧合約風險
- 合約漏洞可能導致資金損失
- 定期進行安全審計
- 關注協議升級
預言機風險
- 預言機操縱可能導致錯誤清算
- Compound 使用 Chainlink 餵價
- 設置合理的價格偏差閾值
社交工程風險
- 假冒官方網站
- 釣魚攻擊
- 保護好私鑰
結論
Compound III 代表了去中心化借貸協議的重要演進,其隔離市場設計和精簡的抵押品策略為用戶提供了更安全、更高效的借貸體驗。通過理解抵押模型、利率機制和風險管理策略,用戶可以更好地利用 Compound III 進行資產管理。
對於借款人而言,關鍵是維持足夠的健康因子並實施適當的風險控制。對於流動性提供者而言,理解利率模型有助於優化收益策略。
常見問題
Compound III 與 V2 有何不同?
Compound III 採用隔離市場設計,只支持精選的高流動性抵押品,並大幅優化了 Gas 效率和利率模型。
如何避免被清算?
保持健康因子在 1.5 以上,監控抵押品價格波動,並準備應急資金。
借款利率如何計算?
借款利率基於市場利用率,採用分段線性函數。利用率越高,利率越高。
Compound III 支援哪些抵押品?
主要支援 ETH、cbBTC、WBTC、USDC 和 LINK 等高流動性資產。
清算後會損失多少?
除了償還借款本金外,還需要支付 3-5% 的清算溢價作為清算人激勵。
Compound III 與其他借貸協議的利率差異有多大?
利率差異取決於市場供需狀況。一般而言:
- Compound III 的利率通常略低於 Aave(因為資產種類較少)
- 穩定幣借款利率在 3-8% 之間波動
- 浮動利率會隨市場變化,借款人需承擔利率風險
如何設定健康的借款比例?
建議的借款比例策略:
| 風險偏好 | 借款比例 | 健康因子建議 |
|---|---|---|
| 保守 | < 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 消耗:
- 借款交易:約 150,000-200,000 Gas
- 存款交易:約 100,000-150,000 Gas
- 清算是最昂貴的操作:約 200,000-300,000 Gas
如何監控我的帳戶健康狀況?
有多種方式監控帳戶健康:
- 官方介面:app.compound.finance 直接查看儀表板
- 區塊瀏覽器:查詢合約餘額計算
- 開發者 API:使用 Compound.js 庫查詢
- 自建監控:部署監控機器人追蹤健康因子
延伸閱讀
借貸協議深度分析
DeFi 風險管理
DeFi 進階策略
相關文章
- DeFi 合約風險檢查清單 — 深入解析以太坊技術與應用場景,提供完整的專業技術指南。
- DeFi 清算機制深度實務:從原理到實際案例完整解析 — 去中心化金融(DeFi)協議的清算機制是維持系統健康運作的核心支柱。當借款人抵押品價值下降至不足以覆蓋借款金額時,清算程序會自動啟動,將抵押品拍賣以償還債權人。這個機制的設計直接關係到借貸協議的穩健性與參與者的風險暴露。本文從工程師視角深入探討 DeFi 清算的技術原理、主要清算協議的實作差異、歷史重大清算事件的完整分析,以及開發者和投資者應該掌握的风险管理策略。
- AMM 數學公式完整指南:從基礎常數乘積到進階穩定幣模型 — 自動做市商(Automated Market Maker,AMM)是去中心化金融(DeFi)的核心基礎設施。不同於傳統交易所的訂單簿模型,AMM 採用數學公式來決定交易價格,其定價機制的優劣直接影響流動性效率、交易滑點與資金利用率。本文深入剖析各類 AMM 的數學基礎,從最基礎的常數乘積公式到最新的穩定幣 DEX 演算法,提供完整的推到過程與實務應用指南。
- Intent 與意圖 Economy 完整指南:從概念到實踐的深度解析 — 區塊鏈技術發展十余年來,用戶與區塊鏈交互的方式經歷了顯著演變。從早期需要手動構造交易的複雜操作,到錢包軟體簡化用戶體驗,再到如今即將到來的「意圖經濟」(Intent Economy)時代。這種範式轉移正在根本性地改變用戶與去中心化金融的互動方式。
- Uniswap v4 深度解析:Hooks、Flash Accounting 與 AMM 架構創新 — Uniswap 是以太坊生態系統中最重要的去中心化交易所(DEX),也是自動做市商(Automated Market Maker,AMM)模式的開創者和領先者。2023 年 6 月,Uniswap Labs 發布了 Uniswap v4 的草擬規格,引入了多項革命性創新,包括 Hooks 鉤子機制、Flash Accounting 閃算帳、單一合約架構等。這些創新大幅提升了 AMM 的可定制性和資
延伸閱讀與來源
- Ethereum.org 以太坊官方入口
- EthHub 以太坊知識庫
這篇文章對您有幫助嗎?
請告訴我們如何改進:
評論
發表評論
注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。
目前尚無評論,成為第一個發表評論的人吧!