三步实现自己的第一笔闪电贷合约

闪电贷是DeFi中一个独特的产品,在传统金融活动中没有与之对应的事物。会编写和使用闪电贷也是一项很重要的技能。

概念

闪电贷是一种无抵押、借贷金额无上限的贷款。它要求借贷人快借快还,快到还款和借款在同一个交易内。

闪电贷要求每笔借款在归还时,除了归还本金,还要支付一定利息。该利息由系统动态计算。

实现?

很多人对理解闪电贷有一定的难度。因为这需要了解智能合约执行原理和以太坊状态变化的机制。我们通过自己编写一个闪电贷合约,来理解其背后的运行原理。

以使用Aave提供的闪电贷为例,编写一个你自己的合约非常简单,你只需要实现一个叫?executeOperation的方法。

1.executeOperation

executeOperation方法参数中_reserve?是所借代币的合约地址,如果是ETH则是一个特殊的地址,_amount是借款的金额,_fee是本次借款要偿还的利息。_params暂时可忽略。

神鱼:数月前发现Argent插件钱包在某边缘条件下会上传用户助记词,已通知官方:7月17日消息,神鱼在其社交平台表示,几个月前发现Argent插件钱包某一版本在一个边缘条件下会上传用户助记词,已经通知官方,现在应该已经修复。[2023/7/17 10:59:38]

functionexecuteOperation(

??address_reserve,

???uint256_amount,

???uint256_fee,

??bytescalldata_params

??)

??external

{

??require(_amount<=getBalanceInternal(address(this),_reserve),"借款失败");

观点:BTC供应量有限应该起到对冲通胀的作用:金色财经报道,英国加密货币指数交易公司 Trakx 的经济学家 Ryan Shea表示,加密货币不像与指数挂钩的金边债券或通胀保值国债那样受到通胀保护,后者的价值会根据指定的通胀指数自动增加。但对于比特币等供应量固定或有限的加密货币,它们的供应量指标与黄金的供应量指标非常相似,而黄金的供应量自然受到限制。

CoinShares研究主管James Butterfill表示,尽管比特币很受欢迎,但它相对较新,而且有关该加密货币的可用价格数据仍然有限。由于比特币的存在时间相对较短,我们不得不依赖于它作为一种资产所代表的基本概念,因此从理论上讲,它的供应量有限,但以美元计价,它应该起到对冲通胀的作用。[2023/6/13 21:33:38]

??//

??//用借来的?ETH去赚取更多的ETH

??//

服装品牌Clothier提交NFT相关商标申请:金色财经报道,美国商标局商标注册律师Mike Kondoudis在社交媒体上发文表示,服装品牌Clothier提交NFT相关商标申请,计划包括:NFT+NFT支持的媒体、虚拟服装、头饰、眼镜、虚拟商品+数字资产的市场平台。[2022/8/3 2:57:04]

??//还款

??uinttotalDebt=_amount.add(_fee);

??transferFundsBackToPoolInternal(_reserve,totalDebt);

}

当代码执行到executeOperation时,你已经拿到了借来的钱,你主要是写如何利用这些钱赚取更多钱的逻辑。例如你发现同一个交易对A/ETH在DEX1和DEX2的价格差较大,那么你的赚钱逻辑为:

大户地址数千枚POAP疑遭官方销毁,POAP官方或将发布公告:7月20日消息,据社区用户表示。用户地址内近4000枚POAP疑似遭到官方销毁。区块链浏览器记录显示,数千枚POAP已被打入Burn地址。

据了解,目前有9名用户的POAP被销毁。POAP官方Discord中文区Mod表示,POAP对于此次事件的公告将于随后公布。

此外,POAP首席运营官isabl曾于3月份在POAP官方论坛上表示,部分用户通过交付系统的漏洞自动化获取POAP违反了协议精神,因此销毁了其地址中的所有POAP。[2022/7/20 2:25:36]

已借得100ETH;

在价格低的DEX1中买入A;

在价格高的DEX2中卖出A;

卖得110ETH。

2.开始借款

executeOperation是借款成功后要执行的逻辑。而开始借款的逻辑需要用户自己触发,或者直接写在合约的构造函数里。例如:

functionflashloan()publiconlyOwner{

??bytesmemorydata="";

??uintamount=100ether;

??addressasset=address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE);//借ETH

??ILendingPoollendingPool=ILendingPool(addressesProvider.getLendingPool());

??lendingPool.flashLoan(address(this),asset,amount,data);

}

flashLoan()是真正的借款函数,例子中是借入100ETH。闪电贷由此方法触发,也由此方法结束。要完全理解它,我们需要看看flashLoan()的内部逻辑。我们摘取最重要的部分。

3.?flashLoan()内部逻辑

flashLoan()中首先进行各项数据验证,然后便借款给你,紧接着调用你的?executeOperation?的赚钱逻辑,最后验证你是否归还了本金加利息。主要逻辑如下所示:

????????//各种数据验证,池中是否还有足够的钱可以贷出?计算手续费等等

??????//将借款转给你

????core.transferToUser(_reserve,userPayable,_amount);

????//执行你的合约的赚钱逻辑

????receiver.executeOperation(_reserve,_amount,amountFee,_params);

????//检查目前池中余额

????uint256availableLiquidityAfter=_reserve==EthAddressLib.ethAddress()

???????address(core).balance

??????:IERC20(_reserve).balanceOf(address(core));

????????//通过池中余额变化来确认你是否已经归还了借款利息

????require(

??????availableLiquidityAfter==availableLiquidityBefore.add(amountFee),

??????"Theactualbalanceoftheprotocolisinconsistent"

????);

如果?require()验证失败,它将revert整个交易,让借款无效,从而保证借出方总是安全的。

结语

以上解释了实现第一笔闪电贷最基本的方法和原理。编译源码,以及部署到线上,大家可以参考Aave相关官方文档,这里就不一一介绍了。

编写闪电贷合约总体并不复杂。使用闪电贷风险也比较小。如果赚钱逻辑失败,变成了亏钱逻辑,不能完成还款,那么也不用担心借来的巨款无力偿还。整个交易将会执行失败,就如同借款从来没有发生过一样。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

银河链

波场WBF感恩节大回馈,交易主流币瓜分5000DUSD

尊敬的WBF用户: 为感谢用户对WBF的支持,WBF将开展感恩节大回馈”主流币交易打卡第三期,瓜分5000DUSD“活动。活动期间每日参与主流BTC、ETH、EOS、TRX、LTC币币交易,指定币对即可获得瓜分3000DUSD的机会.

[0:0ms0-0:664ms