注:本文来自@nzhlfred 推特,MarsBit整理如下:从代码层面上简单分析下 #UniswapX 的整体流程 下图是官方对于协议整体架构给出的流程图, 下面就图中每一步做具体的的解释, 因为跨链部分源代码还没发布所以就略过了.这里首先有几个角色, 提前解释下- swapper: 交易者- api service: 由 uni 100% 控制的服务, 用于接受 swapper 的 order 并向 filler 同步- reactor: uniswap 部署的智能合约, 主要负责协调 fillerC
注:本文来自@nzhlfred 推特,MarsBit整理如下:
从代码层面上简单分析下 #UniswapX 的整体流程
下图是官方对于协议整体架构给出的流程图, 下面就图中每一步做具体的的解释, 因为跨链部分源代码还没发布所以就略过了.
这里首先有几个角色, 提前解释下
- swapper: 交易者
- api service: 由 uni 100% 控制的服务, 用于接受 swapper 的 order 并向 filler 同步
- reactor: uniswap 部署的智能合约, 主要负责协调 fillerContract 完成 swap 逻辑并做必要的检查
- filler: 由三方开发的服务, 从 api service 处拿到并找有利润的 order 并调用 reactor 的 excute 完成交易 (有点类似 mev searcher)
- excutor / fillerContract: 由 filler 部署的智能合约, 主要用于完成 swap 的核心逻辑, 底层譬如可以对接到 uniswap, sushi, pancake 等等
- quoter: 由 filler 部署的智能合约, 主要用于在交易开始前给 swapper 报价
交易开始的第一步, 首先是报价
可以有多个三方的 quoters 给 swapper 进行报价, 报价的底线是 uniswapV2, V3 的报价. 价格最优者可以获得优先 fill 该 order 的权利.
uniX 上并没有给出 quoter 的代码, 不过在他部署的实例合约里面可以看到:
https://etherscan.io/address/0x7714520f383C998e8822E8743FD6f90A2979689b
报价合约的思路有点像 v3, 也是通过模拟发送交易来拿到合适的价格.
完成报价后, 如果 swapper 接受报价, 则可以链下对订单进行签名, 因为不需要上链, 所以不要求此时 swapper 有 gas.
如果想使用脚本不直接通过uni前端的话, uni 提供了 sdk 来完成 order 的构建及签名.
https://github.com/Uniswap/uniswapx-sdk
order 本身结构也很简单, 基本上就是对这次 swap 的描述
order 被上传到 uni api service 以后, fillers 可以通过 uni 提供的 api 接口来同步到 order pool 中合法的 order, 并搜索出有利润的, 目前接口已经是可以用的了, 感兴趣的可以试试:
curl https://api.uniswap.org/v2/orders\\">
在不考虑前面提到的最佳报价者能优先 fill order 的情况下, 此时所有的 fillers 实际是属于竞争关系, 有可能出现有多个 filler 同时竞争同一个 order, 所以 uinswap 文档提到说最好使用 flashbot 来防止 gas war.
流程走到这里第一次发起了交易, 而 gas 费用由 filler 承担的, 所以实际上所谓 0 gas 也正是因为这个, 但是你放心, filler 肯定会把 gas 算在 swap 的价格上的. 所以严格来讲并不是 0 gas, 只是说换了一种形式支付 gas.
这里 filler 调用的即是所谓的 Reactor#execute, 逻辑也不是很复杂, 大概如下
1. order 合规性检查
2. 通过 permit2 把用户支付的代币(input token) 转给 filler 或是 fillerContract
3. 由 filler 或是 fillerContract 完成对目标代币 (output token) 的购买并转给用户
整个流程大概就是这样, 可以说是非常简单了. 现在社区充斥着对 UniswapX 的批评, 大致是说它抄袭 1inch fusion mode 或者说 CoW swap. 首先不得不承认确实是大量借鉴, 这个在它自己的白皮书里面也提到了, 但是我感觉有一些细节还是值得一提的:
1. 首先是 permissionless, 白皮书其实一直在强调要构建一个开放的流动性外包系统, 其实你看不管是 1inch 的 fusion 还是 CoW swap 都或多或少有些封闭甚至不透明. 我认为至少在这一点上 uniswap 肯定是更加明智的, 更开放的系统能带来更多的参与者, 良性竞争的情况下用户的体验实际上肯定是更好的.
其次是他提出的最佳报价者的优先成交权以及声望系统, 这个其实很有意思. 社区里你能看到很多吐槽 1inch fusion mode 的声音, 说很多 resolvers 就干等着等价格下来了再成交. 我认为这其实很大程度上是因为没有对 resolvers 有比较好的奖惩机制导致的, 最佳报价配合声望系统的设计感觉应该可以对上述的问题有所改善">
综上我其实还是坚持认为至少UniswapX的发布对于 Uniswap 自身来讲是正面的, 至少它能帮助继续巩固 Uniswap 在 dex 领域的领先地位, 在可能没有那么多创新的时候基于别人被验证是成熟的方向做一些微创新我觉得也算是明智的选择吧.