1 Compound
1.1 Compound是什么
Compound是DeFi上的借貸市場,這個借貸市場提供了存幣和借幣的功能,就像一個銀行,用戶可以存幣并獲得利息收益,或進行抵押借幣,
Compound不是點對點的市場,而是流動性的資金池市場,這種模式讓它更接近于傳統銀行的借貸模式,但與此同時,它的運作是基于智能合約來完成的,這讓它具備了更多實時性、不可篡改性以及市場決定利率的特性,
在實作原理上,Compound的帳本模型也與銀行類似,并遵循了國際會計準則,
注意:目前區塊鏈上沒有負債和信用的概念,需要超額抵押資產才能完成借貸行為,例如想要借出價值100的資產A,則需要抵押價值150元的資產B,
1.2 Compound協議
Compound協議讓開發者可以基于以太坊建立各種各樣的貨幣市場(money market),
所謂的“貨幣市場”,其實就是一個個的幣池,每個幣池里只有同一種ERC-20的幣,協議通過演算法來決定這個池子里的幣借貸的利率是多少,簡單點說,這個演算法會基于人們對這個幣借貸的供需關系自動計算出利率,例如在Dai這個貨幣市場里,目前(2020年12月13日)放貸可以收取的年利率是3.04%,貸款需要付出的年利率則是11.11%,這些利率對每個人都一視同仁,而且每時每刻都可能處于浮動狀態,
1.3 不是P2P
不管你是來貸款還是放貸,你都是在跟Compound協議直接打交道,這一點跟那些點對點的借貸協議不太一樣,在點對點的方案里,借貸雙方會做匹配,然后你需要跟找你借錢的人(或者借你錢的人)進行溝通,雙方自己商定好借款的利率、到期時間和抵押物品等等,
而在Compound協議里,每個ERC-20代幣都有一個屬于自己的借貸市場,里面包含每個用戶在這個市場里的余額,以及各筆生效的借貸交易,乃至每段時期的歷史利率,等等,
1.4 主要的合約
-
MoneyMarket 合約
負責主要的借貸邏輯的實作,包括了一系列的操作函式,比如放貸(SUPPLY)、提現(WITHDRAW)、借貸(BORROW)、償還貸款(REPAY BORROW)、 清算(LIQUIDATE)等等, -
InterestRateModel 合約
提供借貸利率的計算模型, -
PriceOracle 合約
用來提供各個ERC-20代幣的價格資訊,比如這個合約可以通過排名前十的交易所得出一個幣的當前價格,為其他合約所呼叫,
最主要的合約是MoneyMarket,在最簡單的形式下,一個貨幣市場的MoneyMarket合約,就相當于一個ERC-20 約,這個合約會維護一張表,里面記錄每個用戶持有幣的數量,也就是余額,余額同時也會隨著時間計算利息,
1.5 gas費
Compound引入了一個低gas費的方法來更新合約內的用戶余額,每當用戶借貸或者放貸的時候,合約會自動更新余額表格里相應資產的條目,此外,Compound還會根據這張記錄余額的表格來計算目前借貸和放貸各自的利率應該是多少,
1.6 存幣
Compound協議匯總了每個用戶的供給,提供了更多的流動性,保持了資金系統的平衡,借款人和放款人在流通數字貨幣的同時,遵守了相應的約定便可以獲取獎勵(利息),交易所可以通過“清算”余額來將Compound協議調整增量或進行回報用戶,這有可能為以太坊生態系統解鎖全新的業務模型,
1.7 借入資產
Compound允許用戶以cTokens作為抵押,毫不費力地從協議中借用,以用于以太坊生態系統中的任何地方,每個貨幣市場都有由市場力量設定的浮動利率,該利率決定了每種資產的借貸成本,
1.7.1 抵押品價值
協議持有的資產都有一個從 0 到 1 的抵押因子,基礎資產的流動性和價值決定了抵押因子的大小,抵押物和乘以抵押因子即等于用戶的可借貸數額,
1.7.2 風險與清算
由于加密貨幣價格的不穩定,那么使用加密資產作為抵押物就是有風險的,因為當抵押物價格下跌時,可能都不夠償還借款的價值(loan value),如果某個帳戶的未償還借貸價值超過其還貸能力,則可以按當前市場價格減去清算折扣來償還一部分借貸,以消除協議的風險,若用戶的資金出現還款危機時,可能會繼續執行清算程式,
任何擁有借入資產的以太坊地址都可呼叫清算功能,將其資產交換為借方的cToken抵押品,由于這兩個用戶,資產和價格都包含在Compound協議中,因此清算是毫不費力的執行,并且不依賴任何外部系統或訂單,
通常來說,Defi協議為了鼓勵及時清算都會向清算人提供獎勵,這被稱為** 清算獎金(Liquidation Bonus)或Bonus **,協議的目的是確保在價格變化太大之前進行清算,否則可能導致協議破產,值得注意的是,一旦抵押物價格跌至債務價格以下,很明顯借款人不會償還其貸款,這將使該協議無力償還(insolvency),
例如,假設今天BAT和REP的價格都是1元,我用1個BAT作為抵押物,從Defi借貸協議借了1個REP,第二天BAT的價格跌到了0.5元,但是REP還是 1美元,如果現在我不還款,那么Defi協議就會損失0.5美元,因為Defi借貸協議會試圖賣掉我抵押的BAT來償還1個REP,
1.7.3 用例
為 DApp 消費者,交易者和開發人員提供了新的超能力:
- 無需等待訂單執行或需要鏈下行為,DApp 就可以借用 token 在以太坊生態系統中使用 .
- 交易者可以使用其現有投資組合作為抵押,通過借入以太幣為新的 ICO 投資籌集資金 .
- 希望做空 token 的交易者可以借入它,將其發送到交易所并出售該 token,進而 做慷訓益 .
1.8 利率模型
Compound協議無需和供應商、借款人、條款、利率進行談判,而是利用一種利率模型,該模型基于供求關系實作利率均衡,根據經濟學理論,利率(貨幣的“價格”)應隨需求而增加;當需求低時,利率應該低,反之亦然,
- 資金利用率
Ua = Borrowsa / (Casha + Borrowsa)
- 借款利率:
需求曲線通過治理進行編碼,并表示為利用率的函式,例如,借入利率可能類似于以下內容:
Borrowing Interest Ratea = 10% + Ua * 30%
說明:借款利率受需求影響,借款需求旺盛時,借款利率上升,借款需求疲軟時,借款利率下降,這只是一個示意公式,10%、30%并不一定是固定不變的,
- 存款利率:
Supply Interest Ratea = Borrowing Interest Ratea * Ua * (1 ? S)
說明:S類似于存款準備金,以備用戶的提現需求,
Compound該協議不保證流動性;相反,它依靠利率模型來激勵它,在對資產的極端需求時期,協議的流動性(可用于提取或借出的 token)將下降;發生這種情況時,利率會上升,從而刺激供應并抑制借貸,
1.9 賬務
Compound維護了一個包括所有交易的完整可審計的資產負債表和現金分類賬:
現金 + 借款 = 存款 + 抵押資產
遵循國際會計準則:
| 事件 | 借 | 貸 |
|---|---|---|
| 存入代幣 | 現金 | 供給 |
| 提取代幣 | 供給 | 現金 |
| 借出代幣 | 借款 | 現金 |
| 償還代幣 | 現金 | 借款 |
| 清算(借款人) | 供給(抵押) | 借款(資產) |
| 清算(清算人) | 現金(資產) | 供給(抵押) |
| 利率增長(供給) | 抵押凈值 | 供給 |
| 利率增長(貸) | 借款 | 抵押凈值 |
2 借貸行為
Compound本質是一個擁有一定資產的人可以接入另一種資產的市場,和現實社會中的銀行借貸非常類似,
2.1 現實社會中的借貸行為
現實社會中,我們向銀行申請抵押貸款時,如下所示:

