一文读懂完全链上运行的去中心化交易平台 Uniswap

原文标题:《Uniswap —— 一家不走寻常路的交易所》

一文读懂完全链上运行的去中心化交易平台 Uniswap (1)

Uniswap 是在以太坊上推出的一个极有意思的项目。它是一个去中心化代币交易所的协议,但与目前看到的一般协议很不一样。几年前,Vitalik 在 reddit 上发了一条帖子,Uniswap 的创始人 Hayden Adams 因此受到启发,但他一开始只是抱着学习 Solidity 的想法。不过很快,这项编程练习就收到了一笔来自以太坊基金会的奖金。Uniswap 是一组部署到以太坊网络上的智能合约,这意味着整个过程都是在链上进行的。Uniswap 没有自己的代币,完全去中心化,也没有任何手续费流向创始人。虽然 Uniswap 的机制需要一些时间来习惯,但我们会发现,与传统的去中心化交易所(DEX)相比,这种代币交易协议拥有一些显著的优点。

一文读懂完全链上运行的去中心化交易平台 Uniswap (2)

简介

Uniswap 独特的架构完全摆脱了限价订单的概念。不同寻常的是,做市商在提供流动性时不再指定交易价格,而是只提供资金,然后 Uniswap 会负责余下的事情。

在 Coinbase 这样典型的传统交易所上,做市商常常按不同价位提供不同的流动性。假设一位交易者手头有 1000 美元和 10ETH。他可能会以 80 美元买 5ETH 以及 60 美元买 10ETH 来挂买单。同时,他可能会以 120 美元卖 4ETH 以及 140 美元卖 6ETH 来挂卖单。他们会选择以自己乐意交易的各种价位做市。总的来说,所有交易者的挂单就组成了交易所的限价订单簿。随着市场行情的上涨或下跌,交易者可能会以其指定的价格成交,也可能不会成交。通常来说,ETH 的「行情报价」为最高买单和最低卖单的中间值。

现在假设 Coinbase 把每个人的买单和卖单汇集到两个大的交易池中——可以想象,有的交易者可能不太喜欢这种做法。他们不希望自己的订单与其他人的混在一起,或者不希望让 Coinbase 代表他们以任意价位执行交易。

然而,Uniswap 却正是这么做的。做市商不再指定他们愿意买入或卖出 ETH 的价格。相反,Uniswap 会将每个人的流动资产汇集在一起,并根据某种确定性的算法做市。该算法称为「自动做市商」(AMM),它会根据某些预定义的规则集向最终用户报价。举个非常简单的 AMM 例子:某种交易机器人(bot)策略会以市场价格的中间值为基准,每隔 1 美元(低于 1 美元)提供买单和卖单(高于 1 美元),并随着市场的变化不断修改下单。

AMM 并不是死板的,不同的算法各有权衡取舍。Uniswap 使用了一种被称为「恒定乘积做市商模型」的算法。这种 AMM 的其中一大特点是,无论订单簿规模有多大,或者流动性资金池有多小,它都能提供流动性。其中的窍门是随着需方数量(买单)的增加,渐进式地增加代币的价格。虽然这对较大的订单不太友好(稍后会详述),但系统永远不必担心流动性不足,它几乎能一直有效运作。

交易者需知

举个 ETH / DAI 交易对的简单例子。假设做市商已经为这一流动性池注入了 100,000 DAI 和 1,000 ETH 的资金。Uniswap 将这两个数量相乘(100,000 x 1,000 = 100,000,000)。

一文读懂完全链上运行的去中心化交易平台 Uniswap (3)

Uniswap 针对这一特定交易对的目标是:无论交易活动多少,该产品都将始终保持 1 亿的交易对乘积数量(因此称为「恒定乘积做市商」)。要记住 x * y = k 这一关键公式,其中 x 和 y 是流动性池中的代币数量,k 是乘积。要想保持 k 恒定,x 和 y 只能相互反向变动。比如某一交易者在此合约中用 DAI 购买 ETH,则他们正在增加 x (因为增加了流动池中的 DAI),同时也减少了 y (因为减少了流动池中的 ETH)。但这个反向变化不是线性增长的关系。如果现在你要购买 100ETH 而不是 10ETH,那么在购买 10ETH 所需的 DAI 的基础上增加 10 倍,可能并不够用。事实上所需的 DAI 是渐进式增加的。最简单的理解方法是绘制 x * y = k 曲线。

一文读懂完全链上运行的去中心化交易平台 Uniswap (4)如图所示,水平方向衡量花费的币 A 的数量,越往右移,单位数量得到的收益(即收到的币 B 的数量)越少(Y 值变动越小)

在这个系统中需要注意的是关键点在于:报价直接取决于订单的大小。越往曲线右端移动,单位投入获得的收益越少。假设当前的 ETH / DAI 价格为 100,不同数量订单所需支付的溢价见下表:

一文读懂完全链上运行的去中心化交易平台 Uniswap (5)

如表所示,当购买 ETH 的数量超过流动性池的 2% 时,购买大量的 ETH 就会很昂贵。不过要记住,这些溢价乃是由当前流动性池的规模决定的。如果流动性池大了 100 倍(即 1000 万 DAI 和 10 万 ETH),这时候只购买 50ETH 就没那么贵了。最终,支付价格反映的是交易规模对 x / y 比率的改变程度。流动性池越大,处理大订单就越容易(这正是我们所期望的)。

