简介
在本文中,我们将了解AAVE协议中贷款的清算过程,以及如何创建一个可以支付贷款的脚本。为此,我们将提供贷款,并让他们在测试环境下承担偿还部分债务的责任。
AAVE清算
AAVE是一个DeFi去中心化贷款协议,允许您申请各种加密资产的贷款,其他资产作为抵押品。
在该协议中,使用“健康系数”指标来衡量用户的健康状况,它显示了用户相对于所申请贷款的抵押状况。该数据计算如下:
如果你不喜欢数学,我们可以用一种更图形化的方式来看待它,比如一个比例尺表,在这个表格中,以太坊抵押品的总和和所需贷款价格之间的清算确保了金相平衡。
这必须保证抵押部分比贷款部分重,以免使余额失衡。
是什么导致平衡变得不平衡?
·抵押品贬值:如果我们担保一种贬值的货币,它将使我们负债累累。
·主要赞赏:这可能有两个原因。一是收取利息,导致本金增值。此外,针对以太坊的货币价格可能会上涨,而且由于贷款以以太坊计价,我们的本金价值可能会超过我们的抵押品价值。
当债务大于剩余的抵押品储备时,用户的健康因子值将降至1以下。此时,清算人可以偿还部分债务,从中扣除抵押品并贴现,这鼓励清算人采取以下行动:清算。
使用协议的实际案例
为了使健康系数小于1,我将在AAVE testnet上申请贷款,这可能是加密资产的**风险和**利息,这样我就能尽快负债。
我要做的第一件事是存放加密资产,我将用它作为抵押品,在本例中是ETH。
然后,我要申请贷款,看看哪一家的利率**。我发现这是牙
所以我申请了一笔贷款,但只存了抵押物的50%。
我存了这么多钱是因为我还存钱。
为了不必等待很长时间,我将增加我的风险并提取我账户中所有可能的抵押品:
这让我更快地负债
现在,你要做的就是等待健康系数降到1以下。
准备清算
虽然贷款利息降低了我的健康系数1,我们将创建一个脚本来支付。但是,为了理解测试的基本条件,我对创建测试页面的过程有一个概述。
要运行测试,我们需要以下输入数据:
const collateralAddress=quot;0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6035//我们要清算的用户的辅助地址
const reservedaddress=quot;0xf80a32a835f79d7787e8a8ee5721d0feafd78108quot;//我们将为ERC20代币支付的保留地址
const userliquided=quot;0xe4509F2ce63DED82e74e9e7E648c1A69e90cD2C4quot;//我们要清算的用户
const purchaseAmount=10//我们要清算的准备金金额
·我想知道当我还清贷款时我想得到的抵押地址,在这种情况下,我想得到ETH,我可以在这里找到。
·保留地址:加密资产的地址,我将支付结算债务是您的ERC20合同的地址。
·我要清除用户。
·待清算的金额,用贷款代币表示。
使用这些数据,将执行测试。测试将直接调用ropsten测试网络的契约并验证是否满足条件,就像智能合约调用liquidationcall函数一样。但是,当只调用时,我们避免恢复,并且我们知道错误的原因。实现它们的代码是:
它应该获得**的LendingPoolCore地址,async()=gt{
lpCoreAddress=等待getLpCoreAddress(lpAddressProviderContract)
expect(lpCoreAddress)。包含(39;0x39;)
});
it(39;应获取**的贷款池合同地址#39;,async()=gt{
lpAddress=await getLendingPoolAddress(lpAddressProviderContract)
expect(lpAddress)。包含(39;0x39;)
});
it(39;应该获得lpContract39;,async()=gt{
lpContract=等待新web3。ETH.合同(LendingPoolABI,lpAddress)
expect(lpContract.uU地址)。包含(39;0x#39;)
});
it(39;应该获得lpCoreContract#39;,async()=gt{
lpCoreContract=等待新web3。ETH.合同(贷款池coreabi,lpCoreAddress)
expect(lpcore合同地址)。包含(#39;0x#39;)
});
it(39;的运行状况系数应低于139;,异步()=gt{
const userData=await getUserAccountData(lpContract,userliquired);
expect(转换单位(用户数据.健康因素)).莱斯特汉(1)
})
it(#39;应该启用抵押品#39;,async()=gt{
const userReserveData=await getUserReserveData(lpContract,collateralAddress,userliquireded);
预期(userReserveData.usageAsCollateralEnabled. 真实的
})
it(#39;应存放抵押品#39;,async()=gt{
const userCollateralBalance=等待getUserUnderingAssetBalance(
lpcore合同,
辅助地址,
用户清算);
expect(号码(userCollateralBalance))。比…更伟大(0)
})
it(#39;应该有足够的储备借用#39;,async()=gt{
常数清算系数百分比=0.5
const userBorrows=等待getUserBorrowBalances(
lpcore合同,
保留地址,
用户清算);
const usERCompoundborrowbalance=转换单位(用户借款[1])
expect(用户组合贷款余额*清算结清系数百分比)
。比…更伟大(数量(采购金额)
})
如果我们现在试着运行它们,请运行它们
npm测试
它应该返回一个错误,因为至少有一个条件不满足:
如我们所见,验证我的帐户的健康系数小于1的测试失败表明事务将无**确执行,如果没有其他条件得到满足,也会发生同样的情况。
还清部分贷款
过了一段时间,从贷款中扣除的利息使我的债务越来越多,而抵押品上的债务却越来越少,直到我的健康指数降到这个水平以下,现在清盘人可以把它清了。
如果现在运行测试,我们将看到:
它告诉我们条件已经满足,所以我们运行应用程序,这样,现在我们调用liquidationcall函数并清算部分贷款
npm启动
当交易执行时,我们看到贷款减少了我们称之为此功能的资金量,这可以由任何监控所有用户健康因素并以折扣价购买抵押品的清算人来完成。
文章链接:https://www.btchangqing.cn/98935.html
更新时间:2020年09月06日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。