浅析降低以太坊交易费的方法

这篇文章我主要想分析一下现在以太坊交易费居高不下的原因并介绍几种现有的解决方案。

1. 背景知识

1.1 交易流程

首先,我想快速介绍一下以太坊交易的流程。当你通过钱包和区块链应用交互时,钱包就会自动产生并广播这一笔交易。广播就意味着这笔交易的信息对任何人都公开了,但它并不意味着这笔交易已经被执行并被上传到了区块上面。当前这笔交易还只是请求,被存放在交易池里面,等待被矿工打包并生成区块。矿工在这个过程中会根据用户提供的交易费高低来给交易排序,交易的价格越高越能更早地被执行。

1.2 套利交易

这整套流程本身是很合理的,但随着交易的数量逐渐增多,其中有利可图的交易也逐渐变多。最为普遍的一种获取利益的方式就是通过套利交易。它的含义是利用资产在不同的交易平台上面价格不一的现状,通过低买高卖去获利。下图中这比交易就是一个很好的例子,这个人最开始有1000个WETH,通过在uniswap上面和dai 交换,他最后获得了1045个WETH。

套利交易实例
套利交易实例

1.3 最大可提取价值

通过上面这个例子,我们可以看出来链上的很多交易都是有其内在价值的,比如上面这两笔交易就价值45个WETH。这部分利润是会送给第一个发现并把成功把它上传到区块的人。这就引出了最大可提取价值(MEV)这个概念。MEV 就是指在生成区块过程中通过重新排序交易、穿插或审查交易而提取的总价值。目前以太坊上的 MEV 可提取价值主要由 DeFi 交易者和套利机器人通过交易排序相关交易策略进行,交易中的一小部分价值通过 gas fee的形式由矿工获取。

2 存在的问题

总体来讲,对这些利润或者说是价值的追求,导致了很多套利机器人相互竞价,因此gas fee才会一直升高。还是那上面的那个套利的例子举例,第一个实现这笔套利的人可以获得45个WETH,但如果有人为了获利,愿意多出10个WETH的gas fee,那么他就可以提前完成交易,获得35个WETH的利润。只要还剩余些利润,那么就会不断有人加价。跟据flashbot提供的信息来看,现在每天差不多有14.5万美刀的MEV被生成。

2.1 抢先交易

目前市面上主要有两种抢夺MEV的方法,其中一类做法叫做抢先交易。因为矿工都会倾向于打包gas fee高的交易,因此在一笔正常交易等待打包的过程中,如果抢跑机器人发现它有利可图,那么他会通过设置更高 gas fee 来抢先完成它。下图展示了一个可以实时地看到当前交易池里面的交易的网页

交易池实时信息
交易池实时信息

关于这类抢先交易最为经典的例子来源于以太坊是一片黑暗森林这篇文章的作者。他说以太坊是黑暗森林是因为会有各式各样的套利机器人随时在监控交易池,抓住一切机会去抢劫交易者。这个故事大概是说某一天他发现当任何人调用Uniswap核心合约上的burn函数时,该合约会测量自己的流动性代币余额并将其烧掉,将提取的代币提供给调用者指定的地址。当时如果这样子做的话会获得$12000。作者决定去拿回这笔钱并返回给官方,他专门部署了两个合约去很隐蔽地做这件事,但最终还是被一个套利机器人抢先完成了交易。

2.2 三明治攻击

除了抢先交易之外另一种很普遍的获得MEV的方法就是通过三明治攻击。这种攻击方法就是利用了自动化做市商的一些特性。不同于股票交易有中心化的交易所,用户提出自己的报价,买卖各显示最接近的5档然后相互匹配,区块链交易是通过去中心化的做市商完成的。如果要提供两种token的兑换,那就需要把它们装进一个流动性池里。而汇率,根据uniswap的定义方法是说: x*y = k x和y分别代表两种token在流动性池中的数目,k为一个常数,这就代表token数目的乘机永远是一个定值。下图展示了一个汇率变化的实例,假设初始时两种token都有50个,汇率为1:1。如果有人用10个A去兑换B,那么为了保证乘机一致,B需要有41.6个,汇率因此也就变成了1:1.19。如果有人继续以40个A去兑换B,那么汇率会继续变大为1:2.4。

滑点介绍
滑点介绍

