如何用 Python 從 Defi 套利

pwl.eth
·
·
IPFS
·
Photo by Kanchanara on Unsplash

前提是你的程式夠快

TL;DR

  • 主要賺錢方式就是找到價差進行套利
  • 價差可能發生在不同交易所之間,或是有人掛大單前後
  • 沒有本金可以用fashloan或是flashswap,在無抵押品情況下借出大量資金,只需負擔手續費


什麼是 Python?

如果你不知道什麼是Python,我相信你是走錯棚了,很抱歉浪費你的時間🙇🏻‍♂️

什麼是 Defi?

全名 Decentralized finance 去中心化金融,如果你需要先知道什麼是區塊鏈以及智能合約。簡單來講 Defi 就是把交易的規則都寫好,然後把所有的資訊都儲存在區塊鏈上,如果要使用 Defi 交易,可以透過 Defi 項目官方提供的網頁,或是直接對部署在鏈上的合約進行交易,由於所有東西都在鏈上,所以交易所目前有多少代幣,有哪些交易紀錄,都可以直接在鏈上查到。

可以賺到多少錢?

上圖是我 4/12 從 Fantom 鏈上有名的機器人裡面挑的一筆交易,首先他用9785 個 WFTM 在 SpookySwap 換了約 2.26 個 TSHARE,之後把這些 TSHARE 在 TombSwap 換成約 11540 個 miMATIC,最後再把這些 miMATIC 從 SpiritSwap 換回約 9835 個 WFTM。從交易地址就可以查是在哪個交易所換的。

Fantom 從發出交易到實際執行大約 3 秒,以今天 WFTM 幣價約 1.15 美元來算,可以說他 3 秒鐘賺了約 57.5 美元。實際付出的成本是交易費用 0.083 FTM,大概是 0.1 美元。

由於執行交易或是智能合約無論成功與否都需要付出手續費,可以賺的利潤大概是價差減手續費,像 Ethereum 這種手續費(Gas Fee)上看幾十美金的鏈能套利的空間就不多,且需要負擔的風險較高,目前可能多數 Defi 玩家會選擇在 Polygon, BSC, Avalanche, Fantom 之類手續費低廉的鏈上套利。

Defi 的一般交易流程

假設你想要在 SpookySwap 用手上的 FTM 換成 USDC 如下圖,當你按下 Swap 之後你的 MetaMask 會問你是否要送出這個 tx (transaction)?在送出交易的時候會選擇你願意負擔的手續費。按確認之後這筆 tx 會進到一個等待被執行的池叫 txpool,區塊鏈驗證者會依照 txpool 中手續費價格(Gas Price)高到低依序執行,也就是願意付出高額手續費你的交易就會越快被執行。

如果今天有 1000 筆 tx 卡在 txpool 等待執行,新進的 tx 可以透過付出更高額的手續費插隊提前被執行,也就會發生 front running 故意付出比特定 tx 更高一點點的手續費在他之前被執行,跟 back running 故意付出相同手續費,緊貼在某個交易之後執行。

如何找到最大套利空間?

為什麼會說最大?因為大量買進賣出也會影響價格。下圖是用1個 FTM 換 DAI 跟100,000個 FTM 換 DAI,收到數量比例的差異,可以順便注意一下這邊的 Fee 指的是去中心化交易所跟你收的手續費,根據交易所不同大約會收0.2 ~ 0.5%,並不是在鏈上執行交易的手續費。

計算細節有點太長另外開了一篇文章

沒有本金怎麼辦?

這邊就要介紹到區塊鏈上特殊的貸款方式 FlashLoan 或是 Flashswap,一般傳統金融如果要貸款通常是需要抵押品,並且可能是借款之後一陣子不需要錢了再連同借款利息一起償還。Flashloan 跟傳統借款不同的地方在於不需要抵押品,並且借款跟還款在同一個 tx 發生。

這邊要講到鏈上的一筆交易可以包含很多步驟,一筆交易中如果有其中一個步驟失敗,那這筆交易就是失敗,並且已經消耗的手續費不會退回。執行合約的一個function也可以是一筆交易,那flashloan如何做到借你錢,然後讓你執行function,然後確保你會還錢和利息呢?

答案是:把你借款之後要做什麼的 function 用 callback function 的形式交給他,由他來執行借款+callback function+確認還款,確保借款跟還款在同個transaction內。不知道什麼是callback function就請自己去搜尋吧。

  • Aave FlashLoan 利息為 0.09%
  • Uniswap 系列跟給交易所手續費一樣約0.2~0.5%,優點是可以借 A 還 B。

總結一下所有的費用

  • 在鏈上交易的手續費 Gas Fee = (Gas Price)*(Gas Used),Gas Price 用來決定被執行的優先順序
  • 每次Swap需要付給去中心化交易所手續費,A 換 B 再 B 換 C 就會收兩次。
  • FlashLoan利息,或是FlashSwap費用。FlashSwap用得好可以當作是零手續費
  • 套利空間需要大於以上費用加總才值得套利。

那如何用 Python 實際執行?

如果要完整的教學可能要寫超級長,實際步驟大概長這樣,細節就自行努力吧。

  1. 下載web3套件然後checkout到有Async contract的版本,沒有Async應該是搶不贏。
  2. 根據所有token組合,用去中心化交易所的factory contract找是否存在交易對。
  3. 透過搜尋到的 pair contract 取得最新的 token reserves 用來計算A換B數量,建立Map。
  4. 監視最新的 block 是否有Sync Event,代表有交易對的 token reserves 有變,更新Map。
  5. 看是要 DFS 還是其他路徑搜尋的演算法,搜尋是否存在套利空間,有的話就執行自己寫好的智能合約,我可以告訴你 DFS 換四次以內搜尋時間還可以,超過就太久了。
  6. 沒有的話就回到步驟 4 繼續。

在 Fantom 上實際執行目前很難搶贏 back running 的機器人,他們會監視txpool,如果有看到 pending 的 tx可能會產生交易空間,就直接尾隨。

另外是使用公開的驗證節點會因為網路的 latency 讓你打不贏其他機器人,要贏會需要自架節點。

講了這麼多是有賺到錢嗎?

還沒🥲,但我已經看得到賺錢的機器人的車尾燈了。從一些 Discord 群來看 Fantom 應該真的難,但 Polygon 跟 BSC,應該都沒這麼競爭,我也不懂我怎麼就這麼會挑,一入坑就入最難的🥲。

目前看起來 Fantom 前三名的機器人就吃掉 99.9%的套利空間了。

以下是學習資源的整理

感謝收看,歡迎抖內 0xd0DfA05677c4E38B49Cfa6bB3a90a7E587A70fC0

CC BY-NC-ND 2.0 授权

喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!

pwl.eth#Ethereum #Fantom