作者:扎克-赫斯, Zack Hess https://github.com/zack-bitcoin/amoveo-docs/blob/master/other_blockchains/uniswap.md
拥有一个链上市场是一个糟糕的策略。矿工们可以在抢先交易(front run)。如果你甚至不打算让它安全,使用区块链真的很奇怪。区块链技术是如此昂贵。如果人们想在一个依赖信任的市场进行交易,还不如使用一个中心化的市场。链上市场的价格也可以被矿工操纵。所以我们不能把它们作为一个可靠的价格信号。 你可以使用区块链技术来保障市场的安全,而不把这个市场放在链上。这样实际上是不依赖于信任(trust-free)的。
子货币(subcurrency)是不好的 #
它只允许2个子货币(subcurrency)之间的市场,所以它只能适用于使用多个子货币(subcurrency)的区块链,这是一个破损的设计。最好的设计是一个单一的货币,并使用它来交易人们关心的任何风险。 如果你把一种货币分解成较小的不可替换(non-fungible)的子货币(subcurrency),它们的波动性都比你使用单一货币要大。 而最终,市场对各种子货币的风险对冲需求非常少。人们真正想要的是对冲石油、棉花或橙汁等方面的风险。当他们试图经营一个为真正的客户提供服务的企业时,就会出现这类风险。
可变的链上状态 mutible on-chain state #
拥有链上子货币(subcurrency)迫使你采用具有链上可变状态的设计,以存储关于子货币(subcurrency)的账户信息。这就阻碍了可扩展性(scalability)
恒定的产品做市商 Constant Product Market Maker #
这里有一篇解释恒定产品做市商的论文https://web.stanford.edu/~guillean/papers/uniswap_analysis.pdf。
- 让我们插入一些例子。
如果市场上有100个A币,和100个B币。我想买20个B币。
(100 - 20) * (100 + Cost) = 100 * 100 100 + Cost = 10000/80 Cost = 125 - 100 Cost = 25
所以我将支付25个A币来购买20个B币。
Uniswap没有订单簿。因此,假设我想购买1000个B币,我愿意支付5个A币来获得4个B币。 我必须在链上进行交易,购买20个B币。然后等待别人做相反的交易,这样价格就会回落。然后我再做一次链上交易,再买20个B币。然后我等着别人做相反的交易。
这个循环将继续下去,直到每个人都完成了50个链上的txs。 因此,在这个例子中,假设我愿意支付高于市场价格20%的价格来购买B币,只需要50个链上TXS就可以完成购买。
现在让我们考虑一下我不愿意多付这么多钱的情况。如果我每轮只买10个B币。
(100-10)*(100+成本)=10000/成本=(1000/9)-100成本=11.1
所以在这种情况下,我只多付了11%的钱。而这需要100个链上txs来完成购买。
在实践中,交易者通常不愿意支付甚至1%的费用。 所以,让我们试着从中得到一个概括性的公式。如果链上锁定的流动性是L,而我愿意多付P,我想买B多的币,那么链上txs的数量是T。
LP ~=每次购买的金额。T = B/(每次购买的金额) T = B/(LP)
因此,如果你想在1个Tx中购买10 000美元的东西,而你只愿意多付1%,那么uniswap就需要锁定1 000 000美元左右。
把大量的钱锁在合同里,按利息计算是很昂贵的。特别是uniswap使用的是低市值的子货币。 Uniswap的恒定产品市场设计要么有大量的锁定成本,这使得它的利率很高。或者它有令人望而却步的高额交易费用,或者它涉及在链上做过多的txs。或者这些失败模式的组合。