MakerDAO 協定深度技術分析完整指南:Dai 穩定幣機制、清算邏輯與治理架構

本文深入分析 MakerDAO 協定各核心組件的技術實作,包括 Vat 核心債務引擎、Vault 抵押與清算邏輯、Cat 清算拍賣機制、DSR Dai 存款利率模組、PSM 錨定穩定模組、以及 MKR 治理合約的運作方式。提供完整的合約地址、核心函數的 Solidity 程式碼分析、以及清算拍賣的數學模型推導。

MakerDAO 協定深度技術分析完整指南: Dai 穩定幣機制、清算邏輯與治理架構

概述

MakerDAO 是以太坊生態系統中歷史最悠久且最重要的去中心化自治組織之一,其發行的 Dai 穩定幣是 DeFi 領域首個成功的去中心化穩定幣解决方案。與 USDC、USDT 等中心化穩定幣不同,Dai 採用超額抵押機制,透過智慧合約自動維持與美元的掛鉤,無需任何中心化機構的信用背書。

截至 2026 年第一季度,MakerDAO 的金庫(Vault)系統管理著超過 50 億美元的抵押資產,包括 ETH、WBTC、USDC 以及多種 RWA(真實世界資產)代幣。Dai 的總發行量穩定在 5-6 億枚,平均清算抵押率維持在 280-320% 的安全區間。MakerDAO 的治理系統允許 MKR 代幣持有者透過投票決定關鍵參數,包括穩定費率、債務上限、清算比率等。

本文深入分析 MakerDAO 協定各核心組件的技術實作,包括:Dai 穩定機制的數學原理、Vault 抵押與清算邏輯、DSR( Dai 存款利率)機制、PSM(錨定穩定模組)、以及 MKR 治理合約的運作方式。我們將提供完整的合約位址、核心函數的程式碼分析、以及這些設計選擇背後的安全考量。

第一章:MakerDAO 系統架構概述

1.1 系統核心組件

MakerDAO 的系統由多個智慧合約協作構成,每個組件負責特定的功能模組:

MakerDAO 核心架構
┌────────────────────────────────────────────────────────────┐
│  組件名稱              │  功能職責                         │
├────────────────────────────────────────────────────────────┤
│  Vat                  │  核心債務引擎,記錄所有抵押狀態    │
│  Jug                  │  穩定費率計算與徵收               │
│  Cat                  │  清算引擎,執行抵押品拍賣         │
│  Vow                  │  債務緩衝池,管理系統盈餘與虧損   │
│  Dai                  │  穩定幣代幣合約                   │
│  DSR                  │  Dai 存款利率模組                 │
│  PSM                  │  錨定穩定模組,1:1 兌換 USDC     │
│  MKR                  │  治理代幣合約                     │
│  Gem                  │  抵押品代幣介面抽象層             │
│  End                  │  結算引擎,處理緊急關閉           │
└────────────────────────────────────────────────────────────┘

1.2 主要合約地址(2026 年主網版本)

MakerDAO 核心合約地址
┌────────────────────────────────────────────────────────────┐
│  合約名稱              │  地址                                │
├────────────────────────────────────────────────────────────┤
│  Vat (DS-Chief)       │  0x35D1b3F3D7966A1DFe207aa4514C12  │
│                        │  a25906c185600a9183C83656E2F4C7   │
│  Dai Token            │  0x6B175474E89094C44Da98b954Eede   │
│                        │  AB495631944894AF635E9640C3BB    │
│  MKR Token            │  0x9f8F72AA9304c8B593d555F12eF658   │
│                        │  9c3c9283D3e44854697Cd22D3Faa24   │
│  Jug                  │  0xCBa8a350c7b07D83bF407C2A44D1d1  │
│                        │  c6FCF8e7bAAD27B0e6BAB77D4F2B9F  │
│  Cat                   │  0xC1105A4a131a0998B63D2C1f2c4c3  │
│                        │  aB8d12E4f8C2D0aB1b2C3D4E5F6G7   │
│  Vow                  │  0xA950524c8F6bB3b6e0F6D2E3A4B5C6 │
│  DSR (DaiJoin)        │  0x4e4d5D7E5B6A7aB3c2D1E0F9A8B7C6 │
│  PSM                  │  0x5B3A5b6E7F8D9C0B1A2E3F4A5B6C7D8 │
└────────────────────────────────────────────────────────────┘

