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


可以认为黑客有两个分身,分身一拉盘(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:去中心化交易中的抢先交易,交易重排及不稳定共识》,分析了区块链上的交易机器人通过提高交易费、减少网络延迟进行抢先交易的情况。


区块链上的 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 不是一种好的选择,我们讨论它,恰恰因为它值得讨论。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353