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

编者按:本文来自链闻,撰文:李画,Odaily星球日报经授权转载。在《明日边缘》中,人类的各种战术对于入侵的外星人都是无效的,因为一旦这种战术生效,外星人在被干掉后就会把时间倒回到战役发生前,整个过程重来一遍。在这个新的时间中,外星人知道什么将会发生,当然也就知道怎么应对。

《明日边缘》宣传语:生死轮回在区块链中,也有人知道什么将会发生。他们不仅知道未来会发生的事情,他们还可以像《明日边缘》中的外星人一样,利用这种信息去行动,以生成一种对自己有利的未来。这一切从何说起?就从最近风口浪尖的闪电贷事件开始。闪电贷事件始末

闪电贷事件中黑客赚钱的方法与你我的方法无异:低点买,高点卖。唯一不同的是黑客知道低点在哪儿、高点在哪儿。他为什么知道?因为马上要把价格拉升起来的人正是他自己。一个仅用于说明原理的模拟攻击过程是这样的:通过dYdX的闪贷功能借入60ETH,然后在Compound抵押40ETH借出1BTC,再用剩下的20ETH在bZx加5倍杠杆买入BTC,此杠杆交易的流动性由Uniswap提供,导致Uniswap上BTC对ETH的价格猛涨,这时候再把1BTC卖给Uniswap,假设平均卖价涨了一倍,就能卖出80ETH,还掉最初借的60ETH,盈利20ETH。

图自CryptoLaboratory可以认为黑客有两个分身,分身一拉盘,分身二获利,在这个过程中,分身二赚的钱以及Uniswap做市商赚的钱加起来应该等于分身一亏的钱,也就是说总体算下来,黑客是赔钱的,但由于bZx存在合约漏洞,没有及时爆分身一的仓,导致bZx的储户也一起承担了亏损,而这正是黑客攻击可以成立的原因。闪电贷在整起事件中的作用只是提供初始资金,使得黑客可以无成本、零风险完成攻击。不过,这起攻击事件本身不是本文关注的核心,讲述这个例子是因为它清晰地展现了一件事情:如果知道未来有人会大量买入,就可以在其买入前「埋伏」起来,实现盈利。形象化来说就是:如果A计划买入大量ETH,B知道了A的购买意图,就可以抢在A之前以当前价格买入ETH,再以更高的价格卖掉,赚取差额。在传统金融市场中,这种行为属于FrontRunning。FrontRunning是指:如果从非公开信息中预先知道会影响到资产价格的大型交易,就可以抢先买卖以获得利润。它主要包含两种情况:交易商在执行客户买卖委托前,认为客户的买卖将改变市场价格,因此先替自己的账户买卖的行为;经纪商在自己发表的研究报告尚未广为散播之前,先行买卖股票的行为。在链上的去中心化交易市场中,FrontRunning与上述的第一种情况比较类似,是在得知对方的购买意图后,抢先完成自己的交易。这种行为在传统金融市场中是违法的,因为利用的是非公开信息,但在区块链上很难认定它违法,因为其利用的是「公开」信息。由于区块链时间的特殊性,区块链上的未来是可以在发生前被「看见」的,也就是说,我们在一笔交易发生之前便知道这笔交易会发生,就像执行客户买卖委托的交易商知道买卖会发生一样。区块链的时间特殊性

区块链是一个分布式的系统,其最大的问题之一是参与者无法就物理时间达成共识。但为了确定交易顺序从而避免双花,网络参与者们对时间达成共识又非常重要,因此中本聪把工作量证明与最长链原则结合在一起,实现时间戳服务:用区块的先后顺序代表时间的先后顺序,参与者们只需对区块顺序达成一致即可。可以认为区块是区块链上的基本时间单位。那么,如何把一笔交易的分秒时间单位转换成区块时间单位?交易在被提交后,会进入一个叫做交易池的地方,这里还有很多其他交易。矿工会从交易池中选择交易打包进下一个区块,这些交易有默认的优先次序,物理时间是决定次序的一个因素,但不是最重要的因素,比如矿工费就远比物理时间重要。只有被选择进入下一个区块的交易,才会从分秒时间单位转换成区块时间单位,也只有当这种转换完成后,这笔交易才算真正地在区块链上发生。不难发现,交易要先在物理时间发生,然后在交易池中等待,最后在区块链上发生。这个不确定的等待过程会导致交易意图暴露,使得FrontRunning很容易发生。谁能看见暴露了的交易意图?最典型的是矿工。矿工是打包交易的人,他们不仅能看见交易,甚至知道哪些交易会进入下一个区块,以及这些交易在同一区块中的顺序。从技术角度而言,矿工可以通过对交易次序的干预,把自己的交易插入到合适的位置。在FrontRunning这件事上,没有人比矿工更具优势。除了矿工,我们每个人也都可以看到交易意图。因为交易是先被广播到网络,然后进入交易池的,而所有人都可以去监听交易广播。对于DEX上的交易者、交易机器人而言,只需要监控DEX上的交易情况,在发现交易意图后,通过提高交易费的方法让自己的交易排在前边,从而完成FrontRunning,实现无风险盈利。但FrontRunning显然是不公平的,它破坏了正常交易者的交易策略、损害了他们的交易利益。一个不准确但可以说明问题的例子:你计划从市场购买100ETH,可能的平均价格是270美元/ETH;但交易机器人发现你的交易意图后抢先买入,它是以270美元/ETH价格买的,而你可能就要以拉升后的280美元/ETH的价格买,多花费1000美元。在这种情况下,人们怎么可能在DEX上进行大规模的交易?每笔交易都有可能被「揩油」。只要FrontRunning存在,DEX就难成规模。DEX上的FlashBoys

2019年,活跃的康奈尔大学区块链研究员菲利普?戴安与同事一起发表了一篇论文,名为《FlashBoys2.0:去中心化交易中的抢先交易,交易重排及不稳定共识》,分析了区块链上的交易机器人通过提高交易费、减少网络延迟进行抢先交易的情况。FlashBoys来源于《大空头》作者迈克尔·刘易斯的《FlashBoys:一场华尔街起义》一书,指代的是华尔街上的一群高频交易员们。

《FlashBoys:一场华尔街起义》,迈克尔·刘易斯著区块链上的FrontRunning会被拿来与高频交易进行比较,因为它们具有一定的相似性。高频交易会在所有交易所放上「诱饵」订单,这些小额订单提供最低的卖价和最高的买价,当一笔大交易分拆成多笔交易在多个交易所完成时,它们最先遇到的总是这些诱饵,如此一来其交易意图就可能暴露;与此同时,高频交易利用更好的技术与更「直」的网线,抢在这笔大交易的其余部分完成之前,在各个交易所进行相关股票的买卖,然后通过价格差赚钱。高频交易究竟有多赚钱?我们可以找到一个有趣的途径进行反推:刘易斯曾谈论过一个为Citadel证券工作的人,他每年的薪水是9000万美元,但他后来愤怒地离职了,因为觉得公司没有给够他薪酬。高频交易和区块链上的FrontRunning都包括两个基本的组成部分:发现交易意图,抢先完成交易。只不过前者是通过「诱饵」发现交易意图,后者是通过监听发现交易意图;前者是通过更好的技术把自己的交易提前,后者是通过更高的交易费把自己的交易提前。两者的不同之处在于,高频交易的时间窗口很小,所有人都是以纳秒为单位进行赛跑,这对高频交易系统有着极高的要求;而区块链上的FrontRunning基本只受交易费的影响,出的钱越多,就越能跑到前边。总体而言,从交易的手法来说,区块链上FrontRunning更接近于传统金融市场中的高频交易,只不过用更高的交易费代替了更「直」的网线。从性质、不公平的程度,以及对市场的伤害而言,它则更接近于传统金融市场中的FrontRunning,只不过在区块链上这种交易行为算不上违法,因此也不能被禁止。解决之道

避免去中心化交易中的FrontRunning问题,需要从DEX本身的设计入手。不同特点的DEX协议,可能会发展出不同的方法。荷兰拍模式的DEX协议很难发生FrontRunning,典型的代表是DutchX,交易间的竞争主要基于价格而不是基于「时间」,且这些交易都以相同的价格被执行,FrontRunning无利可图。不过由于荷兰拍完成的时间较长,对时间敏感的交易需求无法通过DutchX满足。自动化做市模式的DEX协议较难阻击FrontRunning,比如Uniswap,它根据可用的流动性自动调整价格,交易的大小对报价有较大影响,而交易的顺序就决定了成交的价格。为了减少FrontRunning带来的破坏,Uniswap采用的方法是允许用户指定交易的最高价格,这样一来用户可能无法完成交易,但不会以难以接受的高价完成交易。不过这是一种权宜之计,真正解决问题的方法还需要进一步被探索。目前应用最广泛的、基于订单簿模式的DEX协议,在对抗FrontRunning的难易程度上基于前两类协议之间。可以通过对DEX的设计来减少FrontRunning的影响:已经被应用的方法是引入一些中心化,比如由管理员在链下完成订单的匹配,并限制只允许管理员最终提交至链上进行结算;正在发展中的方法是利用零知识证明,隐藏交易者的交易意图。根据已有的经验,用密码学的方法来解决区块链上的问题似乎是比较理想的途径。FrontRunning是DEX面临的普遍问题,也是阻碍DEX成为主流选择的重要原因。但随着技术的发展,我们有可能规避或控制FrontRunning。本文讨论的是DEX的问题,但这些问题并不能用来证明DEX不是一种好的选择,我们讨论它,恰恰因为它值得讨论。参考资料《Bzx闪电贷事件之套利逻辑,盈亏分析和敏感度测试》,作者:天然;《PeckShield:硬核技术解析,bZx协议遭黑客漏洞攻击始末》,作者:PeckShield;《闪电贷:一笔以太坊交易能做什么?》,作者:阿剑;《谈去中心化交易所Front-Running的问题时,我们在谈什么?》,作者:克洛说;

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

大币网

[0:0ms0-3:599ms