假設該房產價值10w,銀行會按照抵押物一定比率進行放貸,例如80%,那么此時用戶可以獲得8w的貸款,只要借款人定時向銀行還貸并付息,就可以保住房產,如上圖所示,不過,如果借款人無法還款付息,銀行就會出售房產以回收貸款和利息,額外部分將退回給借款人,
銀行的錢來自儲戶,大量用戶存款匯聚起來就形成了資金池,可以進行任何形式的放款,如下圖所示:
儲戶將錢存放到銀行,銀行需要支付利息,如下圖所示:

在現實社會的抵押貸款中,銀行是一個資金池,出借方(儲戶)和借款方沒有進行系結,這意味著儲戶任何時候都可以提取資金,當然這里有一個前提:有足夠的存款準備金,另外,在當今社會中,利率和流動性儲備由國家法規決定,
2.2 Compound中的借貸行為
在Compound的世界中,需求側使用ERC-20代幣來替代資產(如房產),供給側使用DAI來替代貨幣,用智能合約替代銀行的金庫,如下圖所示:
說明:
- 出借人可以將自己持有的ETC、BTC等轉換成Dai存入Compound并獲取回應的利息,就像我們將錢存入銀行獲取利息收入一樣,
- 借款人可以將自己持有的ERC-20代幣作為抵押物從Compound中貸款;例如抵押價值15W Dai價值的資產從compound中貸款10W Dai,
- 因為代幣價格波動比較快,當用抵押物價值償還借出的Dai(本金+利息)存在一定風險時,Compound會觸發清算,否則可以一直借款,
- 貸款人償還本金+利息以后,可以拿回自己的抵押物,
- 貸款人償還的本金+利息以儲備的形式存放在Compound中,
- 當出借人嘗試提款時,他會得到起原始存款+利息收入,這些利息是儲備中累計的;如果不提款,會持續賺取利息,
注意:Dai是穩定幣,類似于顯示社會中的人民幣;cDAI類似于實時的Dai儲蓄賬戶,
3 利率模型
注意:
Compound是根據每個區塊時間來計算利息,但是它并不是自動在后臺完成計算的,而是依賴于用戶行為(例如存款、貸款、清算等)來觸發利息計算,觸發后,函式將統計自上次利息計算以來過去了多少個塊,并在其之上應用最新的利息,句話說,如果不采取任何用戶動作,則協議將不會計算利息,
簡單來說:Compound是在交易事件(存款、借款、提現、還款)發生時進行結算,并計算利息,本節將給予此進行介紹,注意,這和銀行稍有不同,
3.1 利率模型
銀行的簡單模型就是通過借款產生營收,營收作為存款用戶的利息,在不設定浮動的借款利率,不考慮盈利,只保證賬目借貸平衡時,簡化的利率模型如下所示:
借款營收 = 存款利息
其中:
借款營收 = 借款總額*借款利率*時間
存款利息 = 存款總額*存款利率*時間
得出:
借款總額*借款利率*時間 = 存款總額*存款利率*時間
進一步:
借款總額*借款利率 = 存款總額*存款利率
由此可見:
借款總額為零(沒有人進行借款),此時沒有營收產生,存款利率為零
借款利率不變時,如果借款總額增大,借款營識訓增加;此時若存款總額不變,存款利息會提高,
借款營收不變時:存款總額增大,存款利率降低
結論:
** 利率隨著借款總額和存款總額的變動而變動,**
3.2 利率
如果沒有任何交易事件(存款、提現、借款、還款)發生,存款總額、借款總額就不會發生變化,利率在這個段時間里也會一直保持不變,但是伴隨交易事件的產生,存款、借款總額會發生變化,這會引起利率發生改變,
假設借款利率5%,那么在發生存款、借款、還款等事件時(存款利率變化暫不考慮時間因素),如下所示:
說明:
- 初始狀態下沒有借款就沒有營收,存款利率=借款營收/存款總額=0/100,所以存款利率=0,
- 有新增借款后,借款營收=50*5%=2.5,存款利率=借款營收/存款總額=2.5/100,所以存款利率=2.5%,
- 有新增存款后,借款總額不變所以借款營收不變,存款利率=借款營收/存款總額=2.5/(100+50),所以存款利率=1.67%,
- 有部分還款后,借款總額變少所以營收變少,存款利率=借款營收/存款總額=(30*5%)/(100+50),所以存款利率=1%,
結論:
** 交易事件(存款、借款、提現、還款)引起利率變化,**
3.3 利率與時間
現實中,借款營收、存款利息與時間緊密相關,由公式可知:
借款營收 = 借款總額*借款利率*時間
存款利息 = 存款總額*存款利率*時間
擴展一下上面的示例,假設月利率5%,疊加時間后,下過如下所示:

