Clone this repository, install Node.js dependencies, and build the source code:
git clone git@github.com:CT77777/fork-Compound.git
cd ./fork-Compound
npm install
build `.env` file and input `ALCHEMY_API_KEY = XXXXX...` (XXXXX... is your key)
npx hardhat test test/compound.js
- 在 Hardhat 的 test 中部署一個 CErc20(
CErc20.sol
),一個 Comptroller(Comptroller.sol
) 以及合約初始化時相關必要合約,請遵循以下細節:- CToken 的 decimals 皆為 18
- 需部署一個 CErc20 的 underlying ERC20 token,decimals 為 18
- 使用
SimplePriceOracle
作為 Oracle - 將利率模型合約中的借貸利率設定為 0%
- 初始 exchangeRate 為 1:1
- 進階(Optional): 使用 Compound 的 Proxy 合約(
CErc20Delegator.sol
andUnitroller.sol
)
- 讓 user1 mint/redeem CErc20,請透過 Hardhat test case 實現以下場景
- User1 使用 100 顆(100 * 10^18) ERC20 去 mint 出 100 CErc20 token,再用 100 CErc20 token redeem 回 100 顆 ERC20
npx hardhat test test/compoundV2.js
- 讓 user1 borrow/repay
- 延續上題,部署另一份 CErc20 合約
- 在 Oracle 中設定一顆 token A 的價格為 $1,一顆 token B 的價格為 $100
- Token B 的 collateral factor 為 50%
- User1 使用 1 顆 token B 來 mint cToken
- User1 使用 token B 作為抵押品來借出 50 顆 token A
- 延續 (3.) 的借貸場景,調整 token B 的 collateral factor,讓 user1 被 user2 清算
- 延續 (3.) 的借貸場景,調整 oracle 中的 token B 的價格,讓 user1 被 user2 清算
modfiy enabled to true
networks: {
hardhat: {
forking: {
enabled: true,
url: `https://eth-mainnet.g.alchemy.com/v2/${ALCHEMY_API_KEY}`,
blockNumber: 15815693,
},
},
},
npx hardhat test test/compoundV3.js
- 請使用 Hardhat 的 fork 模式撰寫測試,並使用 AAVE 的 Flash loan 來清算 user1,請遵循以下細節:
- Fork Ethereum mainnet at block 15815693 (Reference)
- cToken 的 decimals 皆為 18,初始 exchangeRate 為 1:1
- Close factor 設定為 50%
- Liquidation incentive 設為 8% (1.08 * 1e18) 或 10%
- 使用 USDC 以及 UNI 代幣來作為 token A 以及 Token B
- 在 Oracle 中設定 USDC 的價格為 $1,UNI 的價格為 $10
- 設定 UNI 的 collateral factor 為 50%
- User1 使用 1000 顆 UNI 作為抵押品借出 5000 顆 USDC
- 將 UNI 價格改為 $6.2 使 User1 產生 Shortfall,並讓 User2 透過 AAVE 的 Flash loan 來清算 User1
- 可以自行檢查清算 50% 後是不是大約可以賺 121 USD(Liquidation incentive = 8%)