Uniswap V3 閃電貸回調套利:零本金無手續費套利技巧
來源: @litangsongyx | 原文連結
日期: Fri Apr 25 08:08:04 +0000 2025
標籤:
Uniswap V3閃電貸套利技巧
來源: @litangsongyx (理塘宋亞軒)標籤:
uniswap-v3閃電貸套利零本金回調函數
大佬能鏈上印錢是比我多做了什麼
昨晚大佬的一句話讓我醍醐灌頂,真的不知道什麼樣的腦子才能想出這麼天才的想法,我看有好多兄弟不太明白,我實在憋不住了我想解讀一下大佬的做法。
事情經過
昨天我發了一篇文章:《在冷門小鏈做到頭部套利者能賺多少錢》,講述了去年我在 merlin 做套利的收益。說實話,這個事我一共賺了不到 3 萬 u,但因為我掃到的套利機會我當時應該大多數都拿到了,而且當時也對比了兩三個其他的 searcher,我比他們收益強,我就大言不慚的說我是 merlin 鏈上最大的套利者(其實我一直是這麼認為的😅)。
但現在回想起來,當時一直有一個陰雲籠罩著我:我在日誌裡發現過幾次特別大數額的套利機會,但我都沒有拿到,還有多次幾百 u 的機會,也與我無關,由於我當時套到的大多利潤在 100u 以下,再加上我當時的自建節點經常卡塊,我把這件事解讀為卡塊導致的我本地維護的流動性池狀態不匹配造成的利潤計算錯誤。並且由於當時還在搞別的項目(我在 io 研究作弊),看著有利潤我就沒去細察鏈上的記錄。
直到昨晚有大佬默默在評論區貼出了他的戰績:
臥槽,一筆交易利潤 0.76 個 btc,這是什麼鬼故事,再看他其他的交易記錄,基本是幾十 u 以上的利潤,與我單筆幾 u 的利潤形成了鮮明對比,我才明白過來,有一個幽靈巨鯨一直在 merlin 的上空盤旋,我吃到的只是他漏下的一點殘羹冷飯。
還好大佬心善,還告訴了我一個細節:
當時我真的是想給這個想法跪了,相當於在這告訴我,只要某個鏈上有類 v3 模型,我就可以使用這個方法,除了 gas,我不需要任何本金,uniswap v3 的流動性池就是我的本金庫。
這句話是什麼意思
一般來說,我們做套利需要本金,比如我們算出某個交易機會需要使用 1 個 btc 的本金,如果我們本金不夠怎麼辦?
流動性池提供了一個閃電貸功能,就是可以借給我們這一個 btc,在這筆交易結束時,我們要把這個 btc 還回去,並支付利息,利息是流動性池的手續費,比如這個池子的手續費是千三,那麼我們最後要還回 1.003 個 btc。這樣的話,如果沒有本金,我們雖然依舊可以做套利,但是每一筆都在給流動性池打工,如果這筆交易我賺不來這 0.003 個 btc,對我來說不如不做,這樣就縮小了很多我們的利潤空間。
大佬這個做法相當於卡了個池子的 bug,既用到了閃電貸,又不用支付這筆手續費,我們看看是怎麼做到的。
技術原理
比如你要用 a 幣交換 b 幣,uniswap v3 的 swap 功能是先把 b 幣打給你,然後調用 callback 函數,你要在函數裡實現功能,把 a 幣打到池子裡,之後池子檢測數量對不對,完成整個交易:
uint256 balance1Before = balance1();
IUniswapV3SwapCallback(msg.sender).uniswapV3SwapCallback(amount0, amount1, data);
require(balance1Before.add(uint256(amount1)) <= balance1(), 'IIA');如果整個套利過程是兩個步驟:
- A 幣 從 pool1 換為 B 幣
- B 幣 從 pool2 換為 A 幣
那第一步我們先不讓它完成,我們在回調函數裡做文章。
既然 pool1 已經把 b 幣打給我們了,交易還沒結束,這時候他在等著要我們的 a 幣。
那麼我們可以先拿著 pool1 打給我們的 b 幣,去 pool2 換成 a 幣,先把第二步完成,這時候我們再把 pool2 給我們的 a 幣拿給 pool1。
兩邊賬目結清,交易結束,手上剩的幣就是我們的利潤。
總結
什麼他媽的叫他媽的空手套白狼,這他媽的就是!
這思路真的太牛逼了,昨晚激動的我兩小時沒睡著覺,真得給這想法磕一個。
大佬請原諒我把你這句話發出來,我實在是有點憋不住。