前言
Uniswap 是运行在以太坊区块链上的去中心化交易所 (Decentralized Exchange),通过自动运行的智能合约 (Smart Contract) 及程序代码,使用者不仅可在 Uniswap 上兑换各种 ERC-20 代币,而且还能提供 ERC-20 代币在 Uniswap 上帮助其他人进行兑换,并从中获得交易手续费收益。
Uniswap 让代币的交易过程完全自动化,不再需要中介人的参与,使得交易成本大幅地降低。在提升运作效率的同时,也避免了中心化交易所在用户筛选、限制、相互信任方面的问题。 Uniswap 的成功使其成为以太链上去中心化金融 (Decentralized Finance,又称 DeFi) 市场中的龙头项目,也使其成为开源代码被抄袭次数最多的协议之一。
2020 年 9 月 Uniswap 发行了治理代币 UNI,此举除了奖励该协议的的用户外,也进一步贯彻去中心化的精神理念让社群一同参与决策,使 Uniswap 能在日新月异的区块链领域中继续地有机发展。
回顾 Uniswap 的历史
2016 年时,以太坊的创办人 Vitalik Buterin 曾在社群论坛 Reddit 上撰写博文讨论去中心化交易所的可行性。由于区块链上的任何操作指令都需要支付手续费(Gas fee),这使得做市商在去中心化交易所的经营成本过高,难以在订单簿上频繁地挂单。无论是否成交或是取消订单都要支付费用这件事情变成了巨大的交易成本,链上代币交易时的买卖价差 (Bid - Ask Spread) 经常超过 10%。在这种情况下,通过自动做市商 (Automated Market Maker) 程序产生连续报价,以促进流动性的想法也应运而生。
一位曾任职于西门子的硬件工程师 Hayden Adams 受到那篇文章的启发,开始着手研究如何实现自动做市商的运作程序。在获得以太坊基金会 10 万美元的赞助后,Uniswap 于 2018 年 11 月在以太链上线,支持 ETH 与各种 ERC-20 代币间的兑换。
Uniswap 的出现很快就吸引了市场的关注,简洁的 UI 和使用上的便利性让 Uniswap 在半年内就成为了以太链上交易量最大的去中心化交易所。 2019 年 4 月加密货币投资公司 Paradigm 注资 100 万美元协助其发展, 2020 年 5 月 Uniswap 升级为 Uniswap V2,支持 ERC-20 代币间的直接交易,也推动促成了 2020 年 DeFi 之夏的荣景。
2021年5月19日 的加密货币市场崩盘让 Uniswap 一战成名:诸多的利空消息使比特币单日内出现近 30% 的下跌,大量的投资人涌入交易所抛售,造成许多中心化交易所陆续当机暂停交易。隔天 Uniswap 创办人 Hayden Adams 于社群网站 Twitter 上宣布 Uniswap 通过了极端的压力测试,当天总共处理了 63 亿笔链上交易,没有漏掉任何一单也没有卡币。
Uniswap 已在 2021 年 5 月时升级至 V3,用户可以指定提供流动性的价格范围,目前能够在以太坊、Polygon、Arbitrum、Optimism 以及 Celo 区块链网路上使用 Uniswap 的应用程序。
Uniswap 如何运作?
在传统的中心化交易所中,交易的发生是买卖双方经过一连串的出价与竞价后,在双方达成一致共识的情况下完成。买方由低至高提出某商品不同的购买价格和数量,对应上卖方由高至低提出该商品的不同卖出价格和数量,这就形成了该商品交易市场的订单簿 (Order Book),在订单簿上进行挂单的用户和造市商为交易的商品提供了流动性,使人们可以顺利地买入或卖出。
Uniswap 不采用订单簿系统建立交易市场,而是使用称为乘积恒定做市商 (Constant Product Market Maker) 的演算法,计算质押在流动池 (Liquidity Pool) 智能合约中的代币数量比例,以提供连续的报价。用户在交易时不需要匹配另一位用户作为对手盘,可以直接从流动池中进行资产兑换。
流动池与订单簿类似,用户通过智能合约的程序代码将资产质押在流动池中,就如同在中心化交易所的订单簿挂上买单与卖单等待成交一样,可以替买卖的商品创造流动性。将资产质押在流动池中的用户称为流动性提供者 (Liquidity Provider),依照所提供的资金占比,流动性提供者可以平均分配该流动池的交易手续费。
由于 Uniswap 把所有的交易手续费都分配给流动性提供者,因此 Uniswap 没有任何收入来源,可以视为是公共财产的一种。
乘积恒定做市商
乘积恒定做市商是自动做市商协议的一种,以数学公式 X * Y = K 为流动池中的资产计算报价。 X 和 Y 指的是该流动池中的两币种数量,K 则是一固定的值。若在直角坐标上绘制其图形,可以发现它是一条双曲线。
当用户通过流动池进行资产兑换时,仅会造成流动池中 X 币种和 Y 币种数量上的变化,流动池中的总流动性 K 值并不会受到任何影响,因此代币价格情况沿着双曲线移动。当用户支付流动池 X 币种以获得 Y 币种时,可以依照获得的 Y 币种数量除以所支付的 X 币种数量,计算出 Y 币种与 X 币种之间的相对价格。
比如,在 Uniswap 上有一个 ETH/USDT 的流动池,里面有 10 个 ETH 和 1000 个 USDT。若 Alice 耗用 1000 个 USDT 从该流动池兑换 ETH,在流动池不收取手续费的情况下,根据乘积恒定做市商公式
10 x 1000 = 5 x 2000
可以计算出流动池将剩下 5 个 ETH 和 2000 USDT。由于 Alice 支付了 1000 个 USDT 获得 5 个 ETH,因此 Alice 的 ETH 兑换价格为
|(2000 - 1000)/(5-10)| = 200 USDT/ETH
可以发现到这是双曲线上两点间割线斜率的倒数之绝对值。
当兑换的量非常小的时候,这条割线将与 X * Y = K 的切线重合,因此乘积恒定做市商算法的报价,即为双曲线的切线斜率之倒数 X/Y,流动池中两币种的数量比例决定了相对价格。
添加或减少流动池中的流动性时,则会造成 K 值的变化,使得双曲线向右或向左移动。比如说,在 Uniswap 上有一个 ETH/USDT 的流动池,里面有 10 个 ETH 和 1000 个 USDT。若 Bob 添加 30 个 ETH 和 3000 个 USDT 进入该流动池,根据乘积恒定做市商公式可以计算出流动池的总流动性为
(10+30) (1000+3000) = 160000
在直角坐标上绘制其图形,会发现双曲线向右移动了。
流动池中的总流动性增加,将使流动池更能吸收用户兑换所造成的价格波动,也会降低用户交易时的价格滑点;相反地,流动池中的总流动性减少,将使流动池更容易因为用户的兑换而产生价格变化,增加用户交易时的价格滑点。
比如说,在 Uniswap 上有一个 ETH/USDT 的流动池,里面有 10 个 ETH 和 1000 个 USDT。在 Bob 添加流动性前,Alice 耗用 1000 个 USDT 可以从该流动池兑换 5 个 ETH,ETH 的兑换价格为 200 USDT/ETH。
若 Bob 在 Alice 兑换前先添加 30 个 ETH 和 3000 个 USDT 进入该流动池,使总流动性成为 40 4000 = 160000,这时 Alice 耗用 1000 个 USDT 从该流动池兑换 ETH ,在流动池不收取手续费的情况下,根据乘积恒定做市商公式可知
40 4000 = 32 5000
Alice 将获得 8 个 ETH,因此 Alice 的 ETH 兑换价格为
|(5000 - 4000)/(32-40)| = 125 USDT/ETH
从以上范例可以看出,在兑换数量相同的情况下,总流动性充裕的流动池不容易因为用户的兑换而产生价格波动,用户也能以较低的成本取得需要的代币。
无差异曲线
乘积恒定做市商的公式,在经济学上属于无差异曲线的一种。无差异曲线指的是两种不同的商品组合,对消费者而言可以产生相同的效用与价值,将这些组合点串连起来即可绘制出无差异曲线。无差异曲线的斜率是负值,意味着流动池在总流动性不变的条件下,若想增加一种资产就必须减少另一种资产,减少的资产即为兑换行为的机会成本。
因此,乘积恒定做市商就其本质而言是以物易物的模式,用户从流动池中兑换资产,不需要交易对手的匹配,兑换的过程中没有使用其他货币,价格直接以流动池中的资产作为计算单位。可以说,流动池在很大程度上展示了货币的三大功能 (价值储存、交易媒介、计价单位),开拓了使用多元资产作为多种通货的想像空间,其运作机制上的高效和创新,也带动了区块链流动性挖矿的热潮。
无常损失
Uniswap 的用户除了可以利用流动池进行代币的兑换之外,也可以将持有的加密货币质押在 Uniswap 的流动池中,作为流动性提供者收取交易手续费。然而流动性的提供者需要承担一种称作无常损失 (Impermanent Loss) 的风险,它也是成为流动性提供者所需付出的机会成本。
无常损失会在流动池中的两代币资产发生相对价格变化时出现。比如,目前市场上 1 ETH 的价格为 100 USDT,Alice 将 1 ETH 和 100 USDT 存入流动池中,而流动池总共有 10 ETH 和 1000 USDT,总流动性为 10000,Alice 持有 10% 的份额。
当市场 ETH 的价格上升至 400 USDT 时,由于流动池中的 ETH 价格较为便宜,市场上的套利交易者会将 USDT 投入流动池兑换成 ETH,使得流动池中 ETH 与 USDT 的数量发生变化,直到流动池中 ETH 报价与市场上价格一致,最终流动池中会剩下 5 ETH 和 2000 USDT。
Alice 此时提取持有的 10% 份额,会得到 0.5 ETH 和 200 USDT,总价值为 400 USDT。然而 Alice 当初若不将资产投入流动池的话,她仍然会持有 1 ETH 和 100 USDT,总价值为 500 USDT,由此可知在 ETH 价格上涨的过程中,流动池已将 Alice 持有的部分 ETH 兑换成 USDT,成为流动性提供者的获利反而较低,Alice 经历到了无常损失。
只有在两代币资产的相对价格没有变化时,无常损失才会消失。对于 Alice 而言,若市场上 1 ETH 的价格从 400 USDT 下跌回 100 USDT 时,流动池又恢复成 10 ETH 和 1000 USDT 的总流动性,Alice 此时提取持有的 10% 份额,还是可以取回最初投入的 1 ETH 和 100 USDT。然而因为 Uniswap 的流动性提供者可以收取流动池交易手续费的 0.3%,在真实情况中 Alice 赎回时获得的 ETH 和 USDT 数量将大于投入的 1 ETH 和 100 USDT。
无常损失的计算较为复杂,有许多网站提供了简便的无常损失计算机,只需要输入两种代币投入流动池与赎回时的价格,就可以得知无常损失的大小。
Uniswap V3
从 2018 年底上线至今,Uniswap 已进行过多次的更新和升级,在 2021 年 5 月时 Uniswap V3 正式上线,并且引入了资本效率的概念。乘积恒定做市商的特色在于能够提供大范围的连续报价,无论价格变化多剧烈,流动池中永远都会有两种代币可以计算出相对价格,但这也意味着流动池的资金利用率非常低,任何时刻都只使用到很小部分的资金进行交易,远离目前市场交易价格区间的资金几乎都处在闲置的状态。
Uniswap V3 增加了指定价格范围提供流动性的功能,流动性提供者在添加流动性时,可以设定将自己的流动性集中在交易最热络的价格区间,这可以确保所添加的流动性充分地被利用,也能让流动性提供者赚取更多的交易手续费收益。
然而指定价格范围提供流动性并非毫无缺点,不同流动性提供者持有的 Uniswap V3 流动池份额代币 (Liquidity Pool Token) 价格区间不尽相同,因此这些流动池份额代币都属于独一无二的非同值化代币 (Non Fungible Token)。 Uniswap V2 的流动池份额代币可以作为抵押品存入其他的 DeFi 协议,目前 Uniswap V3 的流动池份额代币尚未具备这样的功能。
指定价格范围提供流动性,也有利于积极主动的流动性提供者,通过不断地追踪行情和优化策略,获得的交易手续费将远高于被动的流动性提供者。
如何使用 Uniswap
Uniswap 的操作方式相当直观和简单,要使用 Uniswap 的服务,需要先准备一个可以连结以太坊区块链的钱包。由于 Uniswap 是开源协议,任何人都可以使用其代码建立网页前端应用程序,若无特别需求,一般都是从项目方的网站 https://app.uniswap.org/ 进入。
以下为通过 Uniswap 兑换代币的操作步骤:
- 进入 Uniswap 应用程序的页面
- 连接自己的加密货币钱包,像是 Metamask 和 Trust Wallet,或是硬件钱包如 Trezor 和 Ledger Nano S
- 选择兑换前支付的代币
- 选择兑换后获取的代币
- 点击「Swap」按钮
- 当弹窗出现时,可以预览交易结果
- 于钱包中确认交易请求
- 完成后,可以在区块链浏览器 https://etherscan.io 上查询交易状态
关于 Uniswap 代币
Uniswap 协议的代币是 UNI,是在 2020 年 9 月份发行。 UNI 是一种治理代币,这意味着持有人可以对协议的发展方向做出提案并参与投票。将治理权交给社群有助于协议的去中心化,也能确保 Uniswap 的开发团队将重视其需求与利益,以获得社群的支持和信赖。
UNI 是以太坊上价格成长幅度最高的空投代币之一,在 2020年9月1日 之前曾经使用过 Uniswap 应用程序的以太坊地址,都有资格领取 400 UNI 的空投代币。这笔空投在当天即有将近 1200 美元的价值,若用 2021 年的价格高点计算,则相当于 16000 美元收益。
UNI 代币的总供给量为 10 亿,在初始发行时 60% 分配给社群,其余的 40 % 会在 4 年内分批解锁给团队成员、投资者、和顾问。
Uniswap 开发团队与投资人持有的代币占比较大,且发起提案和表决通过所需的票数门槛仍然偏高。在 Uniswap 上发起一则提案需要持有 250 万枚 UNI 代币,而通过提案会需要获得超过 4000 万枚 UNI 代币的支持,如何让 Uniswap 协议更加地去中心化迈向有效的社群治理,将会是 Uniswap 所需面对的课题之一。
图来自 uniswap.org
总结
Uniswap 是以太坊上去中心化金融板块的龙头项目,诞生至今的数年间实现了许多区块链的创新,不仅验证了自动做市商的可行性,其开源代码更启发了许多项目团队,不同种类的演算法和去中心化交易所如雨后春笋般纷纷出现。
Uniswap 协议让用户可以轻易地兑换 ERC-20 代币,或是成为流动性提供者收取交易手续费,解决了以往去中心化交易所的诸多困境。可以说 Uniswap 的出现为区块链世界打开了一扇大门,带动起去中心化金融的繁荣。随着以太坊 2.0 的网络升级,Uniswap 开发团队和社群也会继续成长,为人们带来更多的惊奇。