美文网首页
区块链 - 深入理解Uniswap协议

区块链 - 深入理解Uniswap协议

作者: 4b89d0b56094 | 来源:发表于2019-12-10 23:30 被阅读0次

    最近想换换脑子,看了看Uniswap协议。Uniswap协议是一种通过智能合约实现代币间自动交易的协议。本文介绍Uniswap协议,生态,交易价格以及流动性收益的计算。

    01Uniswap协议基本介绍

    Uniswap协议通过智能合约实现了代币之间的自动交易。目前,Uniswap协议已经在以太坊上部署,可以实现ETH和代币以及代币和代币的之间交易。Uniswap协议的整个框架如下图所示:

    image

    Uniswap Exchange Factory以及Uniswap Exchange都是由以太坊上的智能合约(vyper语言)实现,相关的代码的github地址如下:

    https://github.com/Uniswap/contracts-vyper

    通过UniswapExchangeFactory可以创建Uniswap Exchange。每个Uniswap Exchange实现一种代币和ETH之间的交易。

    在多种代币都能和ETH交易的前提下,代币和代币之间也能交易,如下图所示:

    image

    两个Exchange,一个提供了ABC和ETH的交易,一个提供了XYZ和ETH的交易。通过Uniswap协议,一个用户可以先通过ABC to ETH Exchange将ABC转成ETH,接着再通过XYZ to ETH Exchage将ETH转换成XYZ。整个过程Uniswap自动完成,从用户的角度来看,ABC代币直接转换成了XYZ代币。

    02Uniswap生态

    Uniswap交易生态中,除了需要交易的用户外,还有一个特别重要的角色:流动性提供者。对一个Exchange来说,流动性提供者提供了ETH以及相应的Token。只有有足够多的流动性,用户才能顺畅的交易,并能保持价格在合理的范围。

    image

    普通交易用户,通过Exchange,实现一个代币和ETH之间的交换。流动性提供者,同时提供代币和ETH。交易的用户每笔交易需要支付一定的交易费用(0.3%)。这些费用被流动性提供者均分。

    03x-y-k做市商模型

    Uniswap协议使用的是x-y-k做市商模型,实现x和y之间的自动交易。Uniswap协议在github上有对x-y-k模型的详细介绍:

    https://github.com/runtimeverification/verified-smart-contracts/blob/uniswap/uniswap/x-y-k.pdf

    3.1 x-y-k模型

    所谓的x-y-k模型,是因为在这个模型下,xy = k。可以想象成x和y,分别是两种代币的数量。在x和y交易时,在没有交易费用的情况下,xy永远等于k,不变:

    image

    alpha和beta分别是每次交易的变化量。从上面的公式可以看出,变化前(xy)和变化后(x‘y')是相等的。

    Uniswap协议在该模型的基础上,引入了交易费用,新的模型计算公式如下:

    image

    引入交易费用,增加了rho变量。很容易可以看出,引入交易费用后,x'y'是比xy的乘积大。

    3.2 交易价格计算

    交易价格的计算分成两种:一种是给定X的数量,计算能买到的Y的数量(Input);一种是给定Y的数量,计算需要的X数量(Output)。

    getInputPrice的计算公式如下:

    image

    也就是说,Delta X的代币能换取Delta Y的其他代币。此时,Y代币的价格为:

    image

    简单的说,买入越多X,alpha越大,价格也越高。如果alpha为1的话(用当前流动性中X总额相等的X代币买入),也只能买差不多流动性中的一半的Y代币。如果把x/y视作当前Exchange的价格的话,一次买入后,价格变化为:

    image

    也就是说,“价格”是随着买卖的比例二次函数变化:

    image

    getOutputPrice的计算公式如下:

    image

    也就是说,Delta Y的代币能换取Delta X的X代币。此时,Y代币的价格为:

    image

    简单的说,买入越多Y,beta越大,价格也越高。如果beta为1/2的话(买入当前流动性中一半的Y代币),大约需要当前流动性中等量的X代币。getInputPrice和getOutputPrice分别从两种代币角度计算价格,具体的价格是一致的。注意,价格计算公式只区分价格计算的两种方向,并没有制定X,Y具体代表的代币类型。举个例子,如果一个Exchange支持的是ETH和ABC交易,你可以把ETH当作X,ABC当作Y,同样你可以将ABC当作X,ETH当作Y。

    3.3 流动性计算

    流动性提供者可以随时增加/删除流动性。Uniswap协议文档,用一个三元组(e, t, l)来代表Exchange的状态,其中e代表ETH的数量,t代表Token的数量,l代表当前流动性总量。

    增加流动性(addLiquidity)的计算公式如下:

    image

    增加流动性,就是增加同等比例的e和t。

    删除流动性(removeLiquidity)的计算公式如下:

    image

    删除流动性,就是依据流动性的占比,等比例的减少e和t。

    很容易看出,增加流动性和删除流通性时都是按照x/y的价格计算的。需要指出的是,在智能合约实现时,需要考虑计算的精度。

    3.4 流动性收益计算

    到目前为止,我们已经知道,增加流动性和删除流通性都是按照当时x/y的价格计算的。Exchange的买卖会导致x/y的波动。先不考虑交易费用的情况下,可以先将模型退化到x*y=k的情况,看看流动性提供者的收益:

    假设初始时,Exchange的代币流通性是e和t,经过一些交易后变成e'和t',et=e't'。

    image

    假设P'/P=x, 则收益曲线如下:

    image

    很容易看出,只要x/y有变化,在没有交易费用的情况下,没有盈利可能。最好的情况,e/t不变的话,没有损失。在有交易费用的情况下,只有交易费用足够多,能抵消价格波动的损失的情况下,才有可能盈利。

    总结:

    Uniswap协议是一种通过智能合约实现代币间自动交易的协议。Uniswap协议采用x-y-k交易商模型。交易的价格随着交易金额的比例成二次函数变化。流动性提供者在没有交易费用的情况下,没有盈利的可能性。只有足够多的交易费用的情况下,才有可能盈利。


    image.png

    相关文章

      网友评论

          本文标题:区块链 - 深入理解Uniswap协议

          本文链接:https://www.haomeiwen.com/subject/fkmngctx.html