- vừa được xem lúc

Luồng thực thi Cho Vay, Vay, Thanh lý tài sản ( Supply/Redeem/Borrow/Repay/Liquidation ) của Compound Finance trên Remix

0 0 25

Người đăng: Thuy Do

Theo Viblo Asia

Compound Finance là một trong những giao thức hàng đầu để vay và cho vay tiền điện tử trong không gian DeFi. Chúng ta hay cùng test thử các luồng vay, cho vay , trả nợ và thanh lý thực hiện trên Remix như thế nào nhé.

Lưu ý dùng ganache để remix không bị overload, optimization khi compile contract
Download các contract theo link :
https://drive.google.com/drive/folders/110TyQ_q7XsE22I4ibMfU-nmn4uNqe0Yd?usp=share_link

I. Deploy các contract cần thiết :

  • Supplied token: (DAI) 0xa9C8D0dC8270BEF0e967590E34AE4e5e85f2cf79
  • Borrowed token (BAT) 0x84b08ca638A12de111Ad22F248e17EE1fABaAffb
  • CErc20Delegate : 0x418Aa2AFC8B53559ee5B76CEcc3008Ec8d498011
  • Comptroller: 0xdFAE123E3a91fD4646De7DaDec418d10bDA4B9CD
  • SimplePriceOracle : 0x0f577B15020AAe6457b120987cAdE241806D6654
  • (Compound sử dụng hệ thống oracle riêng để update thông tin về giá token gọi là OpenPriceFeed.Ở đây ta chỉ dùng contract set giá đơn giản để test)
  • JumpRateModelV2(Model lãi suất): 0x957C6a70CFdB10Df6a8bbA27CA7bE0e6AE4a4881

** Lưu ý tham số khi deploy như sau:

  • BASERATEPERYEAR: lãi suất cơ bản 50000000000000000 (5%)
  • MULTIPLIERPERYEAR: mức tăng lãi suất hàng năm 1200000000000000000 (1.2)
  • JUMPMULTIPLIERPERYEAR: mức tăng lãi suất khi đến điểm kink 2000000000000000000 (2)
  • KINK_: tỷ lệ tổng vay trên tông mức cung chạm tới mức này thì lãi suất cho vay sẽ tăng lên nhiều để giảm nhu cầu vay, giảm rủi ro cho hệ thống 800000000000000000(80%)
  • OWNER_: admin
  • CDai (CERC20DELEGATOR):0x5e2db2272D7B038D883305615638F46b1b2E5158
  • CBat (CERC20DELEGATOR):0x0Ae2746cc53a018f58c9274EA1183dd5DfC01107

** Lưu ý tham số khi deploy CERC20DELEGATOR như sau:

  • UNDERLYING_: token
  • INTERESTRATEMODEL_: là JumpRateModelV2
  • INITIALEXCHANGERATEMANTISSA_: tỉ lệ đổi token và ctoken ban đầu(1*10^18)
  • IMPLEMENTATION_: là CErc20Delegate
  • BECOMEIMPLEMENTATIONDATA: 0x
    Ta dùng 3 địa chỉ như sau:
  1. admin : 0x2b9f04190e73674ed2B97F981caB0C7205cd32a2
  2. User1: 0xA2546F00753e400421b5cD608a3b7601AC1D3270 - supply DAI
  3. User2: 0x8D372543c2b4E4E74624CeD470BF65Ead37Ca53e - supply BAT, borrow DAI
  4. User3: 0x0178dA524176760b643b8935FF22fa78abf8298a - liquidator này sẽ trả khoan DAI cho nền tảng để mua thanh lý khoản vay của User2 khi BAT thế chấp cho khoản vay xuống giá đến mức thanh lý

II. SUPPLY

  1. Admin mint DAI cho user1 và user3 ,mint BAT cho user2
  2. Admin gọi hàm _supportMarket tham số là CDAI và CBAT trong Comptroller
  3. User1 approve CDAI trong DAI, user2 approve CBAT trong BAT
  4. User1 cung cấp DAI cho nền tảng sẽ gọi hàm mint trong CDAI với tham số là số lượng DAI muốn cung cấp. Khi này user sẽ được ghi nhận số lượng CDAI tương ứng với tỷ lệ
  5. User2 cung cấp BAT cho nền tảng sẽ gọi hàm mint trong CBAT với tham số là số lượng BAT muốn cung cấp. Khi này user sẽ được ghi nhận số lượng CBAT tương ứng với tỷ lệ
    Output: 0 nếu thực hiện thành công hoặc revert với số uint khác thể hiện nguyên nhân lỗi

III. REDEEM

User 1 muốn rút DAI ra khỏi nền tảng sẽ gọi hàm redeem trong CDAI với tham số là số lượng CDAI tương ứng hoặc hàm redeemUnderlying với tham số là số lượng DAI muốn rút
Output: 0 nếu thực hiện thành công

IV. BORROW

Để thưc hiện vay thì admin phải set trước các phần sau:

  1. Trong SimplePriceOracle set giá của CDAI , CBAT qua hàm setUnderlyingPrice.
  • set giá CDAI: 100000000000000000000
  • set giá CBAT 50000000000000000000
  1. Trong Comptroller gọi hàm _setPriceOracle với tham số là địa chỉ SimplePriceOracle
  2. Trong Comptroller set hệ số thế chấp qua hàm _setCollateralFactor . Hệ số này là tỷ lệ được vay trên số tài sản thế chấp thường set 50-70%

