Uniswap自动路由的工作原理
Uniswap自动路由通过拆分交易为你提供Uniswap的最佳路径。我只是好奇它是如何实现优化交易部分的,所以我深入研究了一下。

一键发币: SUI | SOL | BNB | ETH | BASE | ARB | OP | POLYGON | 跨链桥/跨链兑换
Uniswap自动路由通过拆分交易为你提供Uniswap的最佳路径。它在生产环境中使用,基本上你输入要交易的代币和数量,它会告诉你最佳路径、报价、调整后的Gas报价等。
我只是好奇它是如何实现优化交易部分的,所以我深入研究了一下。代码量很大,所以花了我一些时间才弄清楚它是如何工作的。
1、获取池数据
自动路由从子图池中获取池数据,其URI如下:
https://cloudflare-ipfs.com/ipns/api.uniswap.org/v1/pools/${protocol}/${chainName}.json
例如,你可以使用这个链接获取Uniswap V3在Polygon主网上的池数据。
JSON数据包含每个池信息的数组,如下所示:
{
"id": "0x0004302b6a85e5e4ecc88317efe3ce4da7f7f05e",
"token0": {
"id": "0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270"
},
"token1": {
"id": "0x6e6dab6be7c102eb4ff73e82046dd9d0f9bbc3aa"
},
"feeTier": "100",
"liquidity": "49999990208047568803",
"tvlETH": 0.0025879711685522673,
"tvlUSD": 3.34181459860312
}
id
表示地址,而tvlUSD
表示池的总市场价值(以美元计)。
当你想在没有节点RPC URL的情况下获取所有Uniswap池信息时,这非常有用。
2、获取候选池
为了加快获取最佳路径的速度,它首先通过检查是否包含被阻止的代币、要交易的代币等来过滤池。
点击这里查看get-candidate-pools.ts代码。
3、计算所有路径
在获取所有相关池之后,它计算连接输入代币和输出代币的所有可能路径。computeAllRoutes
是获取可能路径的函数。它递归地确定哪些池适合下一个循环。
点击这里查看compute-all-routes.ts代码。
当我做MEV的时候,我用Neo4j来寻找可能的路径并缓存结果到键值数据库中,所以我对哪种方法更好很感兴趣。这是您可以使用编译语言(如Rust)进行优化的地方,以获得更好的性能。我希望Uniswap团队用Rust或Go构建下一代路由器。
4、获取报价
在获取路径后,它将为每条路径和每种金额组合获取报价。在接下来的部分中,它将结合所有小部分的报价,以获得最佳路径和交易组合。为此,首先必须为每条路径的每个小交易部分获取所有报价。它使用Quoter
合约引用Uniswap V3价格,你可以使用节点API的eth_call
方法模拟交换。
例如:
找到26条可能路径
百分比:[5%,10%,15%,… 100%](20个部分)
报价数量:26 * 20 = 520
说到引用Uniswap V3价格,当我做MEV的时候,我在Redis中存储了所有Uniswap V3池的状态,并使用Redis查询价格。你可以仅通过监听流动性事件和交换事件来更新池状态,所以我喜欢这种方法。它速度快,甚至不需要运行一个节点。
点击这里查看base-quoter.ts代码。
5、获取最佳路径
有了所有可能的路径和报价,您最终可以估算出最佳的交换路径。首先,它用每个百分比的最佳报价填充队列。对于不分裂的路径,可以根据其100%报价排序。小于100%的报价需要其他部分来完成交换,因此通过填充其他报价来构造交换,每个分裂的池需要不同。
例如:1900 USDC -> WETH
():交易的百分比
1次分裂
- USDC/WETH 0.5%费用(100%)
- USDC/WETH 0.1%费用(100%)
2次分裂
- USDC/WETH 0.5%费用(95%),USDC/DAI 0.1%费用(5%)-> DAI/WETH 0.5%费用
- USDC/WETH 0.5%费用(95%),USDC/WBTC 0.5%费用(5%)-> WBTC/WETH 0.5%费用
每个分裂的前5个报价可以添加到最佳路径队列中。在计入Gas成本后,按最高报价排序,这就是如何获取最佳路径。
点击这里查看best-swap-rouer.ts代码。
我可能遗漏了一些重要部分,如果有错误请纠正我。除了报价部分,这个方法可以适用于任何Dex协议。分割交易会增加Gas使用量并需要大量的报价,但当交易低市值代币或大额资本时,它会增加您收到的数量。
6、结束语
总体而言,Uniswap自动路由的核心算法并不复杂。最初我以为他们可能会有一些复杂的数学公式来获取最佳路径。然而,它的做法是将其分成小部分,使用Quoter
合约逐一引用每个部分的价格,并像拼搭乐高一样组合所有报价。
我目前正在试验一种工具来获取最佳路径。这个库给了我一些关于如何接近它的见解。我这样做是因为我希望构建一些帮助人们安全交易的东西,但谁知道呢。让我们拭目以待。现在我可以开源我写的每一行代码,感觉好多了。
原文链接:How Uniswap Auto Router Works
DefiPlot翻译整理,转载请标明出处
免责声明:本站资源仅用于学习目的,也不应被视为投资建议,读者在采取任何行动之前应自行研究并对自己的决定承担全部责任。