闪电贷是DeFi中一个独特的产品,在传统金融活动中没有与之对应的事物。会编写和使用闪电贷也是一项很重要的技能。
概念
闪电贷是一种无抵押、借贷金额无上限的贷款。它要求借贷人快借快还,快到还款和借款在同一个交易内。
闪电贷要求每笔借款在归还时,除了归还本金,还要支付一定利息。该利息由系统动态计算。
实现?
很多人对理解闪电贷有一定的难度。因为这需要了解智能合约执行原理和以太坊状态变化的机制。我们通过自己编写一个闪电贷合约,来理解其背后的运行原理。
以使用Aave提供的闪电贷为例,编写一个你自己的合约非常简单,你只需要实现一个叫?executeOperation的方法。
1.executeOperation
executeOperation方法参数中_reserve?是所借代币的合约地址,如果是ETH则是一个特殊的地址,_amount是借款的金额,_fee是本次借款要偿还的利息。_params暂时可忽略。
Seed Club Ventures公布已投资项目,包含Lens Protocol等:3月28日消息,DAO加速器SeedClub发文公布旗下风投基金Seed Club Ventures已投资项目。Seed Club Ventures在preseed轮和种子轮投资了包括Guild、StabilityAI、LensProtocol、Coordinape和Molecule在内的互联网原生项目,投资领域涵盖人工智能、去中心化科研和Web3社交等前沿领域。
此前报道,3月21日消息,Seed Club 以2500万美元的资金启动了其风投部门Seed Club Ventures。该笔资金将在未来几年内部署到种子前和种子阶段的项目,为DAO和开放社区建设基础设施、应用程序和工具,投资金额从10万美元到100万美元不等。[2023/3/28 13:30:54]
functionexecuteOperation(
11529枚ETH从Bitfinex 转入未知钱包:金色财经报道,据WhaleAlert监测数据显示,11529枚ETH(约合20,142,508美元)从Bitfinex 转入未知钱包。[2023/3/25 13:26:25]
??address_reserve,
???uint256_amount,
???uint256_fee,
??bytescalldata_params
??)
??external
{
??require(_amount<=getBalanceInternal(address(this),_reserve),"借款失败");
??//
??//用借来的?ETH去赚取更多的ETH
过去一周GMX、MAGIC、RDNT分列Arbitrum生态Token交易额前三:2月6日消息,据Nomics数据信息,过去一周GMX、MAGIC、RDNT分列Arbitrum生态Token(排除稳定币)交易额前三,分别为5.08亿美元、0.72亿美元和0.32亿美元。其对应周涨幅为15.15%、50.89%以及78.6%。[2023/2/6 11:49:14]
??//
??//还款
??uinttotalDebt=_amount.add(_fee);
??transferFundsBackToPoolInternal(_reserve,totalDebt);
}
当代码执行到executeOperation时,你已经拿到了借来的钱,你主要是写如何利用这些钱赚取更多钱的逻辑。例如你发现同一个交易对A/ETH在DEX1和DEX2的价格差较大,那么你的赚钱逻辑为:
VeChain 与 TruTrace 合作,将区块链技术整合到制药行业:金色财经报道,VeChain和TruTrace宣布他们将整合到区块链平台的行业列表。TruTrace是一家加拿大SaaS(软件即服务)公司。根据公告,该平台将覆盖TruTrace的合法大麻、食品、服装和制药行业。[2022/9/27 22:31:21]
已借得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相关官方文档,这里就不一一介绍了。
编写闪电贷合约总体并不复杂。使用闪电贷风险也比较小。如果赚钱逻辑失败,变成了亏钱逻辑,不能完成还款,那么也不用担心借来的巨款无力偿还。整个交易将会执行失败,就如同借款从来没有发生过一样。
投资方法有千万种,能不能选对一种对的是最好的选择,如果一点钱也没有的时候,生活不会快乐;如果你有钱那就是投资也不一定是很快乐的事情。钱当然是一个必然的条件,并不是一个充分的条件,选择是很重要.
1900/1/1 0:00:00亲爱的用户:币安将于2020年11月20日15:00上线AXSUSDT1-50倍永续合约。AXSUSDT永续合约是正向合约,即稳定币合约,采用稳定币作为保证金,敬请体验!说明:USDT合约交易规则USDT合约的杠杆和保证金如何切换合约.
1900/1/1 0:00:0011月19日,OKEx一纸公告成为币圈最大看点。当天晚间,该交易所发布公告称,将于11月27日前开放自由提币,同时承诺100%准备金,不会出现挤兑现象。 来源:OKEx官网 这距OKEx暂停提币过去了整整35天.
1900/1/1 0:00:00陆百川11.20比特币早间行情分析及操作策略口说不如身逢,耳闻不如目见,留得五湖明月在,不愁无处下金钩,闹里有钱,静外安身,酒中不语真君子,财上分明大丈夫.
1900/1/1 0:00:00亲爱的用户: DigiFinex将于2020年11月20日11:00(GMT8)下线GAS/USDT和GAS/ETH交易对。请在上述交易对有挂单的用户于2020年11月20日11:00(GMT8)前自行撤单.
1900/1/1 0:00:00链闻消息,法国巴黎银行、法国东方汇理银行、金融机构CaissedesDép?ts以及区块链初创公司Tokeny和TheBlockchainXDEV宣布,将共同探索创建用于分布式账本技术平台的银行间数字货币的潜在用途和影响.
1900/1/1 0:00:00