这种汇率因为交易而实时变化的现象叫做滑点。因为有滑点这种特性,就有套利机器人通过三明治攻击去获取利益。这种攻击方法的定义就是攻击者在受害者前后各生成一笔交易,试图前后夹击受害者。这张图就是一个很好的例子,第一笔和第三笔交易是黑客的,他在最开始买入,这样子受害者买入时价格会变高。同时受害者买入也会进一步提高token的价格,也就可以保证他在最后可以比较高的价格去卖掉token。

三明治攻击
三明治攻击

从目前的数据上来看,自 2020 年一月以来,MEV 行为平均至少占用以太坊 3% 网络空间,失败的 MEV 交易浪费的网络资源大概等于以太坊 4500 个区块。

3 解决方案

针对这种高gas fee的现状,目前已经有不少人提出了自己的解决方案,下面我会介绍其中的四种。

3.1 KeeperDAO

我最喜欢的一个项目叫做 KeeperDAO。这个项目本质上来说是一个流动性提供商,从清算和套利活动中获得收益和现金流。它提供了包括以太坊,比特币在内的这5种token的流动性。它赚钱的方式就是鼓励用户用流动性池里面的钱为本金去做套利交易。这个项目的愿景是说现在以太坊网络中各种套利机器人他们之间相互竞争,是处于一种零和游戏,这也就导致了高gas fee。因此比起把钱都耗在gas war上面,不如大家把钱合在一起,一起寻找获利的机会。在理想情况下,如果说每一个套利机器人都同意不采取竞价的方法,那么它们从每一个交易中获得的利润都会更大。这就是这个组织的最终目标,他们也创建KeeperDAO这个去中心化自治协议来监督。

KeeperDAO资金池
KeeperDAO资金池

这个项目把所有用户分为两类,第一类叫做流动性提供者(liquidity provider),大家就可以理解为是咱们普通交易者。他们把资金存入资金池中来获取利息。另一类用户就叫做守护者(keeper),他们就是套利机器人或者那些做抢先交易,三明治攻击的人。他们的目的就是利用资金池的资金去获取更多的MEV。所以这两类用户的关系就相当于是流动性提供者出资金,然后keeper出去投资,赚了钱之后收益大家分享。

这个项目的愿景是好的,有钱的出钱,有力的出力。接下来需要考虑的问题就是如何才能让大家相信这个项目可以成功,自己加进来有利可图呢?为此项目方发行了它们的代币 ROOK。它的首要作用就是提供激励,不管是提供流动性还是keeper赚取了新的收益,都会收到ROOK作为奖励。而同时,ROOK也充当了整个生态的治理代币。它允许拥有者对现有协议进行提议和投票,并且还可以管理利润分配问题。就如这张图里所画的一样,keeper如果想要参与进这个生态,他就必须要质押一定量的ROOK。因此大家也就都想拥有一些ROOK,整个生态也就动起来了。

上面我讲了项目大方向上面的愿景,接下来最现实的问题就是如何让keeper相互合作?因为他们在之前是相互竞争的关系,所以这确实是一个难题。项目方最后是根据博弈论给出了解决方案。因为博弈论就是研究竞争问题的,并会给出优化策略,所以很适合用在这里。项目方把这个方式起名叫Coordination Game,它的三条核心规则定义如下:

  • 参与 Coordination Game 会让每个keeper 有更高的收益

  • 参与 Coordination Game 的所有 keeper 所获利润的总和会提高

  • 参与 Coordination Game 不会影响每个keeper 之间相对获得利润的大小

第一条规则是说keeper参加了Coordination Game绝对会收入更高。而第二条是说keeper不用担心加入的人多了会抢走自己的利益。相反,加入的人越多总体利益越大。这一条我觉得在现阶段是完全没问题的。因为现在keeper所获得的利润对比整个以太坊生态来说实在是太小了,所以就算keeper规模扩大几倍也没有丝毫关系。当前市场可以被看作是一个增量市场,这个项目规模越大,收益越大。而第三条就是代表着keeper加进来之后具体获得多少利益还是要看个人能力。能力强的人赚得多而并不会被要求去补贴别人。这三条准则等于是保证了keeper参与进来后的收益并防止了那些企图浑水摸鱼的人。

