在《明日边缘》中,人类的各种战术对于入侵的外星人都是无效的,因为一旦这种战术生效,外星人在被干掉后就会把时间倒回到战役发生前,整个过程重来一遍。在这个新的时间中,外星人知道什么将会发生,当然也就知道怎么应对。
《明日边缘》宣传语:生死轮回
在区块链中,也有人知道什么将会发生。他们不仅知道未来会发生的事情,他们还可以像《明日边缘》中的外星人一样,利用这种信息去行动,以生成一种对自己有利的未来。
这一切从何说起?就从最近风口浪尖的闪电贷事件开始。
闪电贷事件始末
闪电贷事件中黑客赚钱的方法与你我的方法无异:低点买,高点卖。唯一不同的是黑客知道低点在哪儿、高点在哪儿。他为什么知道?因为马上要把价格拉升起来的人正是他自己。
一个仅用于说明原理的模拟攻击过程是这样的:通过 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 的问题时,我们在谈什么?》,作者:克洛说;