Compound 原理
合約架構
主體以 comptroller 為核心,設置所有市場 supportMarket 以及 CollateralFactor、LiquidationIncentive、 CloseFactor、PriceOracle 等等。
2. cToken 部署方式類似如下是使用 CErc20Delegate 與 CErc20Delegator
3. 設置抵押品的方式為:擁有對應的 cToken underlying asset 後使用 mint
來獲得對應的 cToken,之後使用 enterMarket 來把 cToken 設置為抵押物,抵押之後 account 的 liquidity 會增加,即可借貸。
4. 之後使用 cToken 的 borrow 後即可借出對應的 token。(例如 cBTC 執行 borrow 後可借出 BTC)
5. 獲取帳戶的當前狀態:
comptroller
合約調用 getAccountLiquidity()
,回傳三個參數分別為 (error, liquidity, shortfall)
第一個參數 0 表示 success
第二個參數代表 account liquidity 可用流動性 (還可借款多少金額 = 所有 cToken 加總( cToken 抵押品價值 * cToken collateral factor))
第三個參數 shortfall 如果不為零代表可被清算(需要補足多少金額),有 shortfall 時 liquidity 一定為 0
Compound 清算機制
CEther.sol 或 CErc20.sol 會呼叫 CToken 合約的 liquidateBorrow();
相關利息參數
https://reurl.cc/zZZ4ma https://reurl.cc/n11A66
部署後可呼叫方法
提款:
cToken -> _reduceReserves
利息參數:
https://observablehq.com/@jflatow/compound-interest-rates
後續設置:
interestRateModel: cToken -> _setInterestRateModel
升級 cToken:
cTokenDelegator._setImplementation(address(cTokenDelegate), false, 0x)
升級 comptrolller:
獲取 user 餘額
Compound subgraph
https://thegraph.com/hosted-service/subgraph/graphprotocol/compound-v2
1. 獲得 user cToken balance 與當前 underlying borrow, supply 餘額
相關事項
1.新建 cToken 市場幣種之後必須要兩個人以上去 cToken supply 後才能去執行 redeem 或 borrow,不然 utilizationRate function 計算時 reserve 變 0 會產生 Error,整個市場變成不能用。
解決方法為轉一些 underlyingAsset 到 cToken address
2.部署新幣時記得要先讓 oracle 設置價格後才能設置 collateral factor ,不然執行 _setCollateralFactor
會有 error
3.可以使用 cToken.isDeprecated 來判斷某個 cToken 是否已沒在作用,_setCollateralFactor 與_setReserveFactor 為 0 以及 _setBorrowPaused 為 true 即可。
Last updated