背景

群里大佬出了一道据说是Web3的面试题目

一个uni v2交易对 项目方冲入了 100ETH和10000 Token,获得1000枚LP。现在老哥手里有10个ETH,想all in做市,请问他该换多少个eth为token去搭配lp(手续费不计)

题目分析

这道题主要考察Uni V2的两个知识点

1、AMM的数学模型,做交易的时候LP上的两种资产的数值要保持乘积不变

2、组LP的逻辑,组LP的时候两类资产需要与当前LP上的比例保持一致,组完后常数K会做一次更新

变量描述

T : Token 10000

E : Eth 100

A: 老哥手头上的初始Eth 10

$$ T*E=K (T=10000, E=100) $$

用手头的Eth兑换出T

$$ 1、(T-\Delta{T})(E + \Delta{E}) = K
$$

将获得的 $\Delta{T}$ 跟剩余的 $A-\Delta{E}$ 去增加流动性做市,得到第二个方程,其中$0<\Delta{E} < A$

$$ 2、\Delta{T}/(A-\Delta{E}) = (T-\Delta{T})/(E + \Delta{E}) $$

通过公式1、2消元获得一元二次方程:

$$ \Delta{E}^2+200\Delta{E}-1000=0 (0<\Delta{E} < A) $$

对其求解得到$\Delta{E}$存在两个解分别为4.8809和110.084(舍弃)

$$ \Delta{E} = 4.8809, \Delta{T}=465.3754 $$

所以最终用手头上的4.8809个Eth换取 465.3754个Token,将剩下的5.1191个Eth和获取的Token组LP

原题目是不考虑手续费的版本,那如果考虑手续费呢,我们假设手续费率为$\beta$,在第一步兑换的时候需要将手续费考虑进去,因为手续费是不纳入到LP里面做流动性的,得到方程3

$$ 3、(T-\Delta{T})(E + \Delta{E}* (1-\beta{}) ) = K
$$

在将剩余的Eth和获得的Token拿去组LP,就得到方程4

$$ 4、\Delta{T}/(A-\Delta{E}) = (T-\Delta{T})/(E + \Delta{E}* (1-\beta{})) $$

解法与上面的类似,就不做重复计算了,留给读者去练习一下。