註:以上為示意地址,請以 MakerDAO 官方文檔為準

第二章:核心債務引擎 Vat

2.1 Vat 合約架構

Vat 是 MakerDAO 系統的中央狀態合約,儲存所有用戶的抵押和債務資訊。所有 Vault 的狀態、債務參數、抵押品餘額都記錄在 Vat 中。

// Vat.sol 核心合約分析
pragma solidity ^0.8.19;

contract Vat {
    // 抵押品型態映射
    mapping(address => GemLike) public collateralList;
    
    // 抵押品狀態
    // urns[urn][ilk] 存儲某個 Vault 的抵押品資訊
    struct Urn {
        uint256 ink;      // 抵押品數量
        uint256 art;      // 債務(以 Dai 計算)
    }
    mapping(address => mapping(bytes32 => Urn)) public urns;
    
    // 用戶抵押品餘額
    // gem[ilk][usr] 存儲用戶在某個抵押型態中的代幣餘額
    mapping(bytes32 => mapping(address => uint256)) public gem;
    
    // 全域債務參數
    struct Ilk {
        uint256 Art;          // 該型態的總債務
        uint256 rate;         // 累積利率(每次 stability fee 後更新)
        uint256 spot;         // 清算閾值(清算比率的倒數)
        uint256 line;         // 債務上限
        uint256 dust;         // 最小債務金額
    }
    mapping(bytes32 => Ilk) public ilks;
    
    // Dai 代幣總供應量
    uint256 public debt;  // Vat 中記錄的總 Dai 債務
    
    // 萬能美元(internal Dai)
    // 在 Vat 內部,Dai 被稱為 "vai" 或 "dai",使用 18 位精度
    mapping(address => uint256) public dai;
    
    // 核心:借貸函數
    function frob(
        bytes32 i,      // 抵押型態 (如 "ETH-A")
        address u,      // Vault 地址
        address v,      // 轉入抵押品接收方
        address w,      // 轉出抵押品發送方
        int256 dink,    // 抵押品變化量
        int256 dart     // 債務變化量
    ) external {
        Ilk storage ilk = ilks[i];
        Urn storage urn = urns[u][i];
        
        // 更新抵押品
        urn.ink = uint256(int256(urn.ink) + dink);
        urn.art = uint256(int256(urn.art) + dart);
        ilk.Art = uint256(int256(ilk.Art) + dart);
        
        // 計算抵押品價值(考慮清算比率)
        uint256 bit = mul(urn.ink, ilk.spot);
        
        // 檢查健康狀況
        require(bit >= mul(urn.art, ilk.rate), "Vat/not-safe");
        
        // 轉移抵押品
        if (dink > 0) {
            gem[i][v] = add(gem[i][v], uint256(dink));
        }
        if (dink < 0) {
            gem[i][w] = sub(gem[i][w], uint256(-dink));
        }
        
        // 計算並記錄穩定費
        if (dart > 0) {
            uint256 tab = mul(ilk.rate, uint256(dart));
            dai[msg.sender] = add(dai[msg.sender], tab);
            debt = add(debt, tab);
        }
        
        emit Frob(i, u, v, w, dink, dart);
    }
}

2.2 抵押品與債務的數學模型

Vat 使用定點數運算處理所有數值計算,這是出於精確性和安全性的考量:

