闪电贷是DeFi中一个独特的产品,在传统金融活动中没有与之对应的事物。会编写和使用闪电贷也是一项很重要的技能。
概念
闪电贷是一种无抵押、借贷金额无上限的贷款。它要求借贷人快借快还,快到还款和借款在同一个交易内。
闪电贷要求每笔借款在归还时,除了归还本金,还要支付一定利息。该利息由系统动态计算。
实现?
很多人对理解闪电贷有一定的难度。因为这需要了解智能合约执行原理和以太坊状态变化的机制。我们通过自己编写一个闪电贷合约,来理解其背后的运行原理。
以使用Aave提供的闪电贷为例,编写一个你自己的合约非常简单,你只需要实现一个叫?executeOperation的方法。
1.executeOperation
executeOperation方法参数中_reserve?是所借代币的合约地址,如果是ETH则是一个特殊的地址,_amount是借款的金额,_fee是本次借款要偿还的利息。_params暂时可忽略。
Web3应用程序Kresus推出加密和NFT钱包:金色财经报道,Web3应用程序Kresus在iOS应用商店上线加密和NFT钱包SuperApp Kresus。每个Kresus用户将获得Kresus Web3 ID,可通过信用卡或Apple pay购买加密货币。
此前3月报道,Web3应用程序Kresus筹集到2500万美元A轮融资,LibertyCity Ventures领投。[2023/5/12 14:59:34]
functionexecuteOperation(
??address_reserve,
???uint256_amount,
???uint256_fee,
??bytescalldata_params
??)
??external
Chainge Finance推出Chainge WEB 提升跨链聚合去中心化交易体验:据官方消息,Chainge Finance宣布其Chainge WEB APP正式上线,该平台为用户提供最具流动性的跨链聚合去中心化交易场所,支持多条链的数字资产跨链互换。用户可以通过Chainge WEB APP轻松进行跨链互换和套利,享受跨链流动性聚合带来的最佳交易价格。此次上线有助于加强区块链生态系统的互操作性,提升用户交易体验。作为区块链行业的领先者之一,Chainge Finance将继续推动区块链技术的创新和发展,为用户创造更多价值。[2023/4/11 13:56:09]
{
??require(_amount<=getBalanceInternal(address(this),_reserve),"借款失败");
??//
Sei Labs正以4亿美元估值进行A轮融资:金色财经报道,据 The Block 援引消息人士报道,Sei Network 开发公司 Sei Labs 正以 4 亿美元代币估值进行 A 轮融资。Sei Labs 联合创始人 Jayendra Jog 表示,Sei Network 预计将在未来几个月启动主网并进行空投。[2023/2/27 12:32:13]
??//用借来的?ETH去赚取更多的ETH
??//
??//还款
??uinttotalDebt=_amount.add(_fee);
??transferFundsBackToPoolInternal(_reserve,totalDebt);
}
当代码执行到executeOperation时,你已经拿到了借来的钱,你主要是写如何利用这些钱赚取更多钱的逻辑。例如你发现同一个交易对A/ETH在DEX1和DEX2的价格差较大,那么你的赚钱逻辑为:
西安19项举措拓展数字人民币应用场景:金色财经报道,由西安市金融工作局、人行西安分行营管部联合印发的《西安市2022年加快数字人民币场景拓展应用工作方案》出台。该方案将通过19项具体工作举措,积极扩大数字人民币在政府端的试点场景应用,带动企业端、商户端、消费端和“三农”、普惠金融等特色场景拓展。
据悉,西安市于2020年11月25日被列为全国数字人民币试点城市。今年上半年,全市共开立数字人民币个人钱包2263.92万个、对公钱包163.01万个;正式投产场景46.08万个、商户门店21.26万个;流通交易2736.12万笔、金额63.67亿元。(西安发布)[2022/7/15 2:15:30]
已借得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尊敬的ZT用户:ZT创新板即将上线ABEL,并开启ABEL/USDT交易对。神灯计划已达到500人充值要求.
1900/1/1 0:00:00对期货合约交易有信心吗?现数交所联合CAE项目推出全币种合约CAE币种交易排行争霸赛,4000枚CAE点燃全币种合约交易热情!最高100倍杠杆,连续7天决出10位合约最强王者.
1900/1/1 0:00:00亲爱的用户:币安“质押借币”平台新增可借资产EUR、DASH及新增DAI质押。注意:币安会根据市场实际运行情况和风险程度动态调整,可借币种/质押币种/利率/最大可借额度等参数.
1900/1/1 0:00:00OKEx暂停提币危机近期可能会看到解决的曙光。OKEx数据显示,OKEx平台币OKB从11月18日晚开始自4.8USDT开始一路上涨,19日上午涨至5.738USDT,涨幅高达19.5%.
1900/1/1 0:00:00比特币又杀回来了?周三,比特币短暂飙升至1.8万美元上方,短短十天里,币价势如破竹,接连突破了1.5万美元、1.6万美元和1.7万美元的整数关口.
1900/1/1 0:00:00