元宇宙非小号金色财经交流群社区官网

XVG币购买平台|实现首笔闪电贷合约

浏览:93|时间:2023-08-25 08:29:33
从技术角度理解闪电贷最基本的方法和原理,并学会如何代码实现。

原文标题:《实现你的第一笔闪电贷合约》 撰文:谈国鹏,Ownbit创始人

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

概念 闪电贷是一种无抵押、借贷金额无上限(可以借光池中所有的钱)的贷款。它要求借贷人快借快还,快到还款和借款在同一个交易内(同一个以太坊transaction)。

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

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

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

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

functionexecuteOperation(address_reserve,uint256_amount,uint256_fee,bytescalldata_params)external{ require(_amount<=getBalanceInternal(address(this),_reserve),"借款失败"); //用借来的ETH去赚取更多的ETH //还款 uinttotalDebt=_amount.add(_fee); transferFundsBackToPoolInternal(_reserve,totalDebt); }

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

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

functionflashloanpubliconlyOwner{ bytesmemorydata=""; uintamount=100ether; addressasset=address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE); //借ETH ILendingPoollendingPool=ILendingPool(addressesProvider.getLendingPool); lendingPool.flashLoan(address(this),asset,amount,data); }

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

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

//各种数据验证,池中是否还有足够的钱可以贷出?计算手续费等等 //将借款转给你 core.transferToUser(_reserve,userPayable,_amount); //执行你的合约的赚钱逻辑(步骤1中所写的函数) 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相关官方文档,这里就不一一介绍了。

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

G币 XVG XVG币 合约 平台

  • 15年100000%利润建议!$快速$XVG XVG/USDT:#QUICKARMY

    15年100000%利润建议!$快速$XVG XVG/USDT:#QUICKARMY

    2024-04-11 05:13:19

    我很庆幸自己没有听,因为大多数购买的朋友比特币以太坊现在过着奢侈的生活,有豪华的汽车、美丽的伴侣和全球旅行。我更喜欢通过实际工作赚取财富,而不是投机或运气。现在建议我买$快速 $XVG 我的朋友欺骗了我很多年。...

  • XVG短期贸易分析及信号警报

    XVG短期贸易分析及信号警报

    2024-03-16 16:54:23

    新信号警报硬币名称:$XVG加入我的直播以获得优质信号信号类型:短贸易分析:1目前图表上的上升三角形形态很明显,到目前为止,支撑线和阻力线都没有被突破。此外,如果我们看清楚这张图表,我们可以看到上升楔形模式同时活跃。...

  • 2023年最受期待的XV代币已推出,现在在ERC20和BSC链上可用

    2023年最受期待的XV代币已推出,现在在ERC20和BSC链上可用

    2023-12-21 14:10:20

    $XV 代币(BSC)成功推出...现已在 ERC20 和 BSC 上提供...在为时已晚之前加入... $XV 2023 年及以后最受期待的实用代币,已成功推出,现在可以在ERC20 和 BSC 链都没有理由对此超级看...

  • 什么是比特币合约?交割合约和永续合约有什么区别?

    什么是比特币合约?交割合约和永续合约有什么区别?

    2021-12-01 13:59:34

    一.什么叫比特币期货比特币期货又被称为比特币合约,它与务必具体拥有虚拟货币才可开展的币币交易有较大不一样。比特币合约使你可以预测分析BTC的市场价格和对冲交易风险性。这类交易规则,代表着你购买的是价格趋势,在于财产自身。...

本站分享的区块链、Web3.0元宇宙、NFT、数字藏品最新消息等相关数藏知识快讯NFR资讯新闻,与金色财经非小号巴比特星球前线Btc中国官网无关,本站资讯观点不作为投资依据,市场有风险,投资需谨慎!不提供社区论坛BBS微博微信交流群等相关币圈信息发布!
本站内容来源于互联网,如存在侵权及违规内容投诉邮箱( zztaobao@vip.qq.com )