Vat 核心數學運算
┌────────────────────────────────────────────────────────────┐
│  運算類型              │  公式                              │
├────────────────────────────────────────────────────────────┤
│  抵押品價值            │  collateral_value = ink × spot    │
│  債務價值              │  debt_value = art × rate          │
│  健康狀況檢查          │  ink × spot >= art × rate         │
│  可鑄造 Dai            │  max_dai = (ink × spot) / rate    │
│  清算抵押率            │  collateral_ratio = 1 / spot      │
└────────────────────────────────────────────────────────────┘

假設:
- ETH-A 抵押型態:spot = 150 (即清算比率 150%)
- 當前 rate = 1.05 (5% 年化利率)
- 存入 1 ETH (假設 ETH = $2,000)

計算:
- 抵押品價值 = 1 × 150 × 2000 = $300,000 (等效)
- 實際抵押美元值 = 1 × 2000 = $2,000
- 最大可借 Dai = (1 × 150) / 1.05 = 142.86 Dai
- 清算門檻 = 142.86 × 1.05 = 150 Dai (等效抵押)

2.3 抵押型態(Ilk)參數詳解

MakerDAO 支援多種抵押型態,每種型態有獨立的參數:

常見抵押型態參數(2026 年第一季度)
┌────────────────────────────────────────────────────────────┐
│  型態      │  抵押品   │  清算比率 │  穩定費率 │  債務上限  │
├────────────────────────────────────────────────────────────┤
│  ETH-A     │  Wrapped  │  145%     │  3.5%     │  500M     │
│            │  ETH      │           │           │           │
│  ETH-B     │  WETH     │  130%     │  5.0%     │  200M     │
│  WBTC-A    │  Wrapped  │  150%     │  4.0%     │  300M     │
│            │  Bitcoin  │           │           │           │
│  WBTC-B    │  WBTC     │  130%     │  6.0%     │  100M     │
│  USDC-A    │  USDC     │  101%     │  0.0%     │  1.0B     │
│  PSM-USDC-A│  USDC     │  100%     │  0.0%     │  500M     │
│  RWA-001   │  國債代幣  │  100%     │  0.35%    │  100M     │
│  RWA-002   │  房地產代幣│  110%     │  0.45%    │  50M      │
└────────────────────────────────────────────────────────────┘

第三章:清算引擎 Cat

3.1 清算機制原理

當 Vault 的抵押率降至清算比率以下時,任何人都可以觸發清算程序。Cat 合約負責執行清算拍賣:

// Cat.sol 清算合約分析
pragma solidity ^0.8.19;

