首頁>科技>

套利(Arbitrage)、智慧合約開發(Contract Coding)和樂觀轉賬(Optimistic Transfer)共同 創造了一個令人印象深刻的新工具組合。這是在公共區塊鏈創新之上構建的創新。兩項創新相互融合, 創造了一個真正強大而獨特的獲利機制。 本教程分為兩個部分,在第一部分中,我們將解釋閃電貸(Flash Loan)和閃電兌換(Flash Swap)背後的 一些基本概念。在第二部分中,我們將展示如何構建自己的以太坊套利機器人(Arbitrage Bot), 該機器人在Infura上執行,利用閃電貸捕捉並執行套利機會。

用自己熟悉的語言學習 以太坊DApp開發 : Java | Php | Python | .Net / C# | Golang | Node.JS | Flutter / Dart

1、套利/Arbitrage

套利交易(Arbitrage Trading)並非區塊鏈或閃電貸(Flash Loan)獨有的概念,當你在不同的交易所 擁有相同資產且其價格不同的時候,就有機會利用套利交易獲利。

讓我們以Uniswap和Sushiswap這兩個DEX為例看一下套利的具體工作原理。Sushiswap是Uniswap的一個 分支,這意味著它們在相同的智慧合約程式碼上執行。雖然它們是兩個不同的去中心化交易所,但我們 可以使用相同的程式碼執行相同的交易。另外,由於Sushiswap是較新的交易所,因此支援它的機器人(Bot) 可能更少。

套利的工作原理大致如下:1 ETH在Uniswap中價值80 DAI,而在Sushiswap中則價值100 DAI。那麼我們 在Uniswap上購買1 ETH,然後立即在Sushiswap上出售,就可以賺取20 Dai(扣除汽油和費用之前)。 這就是典型的套利交易。

2、閃電貸 vs. 閃電兌換

閃電貸(Flash Loan)和閃電兌換(Flash Swap)是區塊鏈獨有的概念。上圖顯示了兩者之間的一些 關鍵區別。讓我們進一步說明其中的要點。

閃電貸(Flash Loan)必須以你借入的同一資產償還:如果借入Dai,就需要償還Dai。 生息協議Aave對閃電貸收取0.09%的費用。它至少需要進行三個操作:

在Aave上借款在一個DEX上進行兌換在另一個DEX上進行套利交易以實現利潤

閃電兌換(Flash Swap)允許交易者在交易後期支付(或返還)資產之前,先接收資產 並在其他地方利用該資產。就像在Uniswap上所做的那樣,閃電交換沒有固定費用,而是收取交換費。 與閃電貸相比,閃電兌換可以看作是“免費”貸款,因為兌換手續費是從交易訂單中扣除的,我們不必 單獨付款。最後一點區別:我們可以償還兌換的任何資產。如果我們使用閃電兌換拿ETH買入Dai, 那麼用Dai或ETH償還都可以,這使我們可以執行更復雜的操作。

閃電兌換和閃電貸均採用樂觀轉移(Optimistic Tranfer),這是我們稍後將介紹的一種迷人的技術。

3、閃電貸與智慧合約

需要了解的閃電貸的另一個概念是以太坊交易的性質。所有以太坊交易均源自外部持有帳戶(EOA), 這是一個由人操作的以太坊地址。以太坊交易可以從一個EOA轉到另一個EOA,就像你付錢給朋友一樣。 以太坊交易也可以從EOA轉到智慧合約中執行程式碼。該合約可以呼叫另一個合約,依此類推,直到 你的交易用完GAS為止。

稍後我們將看到,閃電貸在其執行過程中需要進行多次函式呼叫,這對於EOA來說是不可能的。因此, 我們將部署一個包含多步驟流程的智慧合約來實現閃電貸。我們發起的套利交易將從EOA執行到AAVE合約, 只需要提供地址給已部署合約即可。此外,由於閃電貸交易的複雜性,可能導致交易成本很高,因此 我們還需要為EOA賬號提供足以支付交易的GAS成本的ETH。請記住,交易的價格取決於它需要多少計算能力。

4、樂觀轉賬 / Optimistic Transfer

閃電貸和閃電兌換均採用稱為”樂觀轉賬“的技術。這個了不起的DeFi創新技術使使用者可以進行 無抵押貸款或兌換交易,只要使用者在交易結束時還清借款,就可以執行交易。為了更好地理解 這個想法,讓我們看一些程式碼。

這是Aave(V1)的LendingPool.sol 合約的程式碼。讓我們注意flashLoan函式的實現,尤其是以下方法:

在877行中,我們可以看到智慧合約“樂觀地”將資金轉移到使用者的合約中 - 它並沒有檢查使用者合約 的餘額以確保使用者有足夠的資產償還借款,就直接轉賬了。

這怎麼可能?難道使用者不會拿著這些代幣逃跑?好吧,如果這是交易的結束,那麼那將是一個嚴重 的問題。但是正如你所看到的,程式碼還沒有結束。使用者的合約是否保留這些代幣取決於成功執行的 接下來的幾行。

樂觀轉賬後,在第881行,我們看到Aave合約然後使用代幣的樂觀餘額(Optimistic Balance)和 使用者已傳入的任何引數呼叫使用者的合約。這些引數將是使用者需要將其傳遞給其合約的任何東西。 交易成功執行。現在,交易工作流程在Aave合約上暫時中止,並移至使用者的合約繼續執行,該合約 將執行其邏輯並有望成功交易。

在第884行,使用者的合約程式碼已執行完成,工作流程現在返回到Aave合約,該合約使用require語句檢查 使用者合約返回的值。樂觀精神到這裡就結束了,現在我們必須看看使用者合約是否已經執行了有利可圖 的交易!如果是這樣,Aave合約將能夠扣除其費用。如果交易沒有獲利,則該require宣告將失敗, 這意味著整個交易都將失敗,也意味著我們之前的樂觀轉賬實際上並不會發生。

讓我們看一下Uniswap如何實現其樂觀轉賬。這是從他們的UniswapV2Pair.sol合約中獲得的,特別 注意swap函式:

樂觀轉賬發生在170-171行,就是這個_safeTransfer方法。Uniswap甚至給出了這種樂觀轉賬的註釋, 以便更好地識別它(順便說一下,Uniswap提供有關其協議合約的大量文件和教程)。 下一行是Uniswap合約以樂觀餘額呼叫使用者的合約。

再次,假設事務工作流在Uniswap合約上暫停執行,並攜帶樂觀轉移的代幣到使用者合約繼續執行。 一旦執行完使用者合約,交易工作流就會回到Uniswap合約。然後,Uniswap合約分配使用者合約的新餘額, 並嘗試收取兌換手續費(第180-181行)。

如果使用者合約未能透過代幣獲利,則require關於182的宣告將失敗,並且整個交易將回滾。這是 樂觀轉賬的關鍵-100%取決於交易是否成功。如果不成功,則交易無效,並且將恢復為代幣轉讓之前 的狀態。但是,如果成功,則可以保持樂觀轉賬,並且使用者可以獲利。

在本系列的第二部分中,我們將逐步構建一個套利機器人。可以在此處預覽程式碼。

原文連結:http://blog.hubwiz.com/2021/01/23/flashloan-arbitrage-bot-tutorial/

17
最新評論
  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 特斯拉包下全部產能,羅姆擴產5倍,它的定製合同不斷,起飛在即