注意:示例中將上一個月的存款利息放入本月的存款總額中,即現實社會中的復利,
注意:這里使用復利計算
將上一個月的存款利息放入本月的存款總額中,
將上一個月的借款利息放入本月的借款總額中,
說明:
初始階段(持續1個月):
- 1月期初:存款總額=100,借款總額=0,存款利率=0,借款利率=5%
- 1月底進行結算:本月沒有借款就沒有營收,存款利率=借款營收/(存款總額*時間)=0/(100*1),所以存款利率=0,
- 1月期末:存款總額=100,借款總額=0,存款利率=0,借款利率=5%
第二階段(持續2個月)
- 2月期初:存款總額=100,借款總額=50,存款利率=0,借款利率=5%,
- 3月底進行結算:借款營收=50*5%*2=5,存款總額=100,存款利率=借款營收/(存款總額*時間)=5/(100*2),所以存款利率=2.5%,
- 3月期末:存款總額=105,借款總額=55,存款利率=2.5%,借款利率=5%,
第三階段(持續3個月)
- 4月期初:存款總額=155,借款總額=55,存款利率=2.5%,借款利率=5%,
- 6月底進行結算:借款總額=55,借款營收=55*5%*3=8.25,存款總額=155+155*2.5%*3=166.63,存款利率=借款營收/(存款總額*時間)=8.25/(166.63*3),所以存款利率=1.65%,
- 6月期末:存款總額=166.63,借款總額=63.25,存款利率=1.65%,借款利率=5%,
第四階段(持續1個月)
- 7月期初:存款總額=166.63,借款總額=43.25,存款利率=1.65%,借款利率=5%,
- 7月底進行結算:借款營收=43.255%1=2.16,存款總額=166.63+166.631.65%1=169.40, 存款利率=借款營收/(存款總額時間)=2.16/(166.631),所以存款利率=1.30%,
- 7月期末:存款總額=169.40,借款總額=43.25,存款利率=1.30%,借款利率=5%,
結論:
** 交易事件(存款、借款、提現、還款)發生時進行結算,結算結束后按事件調整余額并引起利率變化,**
3.4 賬戶明細賬
Compound作為一個借貸平臺,其存款、借款利率隨市場需求變化,這里有一個問題,Compound上有非常多賬戶,那么每個賬戶的余額是如何計算出來的呢?
其實只要有歷史利率就可以通過迭代運算計算出每個明細賬戶的當前余額,所以在進行結算操作時只需要對事件操作的明細帳進行結算,其他賬戶可以暫時不用結算,直到它們被操作時再計算即可,如下圖所示:

