閃電貸是DeFi中一個獨特的產品,在傳統金融活動中沒有與之對應的事物。會編寫和使用閃電貸也是一項很重要的技能。
概念
閃電貸是一種無抵押、借貸金額無上限的貸款。它要求借貸人快借快還,快到還款和借款在同一個交易內。
閃電貸要求每筆借款在歸還時,除了歸還本金,還要支付一定利息。該利息由系統動態計算。
實現?
很多人對理解閃電貸有一定的難度。因為這需要了解智能合約執行原理和以太坊狀態變化的機制。我們通過自己編寫一個閃電貸合約,來理解其背后的運行原理。
以使用Aave提供的閃電貸為例,編寫一個你自己的合約非常簡單,你只需要實現一個叫?executeOperation的方法。
1.executeOperation
executeOperation方法參數中_reserve?是所借代幣的合約地址,如果是ETH則是一個特殊的地址,_amount是借款的金額,_fee是本次借款要償還的利息。_params暫時可忽略。
馬斯克將Twitter的鳥類標志替換為狗狗幣標志被作為訴訟證據提出:金色財經報道,馬斯克將Twitter的鳥類標志替換為狗狗幣標志被作為訴訟證據提出,5月31日修訂的法律案件強調了有關馬斯克的加密貨幣交易和促銷活動的新事實和證據。原告在文件中指出,馬斯克曾短暫地將Twitter的鳥類標志替換為狗狗幣標志。這恰逢DOGE價格上漲30%,然后在恢復原始標識后下跌。[2023/6/2 11:53:40]
functionexecuteOperation(
??address_reserve,
???uint256_amount,
???uint256_fee,
??bytescalldata_params
??)
??external
{
OKX現已支持Core主網:1月14日消息,OKX現已支持Core主網,即將上線 Coreum(CORE)進行現貨交易。OKX介紹,Core是一個L1鏈,結合了EVM鏈的可組合性以及比特幣的去中心化和安全性。[2023/1/14 11:12:04]
??require(_amount<=getBalanceInternal(address(this),_reserve),"借款失敗");
??//
??//用借來的?ETH去賺取更多的ETH
??//
??//還款
??uinttotalDebt=_amount.add(_fee);
??transferFundsBackToPoolInternal(_reserve,totalDebt);
礦企CipherMining將通過ATM增發2.5億美元的股票:9月24日消息,CipherMining計劃通過ATM方式增發2.5億美元的股票,投資銀行H.C.溫賴特(H.C.Wainwright)將擔任Cipher股票的銷售代理。所謂ATM(at-the-market)增發是指上市公司為了在一段時間內籌集資金而進行的后續股票發行。在ATM發行中,上市公司通過指定的經紀人,以當時的市場價格,逐步向二級交易市場出售新發行的股票。(coindesk)[2022/9/24 7:18:01]
}
當代碼執行到executeOperation時,你已經拿到了借來的錢,你主要是寫如何利用這些錢賺取更多錢的邏輯。例如你發現同一個交易對A/ETH在DEX1和DEX2的價格差較大,那么你的賺錢邏輯為:
已借得100ETH;
在價格低的DEX1中買入A;
GameFi基礎設施平臺HubGame獲Funverse基金1000萬美元投資承諾:金色財經報道,GameFi基礎設施平臺Hub Game宣布獲得Funverse基金1000萬美元投資承諾,旨在為區塊鏈游戲行業帶來更多有價值的變化。據悉,HubGame多合一平臺提供支付網關、錢包、NFT市場、交易和DeFi等服務,目前旗下覆蓋50款NFT游戲,讓用戶GameFi投資體驗更加無縫、安全和有效。本次投資方Funverse Capital是手機游戲發行商Funtap推出的投資基金,專注于為NFT游戲和區塊鏈初創公司提供支持。(bsc.news)[2022/9/17 7:03:01]
在價格高的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:00GalaxyDigital創始人兼首席執行官MikeNovogratz在接受采訪時表示,除穩定幣以外,加密貨幣的增長主要歸功于這些獨立項目背后的社區,而許多較小的加密貨幣沒有這些社區.
1900/1/1 0:00:00現在時間是2020.11.21日3:53分,最近呀,我在回看ahr999屯幣指數發明人,就是那個匿名大神他在2018年9月20號寫的一篇文章,這篇文章時隔兩年再看一遍依然有收獲.
1900/1/1 0:00:00尊敬的ZT用戶:ZT創新板即將上線ABEL,并開啟ABEL/USDT交易對。神燈計劃已達到500人充值要求.
1900/1/1 0:00:00根據Glassnode的最新數據表明,關鍵的鏈上指標挖礦收入)已恢復到減半水平,現在礦工們的收入相比剛剛減半時達到了翻倍的水平。當五月中旬減半時,BTC價格約為9,000美元.
1900/1/1 0:00:00尊敬的OKEx用戶: 為了更好地為平臺商家服務,不斷改進并優化商家權益,我們將對平臺認證/大宗商家保證金制度進行更靈活的調整.
1900/1/1 0:00:00