contract Cat {
    // 清算拍賣參數
    struct Bid {
        uint256 bidAmount;      // 拍賣出價
        uint256 lotAmount;      // 拍賣抵押品數量
        address highestBidder;  // 最高出價者
        uint256 endTime;        // 拍賣截止時間
        address owner;          // 原始 Vault 所有者
        address ilk;            // 抵押型態
    }
    
    // 抵押型態清算參數
    struct Ilk {
        address flip;           // Flip 合約地址
        uint256 chop;           // 清算罰款倍數(使用 RAD 精度)
        uint256 dunk;           // 每筆清算的最大抵押品量
    }
    mapping(bytes32 => Ilk) public ilks;
    
    // 清算觸發
    function bite(
        bytes32 ilk,
        address urn
    ) external returns (uint256 id) {
        VatLike vat = vat;
        Urn memory u = vat.urns(urn, ilk);
        
        Ilk memory i = ilks[ilk];
        
        // 檢查是否應該被清算
        // 抵押品價值 < 債務 × 清算罰款
        uint256 owe = mul(u.art, vat.ilks(ilk).rate);
        uint256 gap = mul(u.ink, vat.ilks(ilk).spot);
        
        require(gap < owe, "Vault is safe");
        
        // 計算清算罰款
        uint256 tab = mul(owe, i.chop);
        
        // 創建拍賣
        id = ++kicks;
        bids[id] = Bid({
            bidAmount: tab,
            lotAmount: u.ink,
            highestBidder: address(0),
            endTime: now + bidDuration,
            owner: urn,
            ilk: ilk
        });
        
        // 將抵押品轉移到 Cat
        vat.flux(ilk, urn, address(this), u.ink);
        
        // 清空 Vault
        vat.frob(ilk, urn, address(0), address(0), -int256(u.ink), -int256(u.art));
        
        emit Bite(ilk, urn, u.ink, tab);
    }
    
    // 拍賣投標
    function tend(
        uint256 id,
        uint256 lotAmount,
        uint256 bidAmount
    ) external {
        Bid storage bid = bids[id];
        
        // 檢查拍賣狀態
        require(now < bid.endTime, "Auction ended");
        require(bidAmount <= bid.bidAmount, "Bid too high");
        require(lotAmount == bid.lotAmount, "Lot changed");
        
        // 轉入 Dai
        dai[msg.sender] -= bidAmount;
        
        // 退還給之前的投標者
        if (bid.highestBidder != address(0)) {
            dai[bid.highestBidder] += bid.bidAmount;
        }
        
        // 更新投標
        bid.bidAmount = bidAmount;
        bid.highestBidder = msg.sender;
        bid.endTime = now + bidDuration;
    }
    
    // 領取抵押品
    function deal(
        uint256 id
    ) external {
        Bid storage bid = bids[id];
        
        // 拍賣結束
        require(now >= bid.endTime, "Auction active");
        require(bid.highestBidder != address(0), "No bids");
        
        // 抵押品轉給勝出者
        VatLike(vat).flux(
            bid.ilk, 
            address(this), 
            bid.highestBidder, 
            bid.lotAmount
        );
        
        // 燒毀 Dai 債務
        VatLike(vat).burn(bid.highestBidder, bid.bidAmount);
        
        delete bids[id];
    }
}

3.2 清算拍賣數學模型

清算拍賣採用荷蘭拍賣(Dutch Auction)機制,起始價格較高,隨時間下降:

清算拍賣定價模型
┌────────────────────────────────────────────────────────────┐
│  階段              │  價格計算                             │
├────────────────────────────────────────────────────────────┤
│  起始價格          │  抵押品價值 × (1 + 清算罰款)          │
│  價格衰減          │  每個區塊下降固定比例                 │
│  終止條件          │  有投標者且拍賣持續超過最長時間       │
└────────────────────────────────────────────────────────────┘

數學公式:
P(t) = P0 × (1 - δ)^t

其中:
- P0 = 起始價格
- δ = 每區塊衰減率(通常 0.5%)
- t = 經過的區塊數

示例:
假設拍賣 1 ETH 抵押品:
- 起始價格 = 2000 × 1.13 = 2260 Dai
- 13% 清算罰款
- 每區塊衰減 0.5%
- 10 區塊後價格 ≈ 2260 × (0.995)^10 ≈ 2150 Dai

3.3 清算流程完整示例

清算流程示例
┌────────────────────────────────────────────────────────────┐
│  步驟 1: 用戶創建 Vault                                   │
│  - 存入 10 ETH (假設 $2,000/ETH = $20,000)                │
│  - 借款 50,000 Dai                                        │
│  - 抵押率 = $20,000 / $50,000 = 40%...wait               │
│  - 抵押率 = 20000/50000 = 40% → 需要 >150%                │
│  - 實際:借 60,000 Dai → 抵押率 = 33.3%(不合規)         │
│  - 正確:借 60,000 Dai → 抵押率 = 20000/60000 = 33.3%    │
│  - 最大借款 ≈ 133,333 Dai (假設 spot = 150, rate = 1)     │
│                                                            │
│  步驟 2: 抵押率跌破閾值                                  │
│  - ETH 價格下跌至 $1,300                                   │
│  - 新抵押率 = 13000/60000 = 21.67% < 145%                │
│  - 任何人可觸發清算                                       │
│                                                            │
│  步驟 3: 清算拍賣                                        │
│  - 拍賣 10 ETH,起始價 13 × 1300 × 1.13 = 19,094 Dai    │
│  - 投標者出價逐漸降低                                     │
│  - 最終成交:假設 15,000 Dai                              │
│                                                            │
│  步驟 4: 清算完成                                        │
│  - 拍賣者支付 15,000 Dai                                  │
│  - 獲得 10 ETH                                            │
│  - 系統收回 60,000 Dai 債務                               │
│  - 若拍賣收入不足,啟動 MKR 增發機制                      │
└────────────────────────────────────────────────────────────┘

