Front Running:​去中心化交易的阿喀琉斯之踵

買賣虛擬貨幣

Front Running 是 DEX 面臨的普遍問題,也是阻礙 DEX 成為主流選擇的重要原因。

撰文:李畫

致謝:郭宇、孫志鵬、吳為龍、焦慮研究院

在《明日邊緣》中,人類的各種戰術對於入侵的外星人都是無效的,因為一旦這種戰術生效,外星人在被幹掉後就會把時間倒回到戰役發生前,整個過程重來一遍。在這個新的時間中,外星人知道什麼將會發生,當然也就知道怎麼應對。

《明日邊緣》宣傳語:生死輪迴

在區塊鏈中,也有人知道什麼將會發生。他們不僅知道未來會發生的事情,他們還可以像《明日邊緣》中的外星人一樣,利用這種資訊去行動,以生成一種對自己有利的未來。

這一切從何說起?就從最近風口浪尖的閃電貸事件開始。

閃電貸事件始末

閃電貸事件中駭客賺錢的方法與你我的方法無異:低點買,高點賣。唯一不同的是駭客知道低點在哪兒、高點在哪兒。他為什麼知道?因為馬上要把價格拉昇起來的人正是他自己。

一個僅用於說明原理的模擬攻擊過程是這樣的:透過 dYdX 的閃貸功能借入 60 ETH,然後在 Compound 抵押 40 ETH 借出 1 BTC,再用剩下的 20 ETH 在 bZx 加 5 倍槓桿買入 BTC,此槓桿交易的流動性由 Uniswap 提供,導致 Uniswap 上 BTC 對 ETH 的價格猛漲,這時候再把 1 BTC 賣給 Uniswap,假設平均賣價漲了一倍,就能賣出 80 ETH,還掉最初借的 60 ETH,盈利 20 ETH。(真實過程可閱讀文末的參考資料 1、2)

圖自 CryptoLaboratory

可以認為駭客有兩個分身,分身一拉盤(20 ETH × 5 = 100 ETH),分身二獲利(40 ETH),在這個過程中,分身二賺的錢以及 Uniswap 做市商賺的錢加起來應該等於分身一虧的錢,也就是說總體算下來,駭客是賠錢的,但由於 bZx 存在合約漏洞,沒有及時爆分身一的倉,導致 bZx 的儲戶也一起承擔了虧損,而這正是駭客攻擊可以成立的原因。閃電貸在整起事件中的作用只是提供初始資金,使得駭客可以無成本、零風險完成攻擊。

不過,這起攻擊事件本身不是本文關注的核心,講述這個例子是因為它清晰地展現了一件事情:如果知道未來有人會大量買入(市場上會有大的價格波動),就可以在其買入前「埋伏」起來,實現盈利。形象化來說就是:如果 A 計劃買入大量 ETH, B 知道了 A 的購買意圖,就可以搶在 A 之前以當前價格買入 ETH,再以更高的價格賣掉,賺取差額。

在傳統金融市場中,這種行為屬於 Front Running (搶先交易)。Front Running 是指:如果從非公開資訊中預先知道會影響到資產價格的大型交易,就可以搶先買賣以獲得利潤。

它主要包含兩種情況:

交易商在執行客戶買賣委託前,認為客戶的買賣將改變市場價格,因此先替自己的賬戶買賣的行為;

經紀商在自己發表的研究報告尚未廣為散播之前,先行買賣股票的行為。

在鏈上的去中心化交易市場中,Front Running 與上述的第一種情況比較類似,是在得知對方的購買意圖後,搶先完成自己的交易。這種行為在傳統金融市場中是違法的,因為利用的是非公開資訊,但在區塊鏈上很難認定它違法,因為其利用的是「公開」資訊。

由於區塊鏈時間的特殊性,區塊鏈上的未來是可以在發生前被「看見」的,也就是說,我們在一筆交易發生之前便知道這筆交易會發生,就像執行客戶買賣委託的交易商知道買賣會發生一樣。

區塊鏈的時間特殊性

區塊鏈是一個分散式的系統,其最大的問題之一是參與者無法就物理時間達成共識。但為了確定交易順序從而避免雙花,網路參與者們對時間達成共識又非常重要,因此中本聰把工作量證明與最長鏈原則結合在一起,實現時間戳服務:用區塊的先後順序代表時間的先後順序,參與者們只需對區塊順序達成一致即可。可以認為區塊是區塊鏈上的基本時間單位。

那麼,如何把一筆交易的分秒時間單位轉換成區塊時間單位?

交易在被提交後,會進入一個叫做交易池的地方,這裡還有很多其他交易。礦工會從交易池中選擇交易打包進下一個區塊,這些交易有預設的優先次序,物理時間是決定次序的一個因素,但不是最重要的因素,比如礦工費就遠比物理時間重要。只有被選擇進入下一個區塊的交易,才會從分秒時間單位轉換成區塊時間單位,也只有當這種轉換完成後,這筆交易才算真正地在區塊鏈上發生。

不難發現,交易要先在物理時間發生,然後在交易池中等待,最後在區塊鏈上發生。這個不確定的等待過程會導致交易意圖暴露,使得 Front Running 很容易發生。

誰能看見暴露了的交易意圖?最典型的是礦工。礦工是打包交易的人,他們不僅能看見交易,甚至知道哪些交易會進入下一個區塊,以及這些交易在同一區塊中的順序。從技術角度而言,礦工可以透過對交易次序的干預,把自己的交易插入到合適的位置。在 Front Running 這件事上,沒有人比礦工更具優勢。

