AAVE 清算操作指南

買賣虛擬貨幣

AAVE 是一個 DeFi 去中心化貸款協議,人們可以使用多種加密資產作為抵押,向其申請貸款。目前能夠作為抵押資產的加密資產包括 ETH、DAI、USDT、LINK 等十幾種。

作為一個貸款協議,系統本身執行健康與否很大程度上取決於使用該協議進行的各種貸款是否健康。當所有的借款人都有足夠的抵押品抵押時,整個系統擁有足夠的償還能力,系統是健康的;而一旦有借款人抵押不足時,整個系統就會增加風險,而一旦這樣的借款人過多,整個系統的風險將進一步擴大。因此係統中需要清算人這一角色。清算人對不太健康的借貸(健康係數<1)進行清算,併為此獲得抵押物總價值5%-15%的獎勵。該獎勵措施能夠鼓勵清算人及時清算不健康的貸款,從而保障整個系統的金融安全。

清算人參與清算有三種方式:

  • 使用 AAVE 應用程式中的清算模組:https://app.aave.com/liquidations

  • 直接呼叫智慧合約中的 liquidationCall() 方法

  • 建立自己的自動化系統或者機器人來對貸款進行清算

鑑於方法一較為簡單,按照應用內提示進行操作即可,本文重點討論後兩種。其中方法三也使用到了二的方法,即呼叫了智慧合約中的 liquidationCall()。

觸發清算的先決條件

在呼叫 liquidationCall() 方法時,我們需要知道幾個條件:

  • 健康因素低於1的賬戶。只有健康因素低於1的賬戶才會被清算。其中健康因素的計算方式為:

其中:

-  Collateral[i] in ETH: 摺合成 ETH 計算的抵押的資產i的值

-  Liquidation Threshold[i]: 清算閾值,最大借出資產/總抵押資產

-  Total Borrows in ETH: 摺合成 ETH 的借出的資產額度

-  Total Fees in ETH: 摺合成 ETH 計算的所有費用

AAVE 採用的是 Chainlink 的喂價機制。

公式可總結為:健康因子與抵押物總和成正比,與借出物總額成反比。抵押物越多,健康因子越大,借款人償付能力越強,該筆借貸越健康。反之借出物越多,健康因子分母越大,值越小,則表示借款人償付能力越低,該筆借貸越不健康。只有健康因子低於1的賬戶才會被清算。

  • 有了低於1的健康因子就可以觸發清算條件要清算某條具體的貸款,還需要知道該筆貸款的借款人地址、貸款金額和資產金額,確保自己有足夠的餘額幫助貸款人償還債務。

要被清算的賬戶

只有健康係數低於1的賬戶才會被清算。有多種方式可以獲到使用者的健康係數:

  • 使用鏈上監控

        i. 監控 AAVE 協議發出的時間,並在本地保持使用者資料的最新狀態。每當使用者和 AAVE 協議進行互動時(存款、還款、借用等),都會發出時間,這可以在鏈上監控到;

        ii. 監控到使用者地址後,就可以使用該使用者的地址,在鏈上呼叫直接呼叫查詢介面即可查詢到 getUserReserveData()。

  • 使用專案方的 API 進行查詢(稍有延遲)

專案方提供了查詢的 API:https://protocol-api.aave.com/liquidations?get=proto

執行清算

查詢到要清算的賬戶後,我們就能計算可以清算的抵押物的數量。執行清算一般有兩種方法:

  • 編寫一個智慧合約,在智慧合約中直接呼叫 AAVE 中的 liquidationCall() 執行清算

  • 使用 Web3.js 等軟體包進行呼叫

此處以 web3.js 為例:

// Import the ABIs,see:https://docs.aave.com/developers/developing-on-aave/deployed-contract-instancesimport DaiTokenABIfrom "./DAItoken.json"importLendingPoolAddressesProviderABI from"./LendingPoolAddressesProvider.json"importLendingPoolABI from"./LendingPool.json"// ... The rest ofyour code ...// Input variablesconstcollateralAddress = 'THE_COLLATERAL_ASSET_ADDRESS'constdaiAmountInWei = web3.utils.toWei("1000","ether").toString()const daiAddress ='0x6B175474E89094C44Da98b954EedeAC495271d0F'// mainnet DAIconst user ='USER_ACCOUNT'constreceiveATokens = trueconstlpAddressProviderAddress = '0x24a42fD28C976A61Df5D00D0599C34c4f90748c8'//mainnetconst lpAddressProviderContract= new web3.eth.Contract(LendingPoolAddressesProviderABI,lpAddressProviderAddress)// Get the latestLendingPoolCore addressconst lpCoreAddress= await lpAddressProviderContract.methods.getLendingPoolCore().call().catch((e) => {throwError(`Errorgetting lendingPool address: ${e.message}`)})// Approve theLendingPoolCore address with the DAI contractconst daiContract =new web3.eth.Contract(DAITokenABI, daiAddress)awaitdaiContract.methods.approve(lpCoreAddress,daiAmountInWei).send().catch((e) => {throwError(`Errorapproving DAI allowance: ${e.message}`)})// Get the latestLendingPool contract addressconst lpAddress =await lpAddressProviderContract.methods.getLendingPool().call().catch((e) => {throwError(`Errorgetting lendingPool address: ${e.message}`)})// Make the deposittransaction via LendingPool contractconst lpContract =new web3.eth.Contract(LendingPoolABI, lpAddress)awaitlpContract.methods.liquidationCall(collateralAddress,daiAddress,user,daiAmountInWei,receiveATokens,).send().catch((e) => {throwError(`Errorliquidating user with error: ${e.message}`)})

向左滑動,檢視完整程式碼

設定一個清算機器人

以上即為清算的邏輯,在設計清算機器人時,按照以下步驟即可:

  • 清算前需要計算,確保機器人自己有足夠的資金能幫貸款人還清債務,也要計算能夠獲得足夠的資金作為報償;

  • 考慮清算最有利可圖的抵押品,不僅要考慮到貸款債務的金額,還需要把 gas 的成本計算在內,以此判斷是否有足夠的獲利能力;

  • 確保機器人訪問的是最新版本的 AAVE 協議;

  • 其他系統故障和資產安全等。

計算收益

  • 獲取抵押品的詳細資訊,例如抵押的使用者、清算獎勵比率等

  • 獲取抵押品的數量,並從預言機中獲取到抵押品當前的總價值

  • 最大清算獎勵=抵押品總價值*清算獎勵比例

  • 計算交易需要的 gas 費用

  • 最大獲利=最大清算獎勵減去gas 費用

清算獎勵比例根據幣種的不同而有所變化,一般來說,穩定幣清算獎勵相對較低,非穩定幣價格則更高:https://docs.aave.com/risk/asset-risk/risk-parameters

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;