值得注意的一点是是抢先交易(front running),当今以太坊上的所有 DEX 都存在这个问题。为缓解这一问题,Uniswap 允许用户在下单时指定最高价格。这样,即便矿工抢先交易某一订单,用户也不会被迫接受更高的价格。虽然用户可能会错过这笔交易,但他们不需要支付更高价格。Uniswap 的另一个特点是「订单到期」,该功能可以防止矿工搁置已签名的交易并等到价格变动后再处理。

ERC-20 到 ERC-20 的代币互换无需使用专门的流动性池。例如,在处理 REP <> ZRX 订单时,系统将先通过 REP/ETH 交易对,再自动通过 ZRX/ETH 交易对。

流动性提供者需知

流动性提供者面临的情况要更复杂。举个 ETH/DAI 市场的例子。首先,流动性提供者(以及交易者)要注意,x/y 比率代表交易对的价格。在我们当前使用例子中,x/y = 100,000 DAI / 1,000 ETH = 100。假设 ETH 在 Coinbase 上价格是 100 美元。如果 x/y 不等于 100,那么 Uniswap 和 Coinbase 之间将存在套利机会。

当流动性提供者向池中增加流动性时,他不能只向交易对的一方提供流动性,这样会改变两种代币间的比率、设定出一个新交易价格(这是个危险操作,因为他将立即被交易对手套利,从而赔钱)。例如,某一流动性提供者仅增加了 1,000ETH,则合约的新比率为 100,000 / 2,000 = 50。套利者将蜂拥而至,直至该比率再次变成 100:1。流动性提供者必须为交易对的两个币种提供等值的资金(Uniswap 接口将确保不会出现错误操作)。

假设在增加 10,000DAI 和 100ETH (总市值 20,000 美元)之后,流动性池现在总共有 100,000 DAI 和 1,000ETH。由于注入的金额相当于总流动性池的 10%,因此合约会产出一种「流动性代币(liquidity token)」,将其提供给做市商,使其有权获得池中可用流动性的 10%。这些代币不是用于交易的投机币,而只是一种用于记录流动性提供方债权的会计或者说记账工具。如果其他人随后存币或者取币,则将会产生或者销毁新的流动性代币,保证每个人在流动资金池中的相对份额保持不变。

现在假设 Coinbase 上 ETH 的价格从 100 美元涨到 150 美元。在经过一番套利之后,Uniswap 合约也将反映出这一价格变化。交易者将增加 DAI,减少 ETH,直到新比率变成 150 : 1。这会对流动性提供者造成什么影响呢?合约反映出的数字会接近 122,400DAI 和 817ETH (做个算数检查一下这些数字的是否准确:122,400 * 817 = 100,000,000 (恒定乘积),122,400 / 817 = 150 (新价格))。如果把我们有权获得的 10% 提取出来,那么现在会变成 12,240DAI 和 81.7ETH。此时的总市值为 24,500 美元。做市导致错失了大约 500 美元的利润。

显然,没有人愿意抱着做慈善的心态提供流动性,收益又不能从炒币中获得(因为也没得炒)。所以,总交易量的 0.3% 会按比例分配给所有流动性提供者。默认情况下,这些费用会重新注入流动性池,但可随时收取。在不知道中间交易量的情况下,很难说交易费的收入和做市的损失孰高孰低。对流动性提供者来说,显然行情波动越多越好。

核心价值

好吧,和常规的基于限价订单簿的交易所相比,Uniswap 这种机制听上去要复杂得多。溢价也使得大型交易的成本过高。那它到底有什么好处呢?简而言之,流动性的汇集解决了订单的深度问题,而且不再有较大的买卖价差。那些不想处理限价订单的中小交易者会喜欢这一点(在我们看到的所有加密货币交易平台中,Uniswap 的 UX 是最容易上手的)。在 Uniswap 上,无需挂买单或卖单,也不用进行繁重的计算。流动性提供者也可以一劳永逸,订单和仓位管理方面的开销也明显减少。这是一种很佛系的提供流动性并赚取费用的方式。

Uniswap 还为 dApp 之间(或计算机设备之间)的交易注入了活力。在一个拥有数百万微交易的世界中,与让人不得不留意特定价格的流动性需求相比,融入一个巨大的流动性池更有意义。提升小订单的最佳报价变得不再有风险(想象一下卖方订单为空的 DEX)。另一个用例是证券型代币用 Uniswap 支付分红。

有些聪明的读者可能已经意识到,其实这个模型与去年推出的 Bancor 网络非常相似,但 Uniswap 不收取任何上币费用,消耗的 Gas 少得多,并且更加去中心化。Bancor 要求上币方抵押 BNT,同时要需要填写上币申请表,而且 BNT 很容易被随意冻结。而 Uniswap 不存在这些问题, 只要以太坊网络在,Uniswap 就会持续运转下去。

目前,Uniswap 所有合约的流动 ETH 资金只有几千,因此仍处于早期阶段。由于总会有巨鳄想要交易大宗订单,因此 Uniswap 不太可能取代其他类型的 DEX,但它的独特功能肯定会吸引到许多想要快速、简单获取各种代币的普通交易者。

原文链接

作者:以太坊爱好者 | 来源:链闻