第四章:Dai 存款利率(DSR)機制

4.1 DSR 合約架構

Dai 存款利率模組允許 Dai 持有者將 Dai 存入 MakerDAO 系統以賺取利息:

// DSR.sol 分析
pragma solidity ^0.8.19;

contract DSR {
    // 存款映射
    mapping(address => uint256) public balances;
    
    // 存款總額
    uint256 public total;
    
    // 年化利率(使用 RAY 精度 = 10^27)
    uint256 public chi;
    uint256 public rate;  // 例如 1.03 表示 3% 年化
    
    // 最後更新時間
    uint256 public lastUpdate;
    
    // 存款函數
    function join(uint256 wad) external {
        // 計算未領取的利息
        _accrue();
        
        // 將 Dai 從用戶轉入合約
        dai.transferFrom(msg.sender, address(this), wad);
        
        // 計算新的餘額(以 internal Dai 計算)
        uint256 w = rmul(wad, chi);
        balances[msg.sender] += w;
        total += w;
    }
    
    // 提款函數
    function exit(uint256 wad) external {
        // 計算未領取的利息
        _accrue();
        
        // 計算可提取的 Dai
        uint256 w = rdiv(wad, chi);
        require(balances[msg.sender] >= w, "Not enough balance");
        
        // 更新餘額
        balances[msg.sender] -= w;
        total -= w;
        
        // 轉出 Dai
        dai.transfer(msg.sender, wad);
    }
    
    // 利息累計
    function _accrue() internal {
        // 計算自上次更新以來的利息
        uint256 now = block.timestamp;
        uint256 elapsed = now - lastUpdate;
        
        if (elapsed > 0) {
            // 計算新的 chi
            // chi = chi * (1 + rate * elapsed / year)^(elapsed/year)
            // 簡化:每秒利率 = rate / seconds_in_year
            uint256 perSecond = rdiv(rate, 31536000);
            uint256 index = rpow(perSecond, elapsed);
            chi = rmul(chi, index);
            lastUpdate = now;
        }
    }
    
    // 查看餘額(包含利息)
    function balanceOf(address usr) external view returns (uint256) {
        return rdiv(balances[usr], _getCurrentChi());
    }
}

4.2 DSR 利率數學模型

DSR 採用連續複利模型計算存款利息:

DSR 利率計算
┌────────────────────────────────────────────────────────────┐
│  參數定義                                                  │
├────────────────────────────────────────────────────────────┤
│  RAY = 10^27(高精度定點數)                               │
│  rate = 年化利率(例如 1.03 = 3%)                         │
│  chi = 存款指數(累計利息後的乘數)                         │
└────────────────────────────────────────────────────────────┘

利息計算公式:
Δchi = chi × rate^(Δt) - chi

或使用連續複利:
Δchi = chi × e^(rate × Δt) - chi

實際實現(離散近似):
chi_new = chi_old × (1 + rate_per_second)^seconds

其中:
rate_per_second = (rate - 1) / seconds_in_year

示例:
假設:
- 初始 chi = 1 RAY
- 年化利率 = 3%
- 存款 10,000 Dai
- 存款時間 = 1 年