User 2 muốn vay DAI sẽ cần:

  1. Trong Comptroller gọi hàm enterMarkets với tham số là 1 mảng gồm các CToken mà user đang supply cho nền tảng mà khi khoản vay của user bị thanh lý thì các tài sản trong mảng này sẽ bị thanh lý
  2. Sau đó gọi hàm borrow trong CDAI với tham số là số lượng DAI mà user muốn vay
    Output: 0 nếu thực hiện thành công hoặc revert với số uint khác thể hiện nguyên nhân lỗi

V. REPAY

  1. Trước khi User2 repay DAI thì cần approve CDAI trong DAI trước
  2. User2 gọi làm repayBorrow với tham số là số token muốn trả hoắcj repayBorrowBehalf nếu trả hộ user khác
    Output: 0 nếu thực hiện thành công hoặc revert với số uint khác thể hiện nguyên nhân lỗi

VI. LIQUIDATION

Để thưc hiện thanh lý thì admin phải set trước các phần sau:

  1. Trong Comptroller set hệ số thanh lý qua hàm _setCloseFactor . Hệ số này thể hiện phần trăm tài sản bị thanh lý mà người mua thanh lý có thể mua( vd 70%)
  2. Trong Comptroller set hệ số khuyến khích thanh lý qua hàm _setLiquidationIncentive . Hệ số này thể hiện tỷ lệ chiết khấu của tài sản thanh lý so với giá thị trường để khuyến khích người mua thanh lý. (vd 1.1)
  3. Set giá CBAT hay BAT giảm để khoản vay DAI của user2 bị thanh lý hay CBAT sẽ bị nền tảng bán thanh lý

User3 là người mua thanh lý sẽ cần dùng DAI của mình để trả khoản nợ cho user2 sau các bước:

  1. Approve CDAI trong DAI
  2. Trong CDAI gọi hàm liquidateBorrow với tham số:
    Borrower: địa chỉ user2 bị thanh lý
    repayAmount: khoản vay được trả
    CtokenCollateral: địa chỉ CBAT đã được user2 dùng làm thế chấp
    Output: 0 nếu thực hiện thành công hoặc revert với số uint khác thể hiện nguyên nhân lỗi

Bình luận

Bài viết tương tự

- vừa được xem lúc

[Blockchain] Road to Bitcoin

. Chắc mọi người hẳn đã không còn xa lạ gì với anh chàng tỷ phú đã ném vỡ cửa kính ô tô nhà mình cùng với siêu năng lực điều khiển vật giá chỉ bằng lời nói, người đã đẩy định giá Bitcoin trên thị trường vượt ngưỡng 50K dolar/coin với những bài twitter để đời . .

0 0 61

- vừa được xem lúc

Khi Ethereum có chi phí giao dịch quá đắt đỏ - Tương lai cho layer2 ?

Với sự phát triển như vũ bão của Blockchain, ETH dường như đang quá tải và hệ quả là chi phí Gas đã lên đến 1000Gwei, phí để tạo những transaction phức tạp đã xấp xỉ 500$ . Và một giải pháp cứu cánh cho các sản phẩm Defi trên ETH chính là Layer2, và trong nhiệm vụ lần này Matic đang thể hiện khả năn

0 0 89

- vừa được xem lúc

Blockchain với Java - Tại sao không?

Cuộc cách mạng công nghiệp 4.0 ra đời kéo theo nhiều sự thay đổi và xu hướng mới được hình thành. Riêng đối với lĩnh vực CNTT cũng không nằm ngoài vùng ảnh hưởng mạnh mẽ. Chính làn sóng 4.

0 0 92

- vừa được xem lúc

Phân loại và tầm quan trọng của các node trong mạng blockchain

Trước khi đi vào phân loại và nêu rõ được tầm quan trọng của các node trọng mạng blockchain thì mình xin được trích dẫn khái niệm về blockchain từ Wikipedia như sau:. .

0 1 65

- vừa được xem lúc

Code Smart Contract bằng Assembly ?

Introduction. Hồi còn học trong ghế nhà trường bộ môn lập trình tốn nhiều não nhất của mình là code assembly. Nôm na thì bất cứ ngôn ngữ bậc cao nào như C , Go, Java,... được sinh ra để người dễ hiểu và dễ code , tuy nhiên chúng đều sẽ được compiled down xuống assembly một ngôn ngữ bậc thấp để máy h

0 0 58

- vừa được xem lúc

Dextool - Công cụ phân tích Decentralized Exchange tuyệt vời

. Trend Defi mặc dù đã bớt nhiệt nhưng những sản phẩm nổi bật của làn sóng này mang lại thì vẫn rất được người dùng ưa chuộng. Đặc biệt là các nền tảng Decentralized Exchange, tiêu biểu là Uniswap, SushiSwap, 1inch Exchange, FalconSwap,... Nhưng khi đã sử dụng các nền tảng DEx này mà không biết đến

0 0 106