闪电贷是DeFi中一个独特的产品,在传统金融活动中没有与之对应的事物。会编写和使用闪电贷也是一项很重要的技能。
概念
闪电贷是一种无抵押、借贷金额无上限的贷款。它要求借贷人快借快还,快到还款和借款在同一个交易内。
闪电贷要求每笔借款在归还时,除了归还本金,还要支付一定利息。该利息由系统动态计算。
实现?
很多人对理解闪电贷有一定的难度。因为这需要了解智能合约执行原理和以太坊状态变化的机制。我们通过自己编写一个闪电贷合约,来理解其背后的运行原理。
以使用Aave提供的闪电贷为例,编写一个你自己的合约非常简单,你只需要实现一个叫?executeOperation的方法。
1.executeOperation
executeOperation方法参数中_reserve?是所借代币的合约地址,如果是ETH则是一个特殊的地址,_amount是借款的金额,_fee是本次借款要偿还的利息。_params暂时可忽略。
Valkyrie向美SEC提交以太坊策略ETF的申请文件:5月14日消息,加密资产管理公司Valkyrie Investments向美国SEC提交Valkyrie Ethereum Strategy ETF的申请文件。
该基金希望通过将其部分资产投资于其根据开曼群岛法律成立的全资子公司Valkyrie Ethereum Strategy (Cayman) Ltd.,从而获得以太坊期货合约的敞口。Valkyrie担任子公司的投资顾问。[2023/5/15 15:02:43]
functionexecuteOperation(
??address_reserve,
???uint256_amount,
???uint256_fee,
??bytescalldata_params
??)
伦敦金融科技公司Plutu将推出Plutus Card:金色财经报道,2023 年第一季度,伦敦金融科技公司Plutus将在全球最大的加密市场美国(US)推出其金融应用程序和卡Plutus Card。客户在所有购买中可获得 3-8% 的加密奖励,并选择多达 8 个应用内福利,例如 100% 返还 Netflix、Spotify 和 Prime ,奖励以 PLU 的形式出现。(finance.yahoo)[2022/8/11 12:17:06]
??external
{
??require(_amount<=getBalanceInternal(address(this),_reserve),"借款失败");
??//
??//用借来的?ETH去赚取更多的ETH
??//
美财政部官员:打击朝鲜加密货币攻击事件是对其实施制裁的首要任务:6月29日消息,美国财政部一名官员6月28日在韩国表示,打击朝鲜针对加密货币发起的攻击事件是美国对该国实施制裁的首要任务。美国财政部负责恐怖主义和金融情报的副部长Brian Nelson对Maeil Business Newspaper表示,通过黑客攻击盗取的加密货币是朝鲜政权的“重要收入来源”。(Central Banking)[2022/6/29 1:40:09]
??//还款
??uinttotalDebt=_amount.add(_fee);
??transferFundsBackToPoolInternal(_reserve,totalDebt);
}
当代码执行到executeOperation时,你已经拿到了借来的钱,你主要是写如何利用这些钱赚取更多钱的逻辑。例如你发现同一个交易对A/ETH在DEX1和DEX2的价格差较大,那么你的赚钱逻辑为:
苹果前Apple Arcade创意总监Mark Bozon加入迪士尼负责元宇宙开发:6月4日消息,迪士尼已成功邀请苹果前Apple Arcade创意总监Mark Bozon加入团队,负责整合迪士尼现有诸多资源进行元宇宙方面的开发。
据悉,Mark Bozon已于今年5月离开苹果,他在迪士尼的新头衔将会是副总裁,职务是Next Generation Storytelling Creative Experiences。迪士尼行政总裁Bob Chapek早前就已经高调表示,迪士尼将会进军元宇宙,未来将会把迪士尼世界变成虚拟,甚至将现实的迪士尼乐园与虚拟世界融合,创造一个全新的世界。(9To5Mac)[2022/6/4 4:02:03]
已借得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相关官方文档,这里就不一一介绍了。
编写闪电贷合约总体并不复杂。使用闪电贷风险也比较小。如果赚钱逻辑失败,变成了亏钱逻辑,不能完成还款,那么也不用担心借来的巨款无力偿还。整个交易将会执行失败,就如同借款从来没有发生过一样。
比特币快速突破1.8万美元新高,引发了加密货币行情的高潮,无论是社会关注热度,还是市场投资热度,都正在逐渐升温,市场情绪指数也从昨天的91上升到今天的94.
1900/1/1 0:00:00尊敬的OKEx用户:为响应社区用户呼声,OKEx将于2020年9月30日10:00(HKT)开启热门NFT项目充值上线专场活动.
1900/1/1 0:00:00亲爱的用户:BigONE为支持DFS社区发展,现上线「EOSDFS(大丰收)机池」,该矿池所募集的EOS,将由DFS进行代理.
1900/1/1 0:00:00尊敬的ZT用户:ZT第三期“神灯计划”即将开启,本期项目为THOR。在活动期间内,用户只需在币币资产搜索“THOR”,点击充值——生成“充值地址”,点亮该项目神灯,即可获得0.02枚THOR空投.
1900/1/1 0:00:00Gate.io已上线ROSE/USDT永续合约实盘交易,支持1-20倍做多和做空操作,杠杆率可以在下单时自行选择.
1900/1/1 0:00:00或许不久之后就能见到实验ETH1.0/ETH2.0合并的测试网上线。近日以太坊大幅修改了ETH2.0路线图,受到广泛关注。并引发了一系列疑问,本文结合多个信源,尝试解答以下主要疑问.
1900/1/1 0:00:00