Steaker Learn

【DeFi 的世界】Compound 完全解析-利率模型篇

Oct 14, 2019

Compound 簡介:

Compound 是一個透過 Ethereum 區塊鏈上的智能合約,達到去中心化借貸的服務。相較於傳統的中心化金融,Compound 擁有公開透明的利率模型、高隱私性、即時借款、放貸免綁約的特色。

Compound 基本架構:

這邊我們以目前放貸年利率最高的 DAI 來說明。首先,放貸人將 DAI 放入智能合約中,即可立即完成放貸並產生利息,而借款人可以透過抵押資產 (這邊以 ETH 當例子) 的方式借走智能合約的 DAI,並依照利率支付利息。

這個架構有幾點需要知道:

  1. 借款人可以抵押任何 Compound 上面所列的資產,但為了防止借款人付不出利息,抵押的總資產必須 > 借出的總資產,且要高於一定比例,下面會有更詳細介紹。
  2. 借款人還款時,所支付多出來的利息,會平均分配給所有放貸人(依放貸資產比例分配),所以不會有一對一借貸的問題。
  3. 借款人隨時可以還款,還款時依照借款的利率與時間,決定總共的還款數量。同樣,放貸人隨時可以連本帶利提出 DAI ,但前提是智能合約必須要有足夠的 DAI (可能部分正在出借),但由於 Compound 有保留利率 (保留金) 的機制,智能合約多出來的 DAI 數量越來越多,幾乎不可能有提不出錢的情況。

究竟 Compound 是怎麼做到即時放貸、即時還款的呢?

實際上在智能合約裡的運作是這樣:

當放貸人放入 1 DAI 到智能合約時,智能合約會產生出額外的 cDAI (compound DAI) 給放貸人。而放貸人隨時能以 cDAI 換回原本的 DAI 以及多出來 DAI 的利息。

利息如何產生?

以上面的例子來說,放貸人放入 1 DAI,獲得 40 cDAI,因此當下 DAI 與 cDAI 的兌換率是 1/40 = 0.025,隨著時間與利率增加,此兌換率的值會越來越大,也就是說:

  • 目前 1 cDAI 可以換到 0.025 DAI
  • 隨時間過去,兌換率 > 0.025,1 cDAI 可以換到 > 0.025 DAI
  • 40 cDAI 可以換到 > 1 DAI,多出來的,就是放貸人得到的利息
  • 使用 Compound DAI 智能合約的人,看到的兌換率是相同的
放貸人只需要透過持有 cDAI,便可以獲得 DAI 的利息。

舉個實際的例子:

  1. 小明於 2019 年 10 月 10 日將 1000 DAI 放入智能合約中,並獲得 40000 cDAI。
  2. 2019 年 10 月 10 日這天 DAI 與 cDAI 的兌換率 = 1/40 = 0.025
  3. 2020 年 10 月 10 日,小明決定把放貸的錢連本帶利提出來。這時候,DAI 與 cDAI 的兌換率增加到 0.0275
  4. 於是小明用之前持有的 40000 cDAI 換回了 40000 x 0.0275 = 1100 DAI
  5. 多出來的 100 DAI 就是小明這一年放貸所得到的利息。

兌換率是怎麼增加的?

兌換率依照以下數據做計算 (以 Compound DAI 為例子):

  • totalCash = 放入智能合約,但還沒被借走 DAI 的總數量
  • totalBorrows = 所有借款人,所應償還 DAI 的總數量 (含本金利息)
  • totalReserves = 保留金總數量 (借款人所應支付的利息,部分被視為保留金)
  • totalSupply = 所有放貸人所得到 cDAI 的總數量

由此可以看出:

借款 (borrow) 量越多,兌換率增加越快。(因為所需支付利息增加越快)

註:totalBorrows 跟 totalReserves 主要受到下面會介紹的,借款年利率與放貸年利率影響。

借款年利率與放貸年利率

這邊更進一步說明放貸年利率借款年利率。首先,要介紹一個在 Compound 中重要的指標:使用率

簡單來說,使用率就是所有放貸進來的錢當中,已經被借走的比例。

上圖由 Compound App 網站可以看出,當前使用率是 62.13%,也就是放貸人放進來的 DAI 有 62.13% 正被借走當中。

有了使用率,就可以說明 Compound 的核心利率模型

借款年利率

在 Compound 利率模型裡,會計算借款年利率,這個利率會受到以下因素影響:

  1. 基礎利率 (base rate)
  2. 使用率 (utilization rate)
  3. 加給利率 (multiplier)
借款年利率 = 基礎利率 + (使用率 x 加給利率)

以 Compound DAI 為例,基礎利率 = 5%,加給利率 = 12%,若以目前當下的使用率 = 62.13% 來計算:

借款年利率 = 5% + (12% x 0.6213) = 12.4556%

也就是上圖所顯示的 12.46% 的由來,也就是說,借款人所需要支付利息的年利率,在這個當下是 12.46%。

放貸年利率

放貸年利率同樣會受到以下因素影響:

  1. 借款年利率 (borrow rate) (上述所計算出來的)
  2. 使用率 (utilization rate)
  3. 保留利率 (reserve factor)
放貸年利率 ≈ 借款年利率 x 使用率 x (1 - 保留利率)

同樣以 Compound DAI 為例子,上述算出借款年利率 = 12.46%,使用率=62.13%,保留利率 = 5%

放貸年利率 ≈ 12.46% x 62.13% x (1 - 5%) = 12.46% x 0.6213 x 0.95 = 7.3543281%

