17

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

 3 years ago
source link: https://blog.dteam.top/posts/2020-08/uniswap-v2-indefinitve-guide.html?
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

胡键 Posted at — Aug 15, 2020 阅读 67

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

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

从本文中,你将看到:

  • uiniswap v2 主要的协议变化。
  • 最新的合约架构。
  • 还有实际可运行的代码示例。

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

  • 虽然 uniswap v2 引入了元交易,但本文不是一篇介绍元交易的文章,故虽然你可以看到元交易的代码示例,但是关于元交易本身的细节并不是本文的重点。
  • 由于预言机本身也是一个范围广泛的主题,并且 uniswap 自身的文档也提到未来将补充面向预言机开发者的文档,因此本文也不会涵盖这部分内容。并且,从常规开发来讲,这部分内容的缺失并不会阻碍 uniswap 在项目中采用。

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

协议的主要变化

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

原生支持 ERC20 对

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

  • A -> ETH
  • ETH -> B

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

  • uniswap v2 的使用者需要先将 ETH 换成 WETH。
  • 在使用 ETH 的场景中,开发者用 WETH 来替代。

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

FlashSwap

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

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

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

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

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

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

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

  • 降低了用户使用以太坊的门槛,即使没有 ETH 也能借助第三方完成交易。
  • 为新的应用场景打开了大门,比如,利用 ERC20 完成某些需要 ETH 才能完成的操作。

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

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

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

价格预言机

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

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

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

新的合约架构

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

  • 涉及三类合约:工厂合约、交易所合约和 ERC20 合约。
  • 应用通过与交易所合约交互完成业务功能。

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

付费链接


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK