闪电贷是DeFi中一个独特的产品,在传统金融活动中没有与之对应的事物。会编写和使用闪电贷也是一项很重要的技能。
概念
闪电贷是一种无抵押、借贷金额无上限的贷款。它要求借贷人快借快还,快到还款和借款在同一个交易内。
闪电贷要求每笔借款在归还时,除了归还本金,还要支付一定利息。该利息由系统动态计算。
实现?
很多人对理解闪电贷有一定的难度。因为这需要了解智能合约执行原理和以太坊状态变化的机制。我们通过自己编写一个闪电贷合约,来理解其背后的运行原理。
以使用Aave提供的闪电贷为例,编写一个你自己的合约非常简单,你只需要实现一个叫?executeOperation的方法。
1.executeOperation
executeOperation方法参数中_reserve?是所借代币的合约地址,如果是ETH则是一个特殊的地址,_amount是借款的金额,_fee是本次借款要偿还的利息。_params暂时可忽略。
金色财经行情播报丨BTC连续拉升 局部持续整理:火币行情显示,昨日晚间至今日凌晨BTC连续拉升,最高探至9398USDT。从4个小时图看,BTC沿上升通道加速拉升,局部在9280USDT附近压力位整理。1小时图均线多头BTC连续拉升,局部持续整理。截至10:00,主流币的具体表现如下:[2020/5/14]
functionexecuteOperation(
??address_reserve,
???uint256_amount,
???uint256_fee,
??bytescalldata_params
??)
??external
{
??require(_amount<=getBalanceInternal(address(this),_reserve),"借款失败");
金色晨讯 | 瑞士将调整现有法律 监管让Fintech行稳致远:1.美国国会议员计划引入联邦加密货币立法
2.比特币期货收涨于3840美元附近
3.市值超过10亿美元的加密货币仅剩9个
4.Circle旗下加密交易所推出机构交易服务
5.瑞士财政部长:将针对区块链技术调整现有法律
6.全球超41.5万台路由器感染恶意挖矿软件
7.美国财政部官员呼吁各国采取措施防止加密技术用于非法目的
8.经济参考报头版:监管升级让金融科技行稳致远
9.爱沙尼亚监管局计划缩小提供加密货币服务公司的利润率[2018/12/5]
??//
??//用借来的?ETH去赚取更多的ETH
??//
??//还款
??uinttotalDebt=_amount.add(_fee);
??transferFundsBackToPoolInternal(_reserve,totalDebt);
金色快评:Facebook改变其对加密货币广告政策 风向有变:据recode消息,Facebook正在调整其加密货币广告禁令,允许一些预先受到批准的广告商推广加密业务及服务,例如交易所。但二元期权和ICO的广告仍然被禁止。就在今年年初社交网络巨头Facebook宣布,该公司将开始全面禁止那些旨在推广比特币、加密货币和ICO相关的所有广告。是什么促使了Facebook转变态度呢?很明显,加密货币行业是一个发展迅速、令人兴奋的行业,有很多潜在的广告商。站在Facebook的角度上考虑,只要通过一些审核手段保证Facebook的用户不会被,那么Facebook会很乐意获得额外的广告收入。与Facebook采取相同禁令的是Google,今年五月份,谷歌宣布将在六月份开始禁止广告主在其平台上投放与数字加密货币相关的广告。另外Twitter也有相关的禁令。Google和Facebook选择了禁止加密货币相关的广告,然而目前Facebook有解禁的意味,不知道Google、Twitter在之后是否也会在相关政策上有所调整,此番Facebook放松相关政策也意味着Facebook对于加密货币领域在风险评估上有所改善,不过值得注意的是ICO相关的广告依然被禁止,同时广告主们依然不是想投就能投的,依然要接受审查。Facebook在加密货币领域抱持小步试探的谨慎态度。[2018/6/27]
}
当代码执行到executeOperation时,你已经拿到了借来的钱,你主要是写如何利用这些钱赚取更多钱的逻辑。例如你发现同一个交易对A/ETH在DEX1和DEX2的价格差较大,那么你的赚钱逻辑为:
已借得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相关官方文档,这里就不一一介绍了。
编写闪电贷合约总体并不复杂。使用闪电贷风险也比较小。如果赚钱逻辑失败,变成了亏钱逻辑,不能完成还款,那么也不用担心借来的巨款无力偿还。整个交易将会执行失败,就如同借款从来没有发生过一样。
?是井里没有水,而是挖的不够深,不是成功来的慢,而是放弃速度快。得到一件东西需要智慧,放弃一样东西则需要勇气。手指脏了,大可不必把手指砍掉;帽子小了,大可不必把头削掉.
Filecoin解决了区块链存储的问题,这使得大型应用程序得以在Web3.0应用。在传统的以太坊网络,大家只能玩数字游戏、做价值储备和价值交换,或金融的借贷.
链闻编辑时间 《十大数据告诉你比特币强势上涨的原因》链闻总结了十大数据,带你探寻比特币强势上涨的原因.
自从OKEx加入MDUKEY测试网络的验证人节点以来,OKEx在节点服务、流动性建设等方面都在为MDUKEY持续赋能,全方位地融入并支持MDUKEY的生态发展.
尊敬的OKEx用户: 为了提升您的使用体验,我们即将对OKEx账户结构进行优化,原“借贷账户”将与“资金账户”合并。未来您可以直接使用资金账户参与借贷业务.
免责声明:将技术概念从一种语言完美地翻译到另一种语言是困难的,因此请注意,我们不能保证这个翻译的准确性。我们最重要的目标之一是使Filecoin主网尽可能地安全并且具有弹性.