DTeam 技术日志

Doer、Delivery、Dream

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

胡键 Posted at — Aug 15, 2020 阅读
<p>uniswap v2 已经发布,虽然 v1 版依然可供人使用,但<a href="https://app.uniswap.org/#/">官方页面</a>已经不再支持 v1 的 pool liquidity 注入(当然,你还是可以自己编程调用合约完成),并且提供了从 v1 pool 向 v2 pool 进行迁移的按钮。同时,项目团队的重点也转移至后续版本,对于 v1 的更新也不再那么积极。</p> <p>显然,作为开发者,了解最新的 v2 版是必要的,这也是本文出现的初衷:帮助你快速了解 v2 ,同时提供实际的代码示例,而不只是面向非开发者的那种泛泛而谈的介绍性文章。</p> <p>从本文中,你将看到:</p> <ul> <li>uiniswap v2 主要的协议变化。</li> <li>最新的合约架构。</li> <li>还有实际可运行的代码示例。</li> </ul> <p>但文章的篇幅是有限的,不可能包罗万象。因此:</p> <ul> <li>虽然 uniswap v2 引入了元交易,但本文不是一篇介绍元交易的文章,故虽然你可以看到元交易的代码示例,但是关于元交易本身的细节并不是本文的重点。</li> <li>由于预言机本身也是一个范围广泛的主题,并且 uniswap 自身的文档也提到未来将补充面向预言机开发者的文档,因此本文也不会涵盖这部分内容。并且,从常规开发来讲,这部分内容的缺失并不会阻碍 uniswap 在项目中采用。</li> </ul> <p>或许,在不远的未来,关于元交易和预言机的内容也会出现在这个系列中哟。</p> <h2 id="协议的主要变化">协议的主要变化</h2> <p>从大的方面讲,v2 版的主体协议仍然是:恒定乘积定价、工厂合约和交易所合约、兑换和流动性等。但毕竟是一次大版本升级,一些重要的功能更新还是有的。</p> <h3 id="原生支持-erc20-对">原生支持 ERC20 对</h3> <p>原生支持 ERC20 对之间的兑换可以说是 v2 版中最重要的变化,为何这样说呢?最主要原因就在于:降低了手续费。在 v1 中,要实现这样的目的需要花费 2 倍的手续费,因为需要借助 ETH 进行中转。即:A 到 B 之间的兑换实际上是以下两步:</p> <ul> <li>A -&gt; ETH</li> <li>ETH -&gt; B</li> </ul> <p>原生支持 ERC20 对之间的兑换后,以上操作就没有必要了,手续费降低是自然的结果。但这一变化也带来了一个后果:不再支持原生的 ETH,取而代之的是 WETH。这暗示着:</p> <ul> <li>uniswap v2 的使用者需要先将 ETH 换成 WETH。</li> <li>在使用 ETH 的场景中,开发者用 WETH 来替代。</li> </ul> <p>是不是感觉将使用和开发门槛都提高了?这也是我一开始接触 uniswap v2 时的感觉,仔细阅读文档之后,发现官方其实已经对此提供了解决之道,使用体验和开发方式完全兼容前一个版本,关于细节会在后面说明。</p> <h3 id="flashswap">FlashSwap</h3> <p>FlashSwap 是本次版本升级的另一个亮点。或许刚开始看到这个单词时会让你有点摸不着头脑,但假如换成另一个词,相信你会立刻领会其中的含义:<strong>小额贷款</strong>。</p> <p>即,用户可以从 uniswap 中借出一定数量的 token(就算该用户没有给 uniswap 增加过 liquidity 都行,也就说无门槛借钱!),在规定期限内连本带息归还 token 即可。只不过这个期限是限制在整个方法的执行期内:第一条执行语句和最后一条执行语句之间。</p> <p>uniswap 会检查在此期限内用户是否偿还贷款,若没有,则借助以太坊的事务性特点,将整个交易回滚,就当一切没有发生过。</p> <p>这一切使得以下操作成为可能:</p> <ol> <li>调用合约,从 uniswap 借出 x 数量的 token。</li> <li>利用这些 token 完成其他套利操作,当然同样是借助程序的力量。</li> <li>归还 y 数量的 token。</li> <li>调用返回。</li> </ol> <p>是不是有了点算法交易的感觉?关于 FlashSwap 的细节参见后文。</p> <h3 id="元交易">元交易</h3> <p>所谓“元交易”其实是利用签名由第三方代自己完成交易,这样的好处有二:</p> <ul> <li>降低了用户使用以太坊的门槛,即使没有 ETH 也能借助第三方完成交易。</li> <li>为新的应用场景打开了大门,比如,利用 ERC20 完成某些需要 ETH 才能完成的操作。</li> </ul> <p>至于第三方为何愿意帮你来做这些事情(别忘了,这其中的交易费也自然是由第三方承担),原因也可以归纳为:<strong>第三方可从中获得好处</strong>,不论这个好处是你俩之间的协定(线上或线下),还是你本身就是第三方的客户(这样他当然就有理由降低使用门槛)。</p> <p>看上去是不是有点复杂?但其实 uniswap v2 中的元交易应用场景很简单:省掉移除 liquidity 时的授权,仅此而已。</p> <p>熟悉 v1 的同学可能会对移除 liquidity 时还需要授权感到奇怪,这就涉及到了 v2 的合约架构调整,请参见后文。</p> <h3 id="价格预言机">价格预言机</h3> <p>在 v2 中引入预言机的目的是为了更好的应对价格操控,通过在区块内保存历史价格信息来实现这一点。但诚如前文所言,预言机本身是一个大话题,并且常规操作其实涉及到它的地方并不多,因此本文对于这方面的内容就此略过。</p> <h3 id="小节">小节</h3> <p>相比 v1 版而言,v2 版的协议有了很大的进化,支持的功能和场景也更丰富。尤其是 FlashSwap 的引入,使得 uniswap 不再只是一个简单的去中心化交易所,而且还充当了类似银行的角色。</p> <p>关于协议交互的整体流程,以及作为流动性提供者的风险,由于<a href="./uniswap-v1-indefinitve-guide.html">前一篇</a>已经给出了比较详细的介绍,这里不再重复,有兴趣的同学可以前去访问。</p> <h2 id="新的合约架构">新的合约架构</h2> <p>从事过 v1 开发的同学对于 uniswap v1 的合约架构不会陌生:</p> <ul> <li>涉及三类合约:工厂合约、交易所合约和 ERC20 合约。</li> <li>应用通过与交易所合约交互完成业务功能。</li> </ul>

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

付费链接 (已付费:42)

友情链接


相关文章