DTeam 技术日志

Doer、Delivery、Dream

Uniswap 非权威开发指南(v2 版)

胡键 Posted at — Aug 15, 2020 阅读

uniswap v2 已经发布,虽然 v1 版依然可供人使用,但官方页面已经不再支持 v1 的 pool liquidity 注入(当然,你还是可以自己编程调用合约完成),并且提供了从 v1 pool 向 v2 pool 进行迁移的按钮。同时,项目团队的重点也转移至后续版本,对于 v1 的更新也不再那么积极。

显然,作为开发者,了解最新的 v2 版是必要的,这也是本文出现的初衷:帮助你快速了解 v2 ,同时提供实际的代码示例,而不只是面向非开发者的那种泛泛而谈的介绍性文章。

从本文中,你将看到:

但文章的篇幅是有限的,不可能包罗万象。因此:

或许,在不远的未来,关于元交易和预言机的内容也会出现在这个系列中哟。

协议的主要变化

从大的方面讲,v2 版的主体协议仍然是:恒定乘积定价、工厂合约和交易所合约、兑换和流动性等。但毕竟是一次大版本升级,一些重要的功能更新还是有的。

原生支持 ERC20 对

原生支持 ERC20 对之间的兑换可以说是 v2 版中最重要的变化,为何这样说呢?最主要原因就在于:降低了手续费。在 v1 中,要实现这样的目的需要花费 2 倍的手续费,因为需要借助 ETH 进行中转。即:A 到 B 之间的兑换实际上是以下两步:

原生支持 ERC20 对之间的兑换后,以上操作就没有必要了,手续费降低是自然的结果。但这一变化也带来了一个后果:不再支持原生的 ETH,取而代之的是 WETH。这暗示着:

是不是感觉将使用和开发门槛都提高了?这也是我一开始接触 uniswap v2 时的感觉,仔细阅读文档之后,发现官方其实已经对此提供了解决之道,使用体验和开发方式完全兼容前一个版本,关于细节会在后面说明。

FlashSwap

FlashSwap 是本次版本升级的另一个亮点。或许刚开始看到这个单词时会让你有点摸不着头脑,但假如换成另一个词,相信你会立刻领会其中的含义:小额贷款

即,用户可以从 uniswap 中借出一定数量的 token(就算该用户没有给 uniswap 增加过 liquidity 都行,也就说无门槛借钱!),在规定期限内连本带息归还 token 即可。只不过这个期限是限制在整个方法的执行期内:第一条执行语句和最后一条执行语句之间。

uniswap 会检查在此期限内用户是否偿还贷款,若没有,则借助以太坊的事务性特点,将整个交易回滚,就当一切没有发生过。

这一切使得以下操作成为可能:

  1. 调用合约,从 uniswap 借出 x 数量的 token。
  2. 利用这些 token 完成其他套利操作,当然同样是借助程序的力量。
  3. 归还 y 数量的 token。
  4. 调用返回。

是不是有了点算法交易的感觉?关于 FlashSwap 的细节参见后文。

元交易

所谓“元交易”其实是利用签名由第三方代自己完成交易,这样的好处有二:

至于第三方为何愿意帮你来做这些事情(别忘了,这其中的交易费也自然是由第三方承担),原因也可以归纳为:第三方可从中获得好处,不论这个好处是你俩之间的协定(线上或线下),还是你本身就是第三方的客户(这样他当然就有理由降低使用门槛)。

看上去是不是有点复杂?但其实 uniswap v2 中的元交易应用场景很简单:省掉移除 liquidity 时的授权,仅此而已。

熟悉 v1 的同学可能会对移除 liquidity 时还需要授权感到奇怪,这就涉及到了 v2 的合约架构调整,请参见后文。

价格预言机

在 v2 中引入预言机的目的是为了更好的应对价格操控,通过在区块内保存历史价格信息来实现这一点。但诚如前文所言,预言机本身是一个大话题,并且常规操作其实涉及到它的地方并不多,因此本文对于这方面的内容就此略过。

小节

相比 v1 版而言,v2 版的协议有了很大的进化,支持的功能和场景也更丰富。尤其是 FlashSwap 的引入,使得 uniswap 不再只是一个简单的去中心化交易所,而且还充当了类似银行的角色。

关于协议交互的整体流程,以及作为流动性提供者的风险,由于前一篇已经给出了比较详细的介绍,这里不再重复,有兴趣的同学可以前去访问。

新的合约架构

从事过 v1 开发的同学对于 uniswap v1 的合约架构不会陌生:

本文是付费文章,剩余内容请访问以下链接支付之后继续阅读:

付费链接 (已付费:26)

相关文章