結論:
** 當賬戶發生交易事件(存款、借款、提現、還款)時進行結算,每次只計算此賬戶的明細帳并更新總帳,其他賬目可以等到被操作時再進行計算,**
5 Compound的治理
5.1 COMP
Compound協議只能由COMP代幣持有者及其代理升級和配置, 協議的所有潛在更改,包括增加新市場或調整系統引數(如抵押因子或利率演算法),都必須通過治理智能合約中指定的提案和投票程序,
COMP是在Compound治理中具有1:1投票權的代幣,以太坊錢包中的COMP代幣持有人可以使用 COMP治理合約中提供的函式將投票權委托給自己或任何其他以太坊地址,
委托投票權的接收者(稱為代理人),無論他們是COMP持有人本身還是其他地址,都可以提案、投票和執行提案以修改協議,你可以在 Compound 治理面板上看到當前的代理串列,
5.2 Compound的治理
詳細資訊參考Compound Governance,社區治理流如下所示:
5.3 核心概念
-
COMP ERC-20 代幣
用于指定用戶的投票權,用戶錢包中的COMP余額越多,他們對提案的授權或投票就越重, -
Delegation 委托
COMP持有人只有在將投票權委托給某個地址后才能投票或創建提案,一次可以委托給一個地址,可以委托給COMP持有人自己的地址,被委托人的投票數相當于用戶賬號的COMP代幣余額,投票將從當前區塊開始進行委托,直到發送者再次委托或者轉移其COMP, -
Proposals 提案
提案是可執行的代碼,可修改協議及其作業方式,為了創建提案,必須至少有所有COMP的1%委托給該地址,現有總計1KW個COMP,因此用戶必須將至少10W個COMP委托給其地址,提案存盤在Governor智能合約的“proposals”映射中,所有提案的投票期均為3天,如果提案者在整個投票期間未維持其投票權重,則任何人都可以取消該提案, -
Voting 投票
用戶將投票權委托給其地址后,便可以對單個提案投票贊成或反對,提案處于“有效(Active)”狀態時可以進行投票,投票可以使用castVote立即提交,也可以使用castVoteBySig離線簽名稍后提交,如果大多數票(達到4%,即40WCOMP)對某個提案投票贊成,則該提案將在時間鎖中排隊, -
Timelock 時間鎖
所有治理和其他管理操作都必須在時間鎖中停留至少2天,然后才能在協議中實施,每個cToken 合約和Comptroller合約都允許Timelock地址修改,Timelock合約可以修改系統引數、邏輯和合約,以"延遲時間、選擇退出"的升級模式進行修改,
6 參考檔案
詳解 Compound 運作原理
https://learnblockchain.cn/article/1015
初學者的DeFi指南
https://learnblockchain.cn/article/570
Compound作業原理
https://www.chainnode.com/question/457841
使用 Defi 協議之前需要了解的幾個概念
https://learnblockchain.cn/article/1181
Compound Governance
https://compound.finance/docs/governance?ref=medium
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/237705.html
標籤:區塊鏈
下一篇:linux安裝node