这个Coordination Game除此之外还有两条原则,第一条是关于如何给keeper的优先级排序。这里这个优先级,是指keeper进行交易的优先级。每一个keeper可以通过专门的合约创建一个在KeeperDAO上面的身份,然后绑定一定量的ROOK在上面,虽然说最后的排序是随机决定的,但你绑定的越多排位靠前的几率也就越大。就是说就算你只是绑定了一个ROOK,也是有概率可以排在第一位,但是可能性极为地小,最保险的做法还是多质押一些。这个排位是每隔100个区块更新一次KeeperDAO规定排位靠后的keeper是不允许和排位靠前的人争的。比如两个keeper同时看中一笔交易,那么这笔交易会由优先级高的人去执行。

另一条原则就是关于利润分配的。每一天结束时,系统会根据每个keeper绑定的ROOK的数目来分配当天的利润,当然分配的额度也和每个keeper的表现有关。如果一个人的表现的排位低于它绑定ROOK的排位,那么它就会失去一部分钱。和这相反,如果一个keeper的相对表现高于他绑定的ROOK的数目,那么前头人少掉的钱会被分配给他。这种做法一方面维护了系统的公平,多劳才能多得。另一方面这也会让整个生态里面的钱慢慢朝着能赚钱的keeper那里转移,这样子可以让系统的赚钱能力不断增强。

隐藏游戏 (Hiding Game) 是 KeeperDAO 系统的另一个关键部分。他解决的问题是如果生态内部有用户想要提交交易该怎么办的问题。生态该如何保护它的用户不被抢先交易或者三明治攻击。在较高的层面上,隐藏游戏被设计为允许用户通过专门的 KeeperDAO 合约来提供流动性并发起交易,这些交易会被存放在一个称为 Hiding Book 的私密交易池中。这些合约仅允许与被 KeeperDAO 协议列入白名单的 keeper 进行交互,而只有白名单 keeper 才能执行这些订单。这个游戏的具体流程是:当用户通过 KeeperDAO 发布一个限价订单时,白名单 keeper 会针对这笔订单寻找套利机会。假设某个 keeper 找到了执行该笔订单的套利机会,那么由此获得的套利利润的一部分将以协议原生代币 ROOK 的形式共享给该用户。这样一来,KeeperDAO 上的交易员就不会因为被抢跑或者遭遇三明治夹击而蒙受全部损失,相反,他可以使自己从套利中获益。对于用户来说,这绝对是一个好消息,因为自己不需要付gas fee而且还能赚token。

目前我是很看好这只token的,以后也想上手多试试它。这只token真的让套利机器人们开始合作,这是一个很大的改变。而且随着这个token的逐步发展,资金池里的量会越来越多, keeper越多,那么它可以带来的收益也就越大,因此还是很有潜力的。

3.2 Flashbot

我今天提出的第二种解决方案就是Flashbot。它的最终目标是把智能公链打造为无须许可,透明,公平的生态系统。它认为MEV是一种客观存在的事物,只要有交易,那么肯定就有这种可提取的利益。当前的问题是少数机构或者个人因为自身算力或者信息方面的优势垄断了这部分利益,因此我们需要做的就是消除这种信息不对称,把套利机会公之于众,让所有人都可以享受一部分利润,这样子就把一个零和游戏变成了共赢的局面。

Flashbot最大的特点就是它有一个私密交易池,这就可以保证交易不会暴露在以太坊的公开交易池中,大大减少了被攻击的可能性。Flashbot中两种参与的角色分别是搜寻者和矿工,这两种角色都需要使用官方根据go-ethereum改进的客户端来进行交易。大体来讲,运作方法就是搜寻者在Flashbot的私密交易池中直接把交易打包传给矿工。这样就搭建起了搜寻者,或者说我们普通用户,和矿工之间沟通的桥梁。具体来讲,搜寻者把自己的交易和其他交易打包成区块,自己的交易肯定排在最开头,其余交易按照将MEV最大化的方式去排列。打包之后,搜寻者们的包会在矿主主持的密封拍卖会上面相互竞争。这里竞拍采用的密封竞拍中大家并不知道其他人的出价,所以也可以一定程度上阻止gas war。之后报价最高的那个包会被矿工生成区块。这种机制之下,如果矿工经过权衡,发现直接从搜寻者这里获取收益要好于自己去打包交易,那么他就自然会舍弃自己打包的区块,然后按照Flashbot的包去生成区块。而同时,因为搜寻者无法通过高gas fee去吸引矿工优先生成自己的交易,那么他在交易时也会更为得谨慎,交易频率会因此而下降,这样子也可以缓解网络拥堵的问题。下图出自Flashbot 官网