除了礦工,我們每個人也都可以看到交易意圖。因為交易是先被廣播到網路,然後進入交易池的,而所有人都可以去監聽交易廣播。對於 DEX 上的交易者、交易機器人而言,只需要監控 DEX 上的交易情況,在發現交易意圖後,透過提高交易費的方法讓自己的交易排在前邊,從而完成 Front Running,實現無風險盈利。

但 Front Running 顯然是不公平的,它破壞了正常交易者的交易策略、損害了他們的交易利益。一個不準確但可以說明問題的例子:你計劃從市場購買 100ETH,可能的平均價格是 270 美元 /ETH;但交易機器人發現你的交易意圖後搶先買入,它是以 270 美元 /ETH 價格買的,而你可能就要以拉昇後的 280 美元/ETH 的價格買,多花費 1000 美元。

在這種情況下,人們怎麼可能在 DEX 上進行大規模的交易?每筆交易都有可能被「揩油」。只要 Front Running 存在,DEX 就難成規模。

DEX 上的 Flash Boys

2019 年,活躍的康奈爾大學區塊鏈研究員菲利普•戴安與同事一起發表了一篇論文,名為《Flash Boys 2.0:去中心化交易中的搶先交易,交易重排及不穩定共識》,分析了區塊鏈上的交易機器人透過提高交易費、減少網路延遲進行搶先交易的情況。

Flash Boys 來源於《大空頭》作者邁克爾·劉易斯的《Flash Boys:一場華爾街起義》一書,指代的是華爾街上的一群高頻交易員們。

《Flash Boys:一場華爾街起義》,邁克爾·劉易斯著

區塊鏈上的 Front Running 會被拿來與高頻交易(High Frequency Trading)進行比較,因為它們具有一定的相似性。

高頻交易會在所有交易所放上「誘餌」訂單,這些小額訂單提供最低的賣價和最高的買價,當一筆大交易分拆成多筆交易在多個交易所完成時,它們最先遇到的總是這些誘餌,如此一來其交易意圖就可能暴露(還有其他方法一起預測該交易的情況);與此同時,高頻交易利用更好的技術與更「直」的網線,搶在這筆大交易的其餘部分完成之前,在各個交易所進行相關股票的買賣,然後透過價格差賺錢。

高頻交易究竟有多賺錢?我們可以找到一個有趣的途徑進行反推:劉易斯曾談論過一個為 Citadel 證券工作的人,他每年的薪水是 9000 萬美元,但他後來憤怒地離職了,因為覺得公司沒有給夠他薪酬。

高頻交易和區塊鏈上的 Front Running 都包括兩個基本的組成部分:發現交易意圖,搶先完成交易。只不過前者是透過「誘餌」發現交易意圖,後者是透過監聽發現交易意圖;前者是透過更好的技術把自己的交易提前,後者是透過更高的交易費把自己的交易提前。

兩者的不同之處在於,高頻交易的時間視窗很小,所有人都是以納秒為單位進行賽跑,這對高頻交易系統有著極高的要求;而區塊鏈上的 Front Running 基本只受交易費的影響,出的錢越多,就越能跑到前邊。

總體而言,從交易的手法來說,區塊鏈上 Front Running 更接近於傳統金融市場中的高頻交易,只不過用更高的交易費代替了更「直」的網線。從性質、不公平的程度,以及對市場的傷害而言,它則更接近於傳統金融市場中的 Front Running,只不過在區塊鏈上這種交易行為算不上違法,因此也不能被禁止。

解決之道

避免去中心化交易中的 Front Running 問題,需要從 DEX 本身的設計入手。不同特點的 DEX 協議,可能會發展出不同的方法。

荷蘭拍模式的 DEX 協議很難發生 Front Running,典型的代表是 DutchX,交易間的競爭主要基於價格而不是基於「時間」,且這些交易都以相同的價格被執行,Front Running 無利可圖。不過由於荷蘭拍完成的時間較長,對時間敏感的交易需求無法透過 DutchX 滿足。

自動化做市模式的 DEX 協議較難阻擊 Front Running,比如 Uniswap,它根據可用的流動性自動調整價格,交易的大小對報價有較大影響,而交易的順序就決定了成交的價格。為了減少 Front Running 帶來的破壞,Uniswap 採用的方法是允許使用者指定交易的最高價格,這樣一來使用者可能無法完成交易,但不會以難以接受的高價完成交易。不過這是一種權宜之計,真正解決問題的方法還需要進一步被探索。

目前應用最廣泛的、基於訂單簿模式的 DEX 協議,在對抗 Front Running 的難易程度上基於前兩類協議之間。可以透過對 DEX 的設計來減少 Front Running 的影響:已經被應用的方法是引入一些中心化,比如由管理員在鏈下完成訂單的匹配,並限制只允許管理員最終提交至鏈上進行結算;正在發展中的方法是利用零知識證明,隱藏交易者的交易意圖。根據已有的經驗,用密碼學的方法來解決區塊鏈上的問題似乎是比較理想的途徑。

Front Running 是 DEX 面臨的普遍問題,也是阻礙 DEX 成為主流選擇的重要原因。但隨著技術的發展,我們有可能規避或控制 Front Running。本文討論的是 DEX 的問題,但這些問題並不能用來證明 DEX 不是一種好的選擇,我們討論它,恰恰因為它值得討論。

參考資料

《Bzx 閃電貸事件之套利邏輯,盈虧分析和敏感度測試》,作者:天然;

《PeckShield:硬核技術解析,bZx 協議遭駭客漏洞攻擊始末》,作者:PeckShield;

《閃電貸:一筆以太坊交易能做什麼?》,作者:阿劍;

《談去中心化交易所 Front-Running 的問題時,我們在談什麼?》,作者:克洛說;https://bihu.com/article/1695326980

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;