撰文:merkle
编译:Tia,Techub News
在以太坊上进行开发的最大挑战之一是执行智能合约的 Gas 成本。「搜索者」(运行复杂算法来检测 MEV 盈利机会的人)通过各种 Gas 优化技术最大限度地减少其 Gas,从而参与捆绑拍卖。大多数搜索者在模拟状态下本地构建捆绑包,将执行MEV套利交易所需精确的最小输入传递给他们的机器人合约,以获得 MEV 机会。通常,该合约的编写目的是尽可能减少对链上资源的消耗来降低Gas费。由于复杂性和所需的开发资源,如今争夺 MEV 极其困难。
一些例如针对 MEV 相关交易的盲目套利策略现在已经非常难以实施。由于交易受到保护,因此有关交互的池以及交易量的信息经常是不透明的。搜索机器人必须通过智能合约来计算需要执行的交易,而不再通过本地模拟状态进行构建交易包。这种计算逻辑极大地增加了捆绑包的 Gas 成本,搜索者的利润因此变得更少了。
如果有一种方法可以将捆绑包所需的所有非关键计算移至链外,而只支付链上关键计算所需的 Gas 费用,结果会是怎样?
链下捆绑包
该方案的目标是允许搜索者提交包含由链下计算和链上结算两部分组成的 MEV 交易捆绑包。捆绑包中提交的 MEV 机器人交易属于链下计算。区块构建者将在当前区块的捆绑包索引处模拟此链下交易,然后返回数据用于构建链上结算交易,并作为最终的 MEV 机器人交易。下文将对此功能进行更详细的描述。以上方法将允许搜索者在初始链下交易中实现任意逻辑,控制区块中链上交易的精确执行,以最大限度地减少 Gas。
API(eth_sendOffChainBundle)
我们为链下捆绑包引入了一个新的 API 端点。如下所示,它与eth_sendBundle API 端点非常相似,但包含一个用于链下交易的新对象,其中包括 to、code、data 和 gas 字段。
{ "type": "eth_sendOffChainBundle", "params": [ { "txs": [ "0x...", // mempool tx "0x...", // mempool tx { // off-chain tx "to": "0x...", // searcher bot contract address "data": "<calls the search() function with some parameters (see example searcher contract)>", "gas": "0x...", // gas limit for off-chain transaction "code": "0x...", // (optional), code for the search contract, otherwise taken from the bot contract address on-chain. Useful if the searcher does not want to reveal search strategy bytecode on-chain } ], // remaining eth_sendBundle fields blockNumber, // (string, optional) hex encoded block number for which this bundle is valid on. If nil or 0, blockNumber will default to the current block minTimestamp, // (integer, optional) minimum timestamp for which this bundle is valid, in seconds since the unix epoch maxTimestamp, // (integer, optional) maximum timestamp for which this bundle is valid, in seconds since the unix epoch revertingTxHashes, // (array[string], optional) list of tx hashes that are allowed to revert or be discarded replacementUuid, // (string, optional) UUID v4 that can be used to replace or cancel this bundle refundPercent, // (integer, optional) percentage (from 0 to 100) of the 'refundIndex' transaction ETH rewards that should be refunded back to the 'refundRecipient' refundRecipient, // (address, optional) address that will receive the ETH refund. Default is sender of the last transaction in the bundle refundIndex, // (integer, optional) index of the transaction of which the ETH reward should be refunded. Default is last transaction in the bundle } ] }
搜索者合约示例
使用来自 API 的输入数据进行的链下模拟交易会返回一些「字节(bytes)」。前 4 个字节将用作链上交易的函数选择器,其余字节将作为该选定函数的输入传递。如果链下模拟交易返回空数据,则该捆绑包将被丢弃,且不会产生任何相关成本。此链上交易将由列入白名单且可验证的 Merkle 链下捆绑签名者签名。建议在您的合约中添加保护措施,要求发件人来自此签名者地址。
// SPDX-License-Identifier: MITpragma solidity >=0.6.12 <0.9.0; contract SearcherContract { function search(_data bytes) public pure returns (bytes memory) { // off-chain compute here // return call data that calls settle() with arguments 1 and 0x0 return abi.encode(this.settle.selector, uint256(1), address(0)); } function settle(uint256 amountIn, address pool) public returns (uint256) { require(msg.sender == "<merkle off-chain bundle signer>"); // settlement logic here uint256 fees = 0; // must pay for on-chain and off-chain gas, remaining is used for priority ordering block.coinbase.transfer(fees); return 0; }}
链下捆绑交易包允许的另一个有趣的功能是使用链下执行引擎欺骗机器人合约。搜索者可以在 rpc 请求中包含他们想要直接调用的代码的可选字符串编码字节,因为链下交易只是欺骗模拟。该代码输出仍然可以选择链上合约的函数,以此来完成搜索者的策略。这使得搜索者只需在链上部署关键代码,从而降低了部署成本。由于大多数受保护的交易逻辑都位于链外组件中,因此将合约的搜索组件作为代码发送可以增加隐私保护,防止其他搜索者对您的 MEV 策略进行逆向工程。在此示例合约中,对搜索的调用可以作为代码数据传入,而不是包含在已部署的 SearcherContract 中。
费用
链下捆绑交易包的成本来自于执行链上交易所支付的基本费用加上用于链下交易的 Gas,其费用很大程度上是补贴费率。该费用的具体计算方式仍有待确定。请注意,链下捆绑包不收取优先费。所有费用必须通过链上交易中的 coinbase transfer 来支付,费用将涵盖以上两项费用。剩余费用将用于激励在区块中的优先排序。
Blind Arbitrage 示例
我们以 MEV Share 的 Blind Arbitrage 策略为例。假设有一个新的 MEV 交易正在用未知的池、交易金额和方向交易 PEPE/WETH。 Blind Arbitrage 策略需要检查跨 DEX 的多个 PEPE/WETH 流动性池的池状态,计算通过这些池的最佳交易路线,然后调用两个或多个交易来执行套利机会。由于交易会隐藏信息,因此在捆绑执行期间,所有这些计算都需要在链上进行。通过链下捆绑,可以将 DEX 池状态读取和最佳路由逻辑放置在合约的 search() 函数中,该函数将以较低的 Gas 费用在链外执行,并仅返回最少的数据,如目标池数据和交易金额。然后, settle () 函数可以简单地迭代该数组并调用 swap,并在最后检查利润。虽然 swap 等结算操作必须存在于链上,但所有其他计算都可以移至链下,从而大大降低捆绑成本。
成就
-
通过优化链下所有非关键计算,可以减少以太坊上的 MEV Gas。实际上,在此范式下生成的区块将尽可能多地清理与 MEV 相关的计算,并为更多交易争取区块空间。
-
提高创新和任意计算(arbitrary computation)的可能性,而不会产生高 Gas 成本。
-
降低竞争障碍,让新搜索者能够在 Gas 优化执行中竞争。
风险
由于将构建者的模拟作为搜索者 MEV 机器人的输入存在一定依赖性,因此需要一定程度的信任,即构建者在执行链上合约调用时会诚实地行事。 Merkle 承诺通过真诚的作风来维护这种信任,而且我们的构建者行为是可以被轻松验证的。
未来
我们坚信 MEV 足迹最小化对于搜索者和生态系统中的所有其他参与者都有好处。虽然我们最初是为搜索者构建此功能,但我们也为 DApp 开发人员和高级用户寻找此功能的潜在用例,例如 MEV 缓解、计算优化等。


