如何设置一个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) => {throw Error(`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) => {throw Error(`Errorapproving DAI allowance: ${e.message}`)})// Get the latestLendingPool contract addressconst lpAddress =await lpAddressProviderContract.methods.getLendingPool().call().catch((e) => {throw Error(`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) => {throw Error(`Errorliquidating user with error: ${e.message}`)})
(编辑注:此处代码不完整,请查阅更多内容)
设置一个清算机器人
以上即为清算的逻辑,在设计清算机器人时,按照以下步骤即可:
清算前需要计算,确保机器人自己有足够的资金能帮贷款人还清债务,也要计算能够获得足够的资金作为报偿;考虑清算最有利可图的抵押品,不仅要考虑到贷款债务的金额,还需要把 gas 的成本计算在内,以此判断是否有足够的获利能力;确保机器人访问的是最新版本的 AAVE 协议;其他系统故障和资产安全等。
计算收益
获取抵押品的详细信息,例如抵押的用户、清算奖励比率等获取抵押品的数量,并从预言机中获取到抵押品当前的总价值
最大清算奖励=抵押品总价值*清算奖励比例计算交易需要的 gas 费用最大获利=最大清算奖励减去gas 费用
清算奖励比例根据币种的不同而有所变化,一般来说,稳定币清算奖励相对较低,非稳定币价格则更高。
DeFi潮流新风口:从链上数据看跨链桥的发展新方向
总锁仓额突破131亿美元,9月独立地址总数超12万个
Bitwise 向美SEC提交比特币策略ETF申请,旨在投资比特币期货和其他金融产品
PANews 9月15日消息,根据一份公开的监管文件,资产管理公司Bitwise 下属部门 Bitwise Index Services 向美国证券交易委员会(SEC)递交了比特币期货交易所交易基金 ETF申请,新基金名为Bitwise Bitcoin Strategy ETF。旨在投资比特币期货和其他金融产品。该文件称:“该基金不会直接投资于比特币,虽然该基金主要通过间接投资于在 CFTC 注册的商品交易所交易的标准化、现金结算的比特币期货合约来获得比特币敞口,但它也可能投资于集合投资工具和加拿大上市的提供比特币敞口的基金”。文件显示,ETF 还可能投资于现金、美国政府证券或货币市场基金。US Bancorp Fund Services 将担任转账代理和管理人,而美国银行将担任托管方。据了解,美国证券交易委员会(SEC)至今还未批准任何比特币 ETF 基金。此外,美证监会主席 Gary Gensler 表示该机构更有可能批准比特币期货 ETF 而不是现货 ETF,因为期货 ETF 将投资于芝加哥商品交易所(CME)提供监管的比特币期货产品,而比特币现货则不受监管。来源链接
知情人士:因需求强烈,Coinbase计划发行的债券或增加至20亿美元
PANews 9月15日消息,有知情人士称,此前计划发行15亿美元债券的Coinbase会将交易规模提升至20亿美元,因为至少已经有70亿美元的订单涌入。其他知情人士表示,等额的7年期和10年期债券将分别以3.375%和3.625%的利率发行,低于最初讨论的借贷成本。彭博社表示,固定收益投资者对该产品的热捧,代表了加密货币不再是一个专属于风险资本的行业,因为养老基金和对冲基金在内的专注投资债务的投资者都希望参与到此次的投资中。此前根据 Coinbase 提交给美国证券交易委员会(SEC)文件显示,Coinbase 将通过私募发行 15 亿美元于 2028 年和 2031 年到期的有担保高级票据,这些票据将由 Coinbase 的全资子公司 Coinbase, Inc. 提供全额无条件担保。来源链接