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 会检查在此期限内用户是否偿还贷款,若没有,则借助以太坊的事务性特点,将整个交易回滚,就当一切没有发生过。
这一切使得以下操作成为可能:
- 调用合约,从 uniswap 借出 x 数量的 token。
- 利用这些 token 完成其他套利操作,当然同样是借助程序的力量。
- 归还 y 数量的 token。
- 调用返回。
本文是付费文章
以上是此文章的预览内容