Flashbot交易流程
Flashbot交易流程

Flashbot的优点就在于它有一个自己的私密交易池,因此交易信息在生成区块之前不会泄漏,这样子就防止了其他人抢先交易或者价格战。同时失败的交易也永远不会有人知道了,这也很好地维护了隐私。而这套系统由于有中继的存在也更为的稳定。因为所有人都可以来提交区块给矿工,中继就可以帮忙过滤掉恶意的区块攻击。同时,从用户的角度来说,对于搜寻者,他是在矿工生成区块之后才打钱,所以失败的交易是不会被收费的。而对于矿工来说,除了生成区块的奖励之外,还能获得来自搜寻者的小费,自然也是件好事。

除此之外,因为Flashbot的目标是建立透明,公平的生态系统,这个组织会定期扫描以太坊区块,逐步实MEV各种指标的可视化,来消除信息上的不平等性。这些图片就是官网中的一些例子。

post image
post image

3.3 Eden Network

然后我今天要介绍的第三种token 叫做Eden Network。它的逻辑其实和Flashbot有点像,它们都是搭建了一个私有的交易池,也都给用户和矿工之间搭建了沟通的桥梁。而且同样是将交易打包在一起的操作,所以交易不容易被攻击而且交易失败不会被收手续费。区别在于Flashbot是让用户付给矿工小费,根据小费多少来决定矿工打包的顺序。而在Eden Network,矿工打包的顺序是根据用户抵押的代币多少来决定的。Eden Network把一个区块分为4级,越往上所需要的代币越多。一般来讲,我们普通用户每天只需要质押少量代币就够了,但如果某些情况下我们需要快速进行大量交易,那么竞拍一个最高优先级的slot就也是一个不错的选择,因为slot可以委托一个地址,发送到此地址的任何交易都将被优先考虑。唯一的问题就是价格会很贵,第一个slote需要质押15000个token,按现在的价格来说差不多是4500刀,而竞拍可能也要花一两百刀。

3.4 CowSwap

最后我接下来要介绍的这个项目叫做CowSwap,它吸引人的点就在于它会提供免gas fee的交易。它的独特性可以用下图很好地表达出来。一般来讲,现在大家想交易token,都是去找Uniswap,SushiSwap 这种做市商。这样子用户除了需要付给做市商一定百分比的费用还要付以太坊的交易费用。CowSwap另辟蹊径,更进一步地把这个过程去中心化了。它没有自己的资金池,也不用考虑什么流动性。它的做法是线下撮合它交易池中的交易。这样子如果能撮合成功的话,那自然不需要再交什么费用。如果说实在撮合不了,那就再把这笔交易转给其他做市商。线下交易就是指你发一个交易信息到CowSwap链下的服务,然后CowSwap会统一把大家的交易提交到链上。统一提交的好处前面也提到了,可以防止别人抢跑或者三明治攻击。

post image

4 结尾

上面介绍的这些不用用户付交易费的做法我觉得是一个很有意思并且有效果的方法,这可以帮助生态快速地吸引大量的用户。在股票交易领域有一家叫做Robinhood的券商也采取了相同的策略并取得了相当好的成绩。一般来讲如果我们想交易股票,每一次交易都是需要付交易费,但如果我们用robinhood的话就一分钱也不用付。这家公司宣传的理念也就是说美国现在金融市场被大投行垄断,普通民众并没有享受到这些资本红利,因此它希望可以让美国的金融市场更为的公平,每个人都可以更方便地去交易。这对于散户来说太吸引人了,去年这家公司也成功上市了。就是在Robinhood之前,美国券商就是那几家特别大特别老的,并没有新的券商入局,所以可以说那几家券商是处于垄断的地位。Robinhood之所以可以打破这种垄断,是因为它注意到了一个其他券商忽视掉的市场,就是年轻人。Robinhood注意到了他们,剪掉了手续费,因此收获了一大批死忠的粉丝。现在这个区块链也同样是一个以年轻人为主的市场,我觉得这几个产品提供的免手续费同样有吸引力,未来这绝对是一个很有前景的领域。