链得得|Uniswap V2 改进与创新,DeFi丨一文读懂( 三 )


当您在Uniswap.exchange上切换代币对时 , 汇率会实时应用 。 JavaSDK(我们将在下文中查看)为其他应用程序提供了API , 以提供他们自己的接口来获取代币对及其汇率 。 除了ERC20代币外 , 汇率还适用于原生ETH 。
链得得|Uniswap V2 改进与创新,DeFi丨一文读懂
文章图片
UniswapV2用户界面中应用于ETH|DAI交易对的汇率 。
现在让我们来介绍一下UniswapV2上可以进行的交换类型 。 现在扩大的交换选择是由于ETH没有像在UniswapV1中那样被用作中介代币 , 也就是"ETH桥接" 。
UniswapV2交换选项
如上所述 , 在UniswapVI中 , 每一个代币交换都使用ETH 。 在从A代币到B代币的交换中 , A代币首先要兑换成ETH , 然后该ETH再兑换成B代币 。 这就导致了双倍的交易费用和双倍的gas费因此而产生 。
Uniswap文档中提到 , 第一次迭代是他们对去中心化自动交易所想法的"原型" 。 这很可能是因为开发者发现了更高效的交易执行方法 , 而这些方法已经在V2中得到了应用 。 省略ETH作为中介代币就是这样的优化之一 。
去掉ETH作为实用性代币 , 实现了代币对的直接交换 , 如下图所示 。
两个ERC20代币之间直接交换 。
这看起来很合理也很直观 , 也许是V1应该的工作方式 。 Router合约上的swapExactTokensForTokens和swapTokensForExactTokens方法可以被调用来进行这样的交易 。
这些方法名中使用的Exact术语代表了你希望交易到的代币 。 在从DAI到ETH的交易中 , 如果您需要特定数量的ETH作为回报 , 您将使用swapTokensForExactTokens 。 另一方面 , 如果您想用准确的DAI金额换取相应的ETH值 , 您将使用swapExactTokensForTokens 。 这个约定贯穿于UniswapV2的智能合约中 。
除了直接交换 , 用户仍然可以选择在两个代币之间进行交换 , 以ETH作为中间代币 。 当输入和输出代币没有资金池 , 但ETH和两个代币之间存在资金池时 , 这就变得很有用 。
在通过ETH交换DAI和LINK的情况下 , 产生的交换流程如下 。
链得得|Uniswap V2 改进与创新,DeFi丨一文读懂
文章图片
以ETH为中介代币的间接交换(类似于UniswapV1) 。
允许这种交易的相应Solidity方法是swapExactETHForTokens和swapETHForExactTokens , 以及swapTokensForExactETH和swapExactTokensForETH 。
最后一种交换代币的手段是将交换路由到多个ERC20代币 , 或者白皮书所说的"任意对ERC20代币" , 然后再到达你想要的输出代币 。 当然 , 原生ETH代币也可以存在于任意对中 。
考虑以下插图 , 在到达所需的LINK输出令牌之前 , 通过一系列代币移动DAI值 。
链得得|Uniswap V2 改进与创新,DeFi丨一文读懂
文章图片
通过一系列的代币进行资金路由 , 交换一个没有直接配对的代币
如果你的直接代币之间没有资金池 , 这种方法是很有用的 , 并且已经省略了前面介绍的ETH桥接 。
虽然这种交换方法是可能的 , 但没有智能合约方法可以自动促进众多代币的交换 。 相反 , 前端应用程序必须手动编写功能代码 , 并向Uniswap进行多次交易调用来代替 。
这种用例可能不会被大量使用--在通过1个或2个中间代币传递价值后 , gas会使额外的交换变得不经济 。 此外 , 中心化交易所可能会有更便宜的代币交换 。 说了这么多 , 一旦Ethereum2.0的扩展功能和更高效的股权证明共识被并入主网 , 这样的能力可能会变得更加广泛 , 使多交易互换成为更可行的前景 。
价格预言机
Uniswap的价格预言机机制允许开发者根据该代币在一些区块上的价格变动计算出平均的代币价格 , 这些区块也通过它们的时间戳代表一段时期 。