Uniswap 如何工作

img

Uniswap 是一种自动化流动性协议,由恒定的产品公式支持。并在以太坊区块链上的不可升级合约系统中实施。

每个 Uniswap 合约或者对都管理一个由两个 ERC20 代币储备组成的流动性池

任何人都可以通过存入等值的每个基础代币,从而成为池的流动性提供者(LP)。这些代币按比例追踪总储备中的有限合伙人份额,并可以随时赎回基础资产。

img

货币对充当自动做市商(AMM),只要保留“恒定乘积公式”,就随时准备接受一种代币来交换另一种代币。该公式最简单地表示为x * y = k,规定交易不得的改变货币对储备余额(x和y)的乘积(k)。由于 k 在交易的参考系中保持不变,因此它通常被称为不变量。该公式具有理想的特性,即较大交易(相对于储备)的执行速度比较小交易差得多。

实际上,Uniswap 对交易收取 0.30% 的费用,这笔费用会添加到准备金中。最终,每笔交易实际上都会增加 k。这相当于对有限合伙人的支付。当他们燃烧其池代币以提取总储备金的一部分时即可实现。未来,该费用可能会降低至 0.25%,其余 0.05% 作为协议范围内的费用扣留。

img

由于两个货币对资产的相对价格只能通过交易来改变,Uniswap 价格与外部价格之间的背离创造了套利机会。这一机制确保 Uniswap 价格始终趋向于市场出清价格。

生态系统&参与者

img

Uniswap 生态系统主要由三类用户组成:流动性提供者(liquidity providers:LP)、交易者(traders)、开发者(developer)。

  • 流动性提供者(LP):LP 向公共流动性池贡献 ERC-20 Token,这会使 LP 获得激励
  • 交易者:交易者可以以 0.30% 的固定费用(支付给 LP)将这些代币相互交换
  • 开发者:开发人员直接与 Uniswap 智能合约集成,以支持与代币、交易界面、零售体验等新的交互体验。

这些用户之间互动创造了一个积极的反馈循环,通过定义一种可以汇集、交易和使用代币的通用语言来推动数字经济

Liquidity Provider 流动性提供者

LP 不是一个同质群体:

  • Passive LPs (被动 LPs)是希望被动投资其资产以积累交易费用的代币持有者
  • Professional LPs(专业 LPs)做市作为主要的策略。他们通常开发定制工具和方法来跟踪不同 DeFI 项目的流动性头寸
  • Token 项目有时候会成为 LP,为其代币创建一个流动性市场。这使得代币的买卖变得更加容易,并通过 Uniswap 解锁与其他 DeFi 项目的互操作性。
  • 最后,一些 DeFi 先驱正在探索复杂的流动性提供交互,例如激励流动性、流动性作为抵押品以及其他实验性策略。 Uniswap 是实验这些想法的项目的完美协议。

Traders 交易者

协议生态系统中有几类交易者:

  • Speculators(投机者)使用各种社区构建的宫颈炎和产品,利用从 Uniswap 协议中提供的流动性来交换代币
  • Arbitrage bots(套利机器人)通过比较不同平台上的价格来寻找优势来获取利润。(虽然这看起来可能是榨取性的,但这些机器人实际上有助于平衡更广泛的以太坊市场的价格并保持公平。)
  • DAPP users(DAPP 用户)在 Uniswap 上购买代币,用于以太坊上的其他应用程序
  • 通过实现交换功能(从 DEX 聚合器等产品到自定义 Solidity 脚本)来在协议上执行智能合约。

在所有情况下,协议上的交易均需缴纳相同的固定费用。每一项对于提高价格准确性和激励流动性都很重要

Developers/Projects

Uniswap 在广泛的以太坊生态系统中的使用方法有很多,典型的例子有:

  • Uniswap 的开源、可访问性一位置有无数的用户体验实验和前端来提供对 Uniswap 功能的访问。可以在大多数主要 DeFi 仪表盘项目中找到 Uniswap 功能。社区还构建了许多 Uniswap 专用工具
  • 钱包通常将交换和流动性提供功能集成为其产品的核心产品
  • DEX 聚合器从许多流动性协议中提取流动性,通过分割交易为交易者提供更好的价格。Uniswap 是这些项目最大的单一去中心化流动性来源。
  • 智能合约开发人员使用可用的功能套件来发明新的 DeFi 工具和其他各种实验想法。

智能合约

Uniswap V2 是一个二进制智能合约系统。核心合约为与 Uniswap 交互的各方提供基本的安全保障。外围合约与一个或多个核心合约交互,但其本身并不属于核心合约的一部分。

Core(核心)

核心由一个单独的工厂和许多交易对组成。工厂合约负责创建和索引。这些合约的规模很小。这样做的简单理由是:表面积较小的合约更容易推理,更不容易出现错误,而且功能更加优雅。(也许这种设计的最大优点是系统的许多所需属性可以直接在代码中断言,几乎没有出错的空间。)一个缺点是:核心合约对用户有些不友好。对于大多数的用例,不建议直接与这些合约交互。相反,应该使用外围合约。

Factory

详细的关于Factory部分

工厂持有为 pair 赋能的通用字节码。它的主要工作是为为每一个唯一的代币对创建一个且仅有一个智能合约。他还包含打开协议收费的逻辑。

Pair

详细的关于Pair部分

Token 对有两个主要目的:充当AMM和跟踪池代币余额。他们还公开可用于构建去中心化预言机的数据

Periphery

外围合约代码示例

外围设备是一组智能合约,旨在支持与核心的特定领域交互。由于 Uniswap 的无需许可的性质,下面描述的合约没有特殊权限,实际上只是可能的外围类合约的一小部分。

Library

Library 代码示例

库提供了各种用于获取数据和定价的便利函数.

Rounter

详细的关于Rounter部分

使用该库的路由器(Router)完全支持前端提供交易和流动性管理功能的所有基本要求。值得注意的是,它本身支持多对交易(例如:x 到y 到 z),将 ETH 视为一等公民,并提供元交易以消除流动性。

设计决策

发送 Token

通常需要代币来执行某些功能的智能合约要求潜在的交易者首先对代币合约进行批准,然后调用一个函数,该函数又在代币合约上调用 transferFrom(owner-> approve Uniswap 合约可以转账代币 -> Uniswap 合约调用代币合约的 transferFrom 转移 owner 的 token)。这不是V2对 Token 的接收方式。相反,双方在每次互动结束是检查他们的代币余额,然后,在下一次交互开始时,将当前余额与存储的值进行比较,以确定当前交互着发送的 token 数量。在白皮书中详细解释了为什么会出现这种情况。但要点是,在调用任何需要代币的方法之前,必须将代币转移到 Pairs(此规则的一个例外是 Flash Swaps

WETH

V2 货币对不直接支持 ETH,因此 ETH⇄ERC-20 Pairs 必须用 WETH 进行模拟。这一选择背后的动机是删除核心中特定于 ETH 的代码,从而形成更精简的代码库。然而,通过简单地在外围包装/解开 ETH,最终用户可以完全不了解此实现细节。

路由器完全支持通过 ETH 与任何 WETH 对进行交互。

最低流动性

为了改善舍入误差并增加流动性供应的理论最小刻度大小,Pairs 会销毁第一个 MINIMUM_LIQUIDITY 池代币。对于绝大多数的配对来说,这只是一个微不足道的值。燃烧在第一次流动性供应期间自动发生,此后总供应量(totalSupply)将永远受到限制