計算:
- rate_per_second = 0.03 / 31536000 ≈ 9.51e-10
- 一年後 chi ≈ 1 × (1 + 9.51e-10)^31536000 ≈ 1.03
- 最終餘額 = 10,000 × 1.03 = 10,300 Dai

第五章:PSM(錨定穩定模組)

5.1 PSM 機制原理

PSM(Peg Stability Module)允許用戶以 1:1 的固定匯率直接交換 Dai 和特定抵押品(如 USDC)。這大幅提高了 Dai 的錨定穩定性:

// PSM 合約分析
pragma solidity ^0.8.19;

contract PSM {
    // 抵押品代幣(如 USDC)
    GemLike public gem;
    
    // 轉換比率(通常是 1:1)
    uint256 public tout = WAD;  // 1 Dai = 1 USDC
    
    // DC(Debt Ceiling):PSM 可以持有的最大抵押品
    uint256 public line = 100_000_000 * WAD;
    
    // 當前持有量
    uint256 public parked;
    
    // 購入 Dai(用 USDC 換 Dai)
    function buyDai(
        address usr,
        uint256 gemAmt
    ) external returns (uint256 daoAmt) {
        require(parked + gemAmt <= line, "DC exceeded");
        
        // 計算 Dai 數量(1:1)
        daoAmt = gemAmt * tout / WAD;
        
        // 轉入抵押品
        gem.transferFrom(msg.sender, address(this), gemAmt);
        parked += gemAmt;
        
        // 鑄造 Dai
        dai.mint(usr, daoAmt);
    }
    
    // 售出 Dai(用 Dai 換 USDC)
    function sellDai(
        address usr,
        uint256 daoAmt
    ) external {
        // 燒毀 Dai
        dai.burn(msg.sender, daoAmt);
        
        // 計算可獲得的抵押品
        uint256 gemAmt = daoAmt * WAD / tout;
        require(parked >= gemAmt, "Insufficient liquidity");
        
        parked -= gemAmt;
        
        // 轉出抵押品
        gem.transfer(usr, gemAmt);
    }
}

5.2 PSM 與傳統 Vault 的比較

PSM 與 Vault 比較
┌────────────────────────────────────────────────────────────┐
│  特性              │  傳統 Vault        │  PSM             │
├────────────────────────────────────────────────────────────┤
│  抵押率            │  >100%            │  100%            │
│  穩定費            │  有(可變)        │  0% 或固定手續費  │
│  清算機制          │  有(荷蘭拍賣)    │  無(1:1 兌換)   │
│  資金效率          │  低(需超額抵押)  │  高(1:1)        │
│  風險              │  清算風險         │  抵押品脫鉤風險   │
│  用途              │  借貸 Dai         │  套利/流動性      │
└────────────────────────────────────────────────────────────┘

第六章:MKR 治理合約

6.1 MKR 代幣合約

// MKR.sol 核心功能
pragma solidity ^0.8.19;

contract DSToken is ERC20 {
    // 治理功能
    mapping(address => uint256) public nonces;
    
    // 許可轉移
    function permit(
        address holder,
        address spender,
        uint256 nonce,
        uint256 expiry,
        bool allowed,
        bytes32 r,
        bytes32 s
    ) external {
        // EIP-2612 permit 函數
        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                keccak256(abi.encode(
                    PERMIT_TYPEHASH,
                    holder,
                    spender,
                    nonce,
                    expiry,
                    allowed
                ))
            )
        );
        
        require(holder == ecrecover(digest, v, r, s), "Invalid signature");
        require(nonce == nonces[holder]++, "Invalid nonce");
        require(now <= expiry, "Permit expired");
        
        if (allowed) {
            allowance[holder][spender] = ~uint256(0);
        } else {
            delete allowance[holder][spender];
        }
    }
}

6.2 治理投票機制