同樣也是上圖所顯示的 7.35% 計算方式的由來,也是指放貸人會收到利息的年利率,在這個當下會是 7.35%

這邊需要注意的是,在 compound 利率模型裡面,每個幣種的基礎利率加給利率、保留利率可能不盡相同,但都是智能合約裡的常數。

智能合約裡有可以讓管理者(admin) 修改這些常數的權限,因此 Compound 組織可以視情況做調整。而任何調整,都能在區塊鏈上公開透明的查詢到。

所以我們能看出什麼?

在 Compound 利率模型裡面,若常數不變,單一幣種借款年利率放貸年利率是存在最大值或最小值的,因為會變動的因素基本上只有使用率一個因素。

以 Compound DAI 來看:

  • 基礎利率 = 5%
  • 加給利率 = 12%
  • 保留利率 = 5%

借款年利率 = 基礎利率 + (使用率 x 加給利率)

因此,當使用率 = 0%,借款年利率 = 5%,當使用率 =100%,借款年利率 = 17%。

借款年利率最小值 = 5%,借款年利率最大值 = 17%

放貸年利率 借款年利率 x 使用率 x (1-保留利率)

同樣可以算出,放貸年利率最小值 = 0% ,放貸年利率最大值 = 16.15%

以下稍微整理了幾個 Compound 幣種的借款年利率放貸年利率當下之最大值、最小值:

實際年利率會根據使用率的值而介於兩者之間。

利率的更新週期

上述提到了借款、放貸的年利率,那在 Compound 裡面,隨著使用率的變化,利率多久更新一次呢?

實際上,只要使用率一有變化,Compound 利率就會立即更新,而利率更新的最小單位就是 Ethereum 上面透過挖礦產生的一個區塊 (block)。

在 Ethereum 區塊鏈上,平均 15 秒會產生一個區塊 (block),因此利率的變化大約 15 秒就有可能改變一次。

在 Compound 裡面,會使用年利率除以一年預估的總區塊數量,Compound 決定為一年會有 2102400 個區塊產生。

舉個實際的例子:

假設實際上剛好 15 秒產生一個區塊,也就是 1 分鐘產生 4 個區塊,1 小時產生 240 個區塊。

  1. 小明於 10 月 10 日 11:00 在 Compound DAI 智能合約借了 100000 DAI,這個時候的借款年利率 = 10%
  2. 在 10 月 10 日 12:00 時,由於使用率的更新,小明的借款年利率變成 15%
  3. 小明於 10 月 10 日 13:00 決定連本帶利償還所有債務

請問小明總共需要支付多少錢呢?

  • 在 11:00~12:00 中,借款年利率 = 10%,因此小明需要多支付:
    100000 x 0.1 x 240 / 2102400 約= 1.14 DAI
    (1 小時產生 240 個區塊,一年產生 2102400 個區塊)
  • 在 12:00~13:00 中,借款年利率 = 15%,因此小明需要多支付:
    (100000 + 1.14) x 0.15 x 240 / 2102400 約= 1.71 DAI
    (注意這邊需要把上一次的利息也算進去)
  • 所以,小明還款時總共需要支付:
    100000 + 1.14 + 1.71 = 100002.85 DAI

如何保證借款人還錢?

上面提過,借款人需要抵押資產。若不夠還錢,抵押的資產會被拿去用比市價低的價格賣出 (清算)。

每個 Compound 上面的資產都有其抵押率,也就是你抵押了這個資產,你能夠用這個資產的多少比例借其他資產。

以上面的例子來說:

  1. 假設小美想要抵押 ETH 來借 DAI,於是小美抵押了 3 ETH ,假設目前市價 1 ETH = 200 USD,於是小美抵押了相當於 600 USD 的資產。
  2. 由於 ETH 抵押率 = 0.75,因此小美實際上能借的最大資產 = 600 x 0.75 = 450 USD
  3. 小美於是借走了445 DAI (假設目前市價 1 DAI = 1 USD)
  4. 假設經過一段時間後,小美需要償還 6 DAI 的利息,而 6 + 445 = 451 USD,已經超過了小美能借的最大資產量,但小美尚無償還的動作。
  5. 於是,小美抵押的部分資產將會被清算 (liquidate),由於總共需要償還 451 USD,於是在 Compound 的清算機制下,最多會有一半 (451 / 2) 的借出資產被清算。
  6. 例如:小美的 200 USD 被清算,乘以一個比例,假設為 1.1,小美的 220 USD 的 ETH,也就是 1.1 ETH 會被沒收,然後償還小美 200 USD (200 DAI) 的債務。
  7. 於是清算後,小美被扣除了 1.1 ETH (相當於 220 USD),償還了 200 USD 的 DAI 後,剩下 451–200 = 251 USD 需要償還。
    (實際運作上是開放給任何人,若幫小美償還 200 DAI,可以獲得小美抵押的 1.1 ETH,於是有了 10% 的獲利)
  8. 而此時小美抵押的 ETH 剩下 1.9 ETH,於是目前可以借的最大資產 = 1.9 x 200 x 0.75 = 285 USD > 需要償還的 251 USD,清算結束。

結論

這邊總結一下,在 Compound 的利率模型的重點與好處:

  • 即時放貸生利息、即時借款還款,沒有一對一借貸媒合的問題
  • 只要持有 cDAI 就可以收到 DAI 的利息,等同於放貸成功
  • 使用率 (Utilization Rate)是主要影響 Compound 借貸利率的因素
  • 利率、利息每 15 秒 (1 個 block) 更新一次,相當於放貸每 15 秒給息
  • 清算機制能避免借錢不還,保障放貸人的權益