Uniswap V2是链上交换的下一个迭代 Uniswap是以太坊区块链上的链上流动性协议,可实现无信任代币交换,这意味着所有交易均通过智能合约执行,而无需中介或受托方。事实证明,这种去中心化代币交换方法在ERC20代币持有者中很受欢迎,可以交换代币并为代币对提供流动性。 在此之前,Uniswap在Rinkeby测试网上进行了一段时间的测试后,于2020年5月19日在以太坊主网上启动了其第二次迭代,以与核心合约v1.0.1发行版一致。在编写本文时,该协议已在Mainnet上使用了两个多月,到目前为止,尚未发生与智能合约的完整性有关的重大破坏或问题。
如果你对持有和/或交易加密货币,以太坊开发,金融科技或金融趋势感兴趣,那么Uniswap应该在你的雷达区。到2020年第三季度,它与DeFi领域的蓬勃发展相伴而来,取得了快速增长。 Uniswap作为一项独立服务存在,但也可以集成到第三方钱包或Dapps中。除此之外,其他智能合约也依赖Uniswap作为其服务的基础。 本文将以无偏见的方式向你介绍与Uniswap V2一起推出的增强功能,详细介绍了主要功能。
Uniswap V1提供的基础 Uniswap V1奠定了链上代币交换和去中心化流动性池的基础,这些池为用户提供流动性提供了奖励,并收取少量费用进行交换。 代币汇率不是使用实时订单簿,而是使用所谓的“恒定产品公式”来计算的,下面将简要介绍一下。它本质上提供了一种机制,可以使代币的值相对于所讨论的代币对保持平衡。
基础代币对(例如DAI到ETH或DAI到USDC)每个都有与之关联的单独的流动性池,用户可以通过将其中一个代币存入相应池来为流动性做出贡献。然后,无论何时进行交易,都会向流通量提供者收取0.3%的费用份额,该份额是基于其共享代币相对于整个共享供应量的比率得出的。
总之,使用Uniswap V1的优点有:
1.去中心化,不依赖第三方。任何人都可以通过web3连接到Uniswap合约,并在它们之上创建自定义应用程序。 2.能够创建任何ERC20代币的交换。 3.由于市场价格等式及其带来的限制,鲸鱼极有可能不会瞄准Uniswap。 4.非营利组织 5.与其他去中心化交易所相比,交易便宜。 6.任何人都可以贡献的流动资金池,其中0.3%的佣金在所有流动资金提供者之间分配。 7.可以扩展/建立。可以初始化自定义池,从而增加了开发人员需求的灵活性。 8.前端React应用程序可以分叉并在测试网络(例如Rinkeby)上运行,可以在无风险的环境中尝试代币的池化和交换。 Uniswap V1的缺点有: 1.依靠套利交易来控制汇率,因此始终需要其他形式的交易来保持Uniswap汇率的平衡。 2.需要花费GAS费用来执行交换,对于ERC20到ERC20代币交换更是如此。随着以太坊规模的扩大(ETH2.0分片系统的实施正在进行中),这些GAS价格将急剧下降,并最终成为一个问题。 3.随着使用量的增加,交换的真正好处和陷阱将随着时间的推移而变得明显。 Uniswap V2的新功能 Uniswap V2对协议进行了一系列升级和增强,这些协议基于第一次迭代引入的交换和流动性机制而建立。主要变化包括: 1.ERC20到ERC20代币交换,其中不再需要ETH作为中介代币以促进交换过程。这也称为“ ETH桥接”。取消此要求后,交易次数减少了一半,并节省了GAS费。如果没有设置直接代币交换的池,这也使Dapps可以有效地找到从一个代币到另一个代币的“路由”。
2.价格预言机功能,允许基于每个块的代币对价格进行时间加权平均定价。
3.快速交换,或能够从Uniswap池中“借用”代币,与外部服务进行一些任意交易,并全部归还一次借入的资金。事务是原子的,这意味着如果在任何阶段事务失败,它将全部还原。这种功能的明显用例是利用流动资金池执行套利交易,但是还有其他用例可带来好处,例如减少执行特定DeFi动作的GAS费,例如关闭Maker Vault。
4.通过将void返回类型transfer()和transferFrom()视为成功的转移,来支持非标准ERC20代币。这看似微不足道,但是诸如USDT(Tether)和BNB(Binance Coin)之类的主要代币在其传输方法上确实做到了上述几点。包括被广泛采用的不完全符合ERC20标准的代币,增强了Uniswap的主张,使其成为使用方面领先的链上交换。
5.如果传输的代币数量多于Solidity不能支持的附加实用程序方法,以防止溢出。
非标准ERC20代币必须支持官方EIP规范中指定的方法,但返回类型以及方法的签名可能与概述有所不同。此问题使代币成为非标准代币。重命名或删除所需的方法也会使代币成为非标准代币,但是这种做法较少实践,并且如果Uniswap之类的协议希望支持与最终规范的此类偏离,则需要采取主要的变通办法。 Uniswap V2引入了可转换的0.05%协议费用,替换了0.3%的标准费用,但目前已关闭,只能通过去中心化式治理机制将其打开。
经过广泛的测试和审核后,Uniswap V2正式推出 已有大量文献证明,如果智能合约中存在错误,则其不可变性会带来灾难性的代币丢失或冻结的风险。如果智能合约写得不好并且包含导致锁定资金的错误,那么就没有办法还原这些交易,除非在整个区块链上进行硬分叉。 值得称赞的是,Uniswap团队遵循行业标准惯例,以确保将合同中的错误和逻辑错误风险降到最低。
从Uniswap V1到V2的转变是在Solidity中从Vyper的第一个版本重新编写了合约。这成功地克服了Vyper的局限性,并允许Uniswap开发人员利用最新的Solidity版本已推出的较新的操作码,从而在所使用的CPU资源(以及由此产生的GAS费)方面进一步优化了合约执行。
Uniswap V2依赖于多个智能合约,包括工厂合约,路由器(V2),配对和配对ERC20合约以及实用程序的库合约。
使Uniswap工作的主要合约如下:
使Uniswap V2正常工作的智能合约结构。 Router2是Router1的优化版本,但是它们都执行相同的任务。 Uniswap建议所有开发人员现在切换到使用Router2合约。 Uniswap的总重写保证了来自受人尊敬的开发工作室的第三方审核,以及在测试网上进行的广泛测试以模仿实际使用情况。发生了这种情况,Consensys Diligence是提供自己的Uniswap V2源代码综合报告的参与方之一。
似乎Uniswap V2在Mainnet发行之前已进行了广泛的审核。对源代码执行这项尽职调查这一至关重要的任务很可能确保了将来不会发现任何重大错误,尽管如果发现任何重大缺陷,Uniswap的确有一个缺陷赏金计划。
安全是区块链领域持续关注的问题,可以理解的是,鉴于在现场交易的价值量,安全性是可以理解的。对与共识,区块创建和交易验证有关的底层区块链机制的攻击是学术界许多研究的重点,但是智能合约完整性在以太坊的情况下同样重要,因为锁定令牌依赖于以太坊的完整性智能合约逻辑,以确保它们的安全性和可达性。
现在,让我们深入研究Uniswap V2的一些机制,并进一步了解该协议的功能。
Uniswap V2的工作方式 每对代币都有自己的通过工厂合约初始化的资金池,并向资金池进行初始存款以提供流动性。 代币的汇率是根据池中两个代币的供求来计算的,即所谓的常数乘积公式。使用常数乘积公式,将基于供需来计算特定对中的代币值,其中值沿着公式的曲线移动:
确定Uniswap V2汇率的常数乘积公式。 汇率基于以下简单公式自动计算:x * y = k。相应的曲线表示所有可能的伐值,每个代币对将具有自己的曲线,该曲线将调节其汇率的当前状态。 如果B代币需求旺盛且数量枯竭,那么价格将成倍增加,结果是曲线的左侧向上移动。另一方面,如果B代币相对于A代币有充足的供应且没有需求,则价格将在曲线的右侧趋于平稳。请注意,此供需余额是相对于A代币的,因此,同一个B代币与不同的A代币配对将代表单独的数量和价格比。
由于这些机制的影响,Uniswap以及其他去中心化交易平台都依赖于恒定产品公式,依靠套利交易来使代币的价值与其他市场保持一致。从本质上讲,这些协议仍然需要外部交易生态系统来控制代币值。每个代币对的汇率将不断更新,以匹配市场价格,这为交易者提供了巨大的机会。
在Uniswap.exchange上的代币对之间切换时,实时应用汇率。 JavaScript SDK为其他应用提供API,以提供其自己的接口来获取代币对及其汇率。除ERC20代币外,汇率还适用于本机ETH:
应用于ETH的汇率| Uniswap V2 UI中的DAI交易对。 现在,我们来探讨可以在Uniswap V2上进行的交换类型。现在可用的扩展交换选项是由于与Uniswap V1中一样,ETH不被用作中间代币,也称为“ ETH桥接”。Uniswap V2交换选项 如上所述,在Uniswap V1中,每次交换代币都使用ETH。在从A代币到B代币的交换中,首先必须将A代币转换为ETH,然后再将该ETH转换为B代币。结果导致交易费用加倍,GAS费加倍。 Uniswap文档将第一次迭代称为其去中心化自动交换概念的“原型”。这可能是由于开发人员发现了V2中提供的更有效的交易方法。忽略ETH作为中间代币是这种优化之一。
删除ETH作为实用程序代币已启用代币对的直接交换,如下图所示:
两个ERC20代币之间的直接交换。 这似乎是合理且直观的,也许这就是V1的工作方式。可以调用路由器合约上的swapExactTokensForTokens和swapTokensForExactTokens方法进行此类交易。 这些方法名称中使用的确切术语代表你希望交易的代币。在从DAI到ETH的交易中,需要一定数量的ETH作为回报,可以使用swapTokensForExactTokens。另一方面,如果想用DAI的确切数量来交换相应的ETH值,则可以使用swapExactTokensForTokens。 Uniswap V2的所有智能合约都使用此约定。 除了直接交换外,用户仍然可以选择在两个以ETH作为中间代币的代币之间交换。当不存在用于输入和输出代币的池,但是在ETH和两个代币之间确实存在池时,这将很有用。
在通过ETH交换DAI和LINK的情况下,产生的交换流如下:
间接交换,其中ETH是中间代币(类似于Uniswap V1)。 允许进行此类交易的相应Solidity方法是swapExactETHForTokens和swapETHForExactTokens,以及swapTokensForExactETH和swapExactTokensForETH。 交换代币的最后一种方法是,在达到所需的输出代币之前,将交换路由到多个ERC20代币,或白皮书所述的“任意对ERC20代币”。当然,本地ETH代币也可以成对出现。 请考虑以下示例,该示例在到达所需的LINK输出代币之前,将DAI值在一系列代币中移动:
通过一系列代币路由资金以交换没有直接对的代币。 如果你的直接代币之间没有池,则此方法很有用,并且由于前面已介绍了ETH桥接的遗漏,因此使这种方法成为可能。 尽管这种交换方法是可行的,但是没有可用的智能合约方法来自动促进多种代币交换。相反,前端应用程序必须手动对功能进行编码,并改为对Uniswap进行多个事务调用。
这种用例可能不会被大量使用,在通过1或2个中间代币传递价值后,GAS费将使额外的掉期交易变得不经济。此外,在中心化交换机上可能存在更便宜的代币交换。综上所述,一旦以太坊2.0的扩展功能和更有效的权益证明共识被确认,这样的功能可能会被更广泛地使用,从而使多事务交换具有更可行的前景。
价格预言机 Uniswap的价格预言机制使开发人员可以基于该代币在多个区块上的价格移动来计算平均代币价格,这也可以通过其时间戳来表示一段时间。累积的这段时间可能是最后一个小时,24小时或更长时间。尽管Uniswap提供代币价格,但它不会在链上存储任何历史值。取而代之的是,Dapp开发人员有责任在一段时间内累积价格以计算出这段时间内的平均价格。这些价格称为“时间加权平均价格”或TWAPS。 这个想法是通过将累计价格(持续时间每个区块的代币价格)除以时间戳持续时间(持续时间结束时间戳减去持续时间开始)来计算一个区块周期内的平均价格时间戳记。
下图总结了此计算:
TWAP是通过在时间戳持续时间内的区块持续时间内累计价格来计算的。 TWAP是可靠的,并且会随着时间的推移反映代币的价值。这种方法可以防止闪存崩溃或价格狂涨,这种活动在加密货币交易中并不罕见。在市场波动的情况下,提供时间加权价格可以更准确表示地反映代币。如果服务需要,开发人员可以自由利用价格预言,他们可以通过Uniswap JavaScript SDK进行检索。 闪电交换 闪电交换(Flash Swaps)是由多阶段过程组成的事务,这些过程从Uniswap代币池借用代币,对这些代币进行处理,然后归还这些代币,全部都在单个事务中完成。如果事务的任何阶段失败,则将还原所有状态更改,并且代币保留在其相应的Uniswap池中。 考虑下图,该图显示了买方可以在没有持有代币的情况下执行闪电交换交易。这是因为通过交易失败或购买者偿还在同一笔交易中借入的代币,可以保证代币的价值返回到池中:
闪电交换的一个很好用例是套利交易,通过这种交易,买方可以保证获利并将原始代币价值返还给Uniswap池。买方每次都从套利交易中获利。 另一个用例是利用Uniswap池结算Maker Vault,将在其中偿还债务并从该库中提取抵押的ETH(或其他抵押代币)以偿还Uniswap池。与使用你自己的资金来完成相同任务相比,这需要更少的GAS。
闪电交换是Uniswap的一项相对较新的功能,但是我们可以期望不久的将来会有更多的Dapps集成该功能。
在交易机器人的用例中,还可以利用闪电交换来自动执行套利交易。机器人不需要资金来执行交易,只需要识别套利机会并执行快速掉期交易即可。
新的0.05%协议费用和治理 Uniswap V2以“协议费用”的形式向协议引入了额外费用,即在打开时将交易金额的0.05%路由到Uniswap拥有的地址。这0.05%是从交易所的标准0.3%费用中扣除的,因此,一旦启用此功能,流动性提供商将是输家。 该协议费用目前已关闭,并且Uniswap没有公开公告暗示它将在不久的将来启用。这项增加似乎是一个有疑问的决定,但是Uniswap开发人员认为这是长期支持Uniswap增长和可持续性的必要功能。事实是,如果他们希望启用此费用,便建立了一种治理机制,社区需要对该机制进行投票,以决定是否开启或关闭该机制。
尽管激活此功能需要达成社区共识,但这样做将为Uniswap组织带来巨大的财务收益,并因此在将费用转入其钱包时带来竞争优势。
从好的方面来说,这样的费用将为改善协议和整个生态系统的努力提供资金,这将导致进一步的采用,并因此产生更多的交易费用,以使流动性提供者受益。从理论上讲,这弥补了最初的损耗。下图概括了这个想法:
开启0.05%协议收费的积极结果 关于治理机制的详细信息尚未公布,该机制将确定是否开启协议收费,但是可以假设将使用ERC20代币来提交投票,类似于Maker的治理和投票协议。 为了管理协议收费机制,Uniswap工厂合约包含feeTo和feeToSetter方法,以分别设置协议收费钱包地址和能够设置feeTo值的帐户。
JavaScript SDK 这篇文章故意避免过于技术化,但是值得一提的是Uniswap JavaScript SDK的存在。开源库提供了NodeJS的JavaScript API,JavaScript框架以及任何与Uniswap集成的基于浏览器的应用程序。 这已经导致第三方将Uniswap直接集成到其产品和服务中。Agent Wallet,Switcheo Exchange和Streamr Marketplace只是将Uniswap直接集成到其产品中的众多应用中的3个。
JavaScript SDK文档涵盖了用于获取代币对数据和对地址的API,以及用于发起交易和获取定价的API,这些API利用了上面讨论的价格预言功能。
请注意,交易无法自动执行,而是这些API将考虑中间市场价格和你愿意结算的最小输出代币数量(也称为滑点)来准备交易。配置交易后,用户必须使用诸如MetaMask之类的钱包软件来发起交易并签署交易。
关于代币列表的注释 如果你想知道如何在Uniswap.exchange上确定代币列表,这是一个手动过程,则Uniswap组织会调用要添加到其上的代币。即使某个特定ERC20的链上可能存在一个池,也不能保证它会出现在Uniswap官方网站的代币列表中。 如果代币所有者希望请求将其代币添加到uniswap.exchange的默认代币列表中,则需要在默认代币列表存储库中提交GitHub问题。
Uniswap.exchange上有一个功能,可让你在代币的搜索字段中输入ERC20代币地址,如果存在,它将成功添加到列表中。这允许在Dapp上使用代币,但是代币不会持久化到列表中供其他人使用,因此不会使代币增加曝光。
开发人员还可以通过遵循简单的JSON结构来创建自己的代币列表,以填充自己对Uniswap的集成。有关此操作的更多详细信息,请访问GitHub上的Uniswap的令牌列表存储库。
总结 这是Uniswap V2的综合介绍。我们已经介绍了它提供的一系列进步以及它们如何运作。主要的增强功能是更有效的代币交换,时间加权的价格预言和闪电交换功能,其中包括在幕后进行的改进,例如向基于Solidity的智能合约的转移,这些合约利用最新的操作码来提高执行效率。 Uniswap V2仍然是一个不信任的去中心化交易所,位于以太坊区块链上,除非成功攻击基本的以太坊协议,否则该篡改将无法被篡改。到目前为止,这尚未发生,并且随着目前正在运行的矿工和验证器的数量,这种情况不太可能发生。
ETH 2的Medalla测试网与20,000个验证者一起启动,希望这个数字对于主网启动会更高,因为验证者将被激励以实际价值。
另一方面,Uniswap V2仍然不是完美的代币交换实现。目前,GAS费是有史以来最高的,这使每笔Uniswap交易都变得昂贵。 Uniswap没有实时订单簿,导致交易者仍然依靠中心化交易所执行交易策略。如前所述,中心化交易所在平衡Uniswap汇率方面仍然扮演着不可替代的角色,后者依靠套利交易与平均市场价格保持同步。
Uniswap V2是朝着正确方向迈出的积极一步,但如果去中心化交易所希望完全取代中心化交易所,那么仍然面临着重大挑战。整个加密货币社区和以太坊的情绪尤其乐观,人们可以充满信心地预期,在短期到中期,DeFi领域的技术能力和应用率不会放缓。
有用的链接 Uniswap.exchange:默认的交换应用程序,也可以用作前端参考实现。 Uniswap.org:Uniswap的官方网站主页。 Uniswap.Info:Uniswap使用情况统计信息。 原文链接:Uniswap V2: Everything New with the Decentralised Exchange
—-
编译者/作者:洁sir
玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。
|