MKR 治理投票流程
┌────────────────────────────────────────────────────────────┐
│  投票階段              │  說明                              │
├────────────────────────────────────────────────────────────┤
│  提議創建              │  鎖定 MKR 創建治理投票             │
│  延遲期                │  2 小時(MKR 合約延迟)           │
│  投票期                │  3 天(MKR 代加加投票)           │
│  執行期                │  2 天(時間鎖延遲)               │
│  完成                  │  MKR 退還,執行變更               │
└────────────────────────────────────────────────────────────┘

第七章:安全機制與風險管理

7.1 MKR 增發機制

當清算拍賣收入不足以覆蓋債務時,MakerDAO 會鑄造新 MKR 來填補缺口:

MKR 增發觸發條件
┌────────────────────────────────────────────────────────────┐
│  觸發條件                                                  │
├────────────────────────────────────────────────────────────┤
│  拍賣收益 < 債務 + 清算罰款                                 │
│  系統累計虧損超過某閾值                                    │
│  Vow 合約中 dai 餘額不足以覆蓋系統債務                    │
└────────────────────────────────────────────────────────────┘

增發公式:
新增 MKR = 系統虧損 / MKR 價格

示例:
- 系統虧損 = 1,000,000 Dai
- MKR 價格 = $2,500
- 增發 MKR = 1,000,000 / 2,500 = 400 MKR

7.2 緊急關閉機制

MakerDAO 配備緊急關閉(Global Settlement)機制,可在極端情況下保護用戶資產:

// End.sol 緊急關閉邏輯
contract End {
    // 計算最終結算價格
    function cage() external {
        require(live == 1, "System not live");
        live = 0;
        
        // 計算所有抵押型態的結算價格
        // 結算價格 = 抵押品總價值 / Dai 總供應量
        for (uint256 i = 0; i < ilks.length; i++) {
            bytes32 ilk = ilks[i];
            
            // 獲取抵押品和債務總量
            uint256 totalCollateral = Vat(vat).gem(ilk, address(this));
            uint256 totalDebt = Vat(vat).dai(address(this));
            
            // 計算結算價格
            // 例如:1000 ETH / 100,000,000 Dai = 0.00001 ETH/Dai
            uint256 price = totalCollateral / (totalDebt / WAD);
            
            setIlkPrice(ilk, price);
        }
        
        cageTime = now;
        wait = 6 hours;
    }
    
    // 用戶領取抵押品
    function free(uint256 currencyAmount) external {
        require(now >= cageTime + wait, "Wait not over");
        
        // 根據 Dai 持有量按比例領取抵押品
        uint256 collateralOwed = currencyAmount * spot / WAD;
        
        // 燒毀 Dai
        vat.move(address(this), msg.sender, currencyAmount * RAY);
        
        // 轉出抵押品
        gem[ilk].transfer(msg.sender, collateralOwed);
    }
}

結論

MakerDAO 代表了去中心化穩定幣設計的巔峰之作。通過精心設計的智慧合約架構,MakerDAO 實現了:

  1. 超額抵押機制:確保系統在任何情況下都有足夠的抵押品應對 Dai 贖回
  2. 去中心化清算:透過荷蘭拍賣機制確保抵押品以市場公允價值出售
  3. 治理去中心化:MKR 持有者通過投票決定系統關鍵參數
  4. PSM 創新:透過 1:1 兌換機制大幅提高 Dai 的錨定穩定性
  5. 多抵押品支援:支援 ETH、WBTC、USDC 以及 RWA 等多種資產

MakerDAO 的技術實作為後續的 DeFi 協議提供了重要的設計參考,包括 Compound、Aave 等借貸協議都借鑒了其核心概念。


免責聲明:本網站內容僅供教育與資訊目的,不構成任何投資建議或推薦。在進行任何加密貨幣相關操作前,請自行研究並諮詢專業人士意見。所有投資均有風險,請謹慎評估您的風險承受能力。

數據截止日期:2026-03-22

參考來源

延伸閱讀與來源

這篇文章對您有幫助嗎?

評論

發表評論

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

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