我试图计算流动性提供者的回报,我发现Uniswap显然使用了这样的公式:Basic Formula (L = liquidity): (L_you / L_others) * (24h_swap_volume * pool_fee_rate)
和我试图在我的智能契约中实现这一点,但我似乎无法做到这一点,因为其他人持有的流动性总是大于您持有的流动性,而流动性需要一个十进制值,所以我的问题是:如何在不陷入浮点地狱的情况下,在可靠的智能合同中使用这个等式?
发布于 2021-12-19 04:39:00
在做了更多的研究之后,我发现您可以使用ABDKMath来实现这一点,您可以使用以下链接找到更多信息:库:https://github.com/abdk-consulting/abdk-libraries-solidity文章:https://www.bitcoininsider.org/article/68630/10x-better-fixed-point-math-solidity作为一个代码示例,这里是我如何实现这一点的一个快速片段:
uint256 fee = ABDKMath64x64.mulu(
ABDKMath64x64.divu(
tokensProvided,
others
),
taxableValue
);
这可能不是最好的解决办法,但它对我有效。此外,看看https://github.com/paulrberg/prb-math获得更高精度的定点数学库。关于气体效率,这里引用了PRB数学库中的一句话:
对于abs、exp、exp2、gm、inv、ln、log2来说,无类型PRBMath库比ABDKMath更快。反之,对于avg、div、mul、powu和sqrt,则比ABDKMath慢。PRBMath落后于ABDKMath的mul和div函数有两个技术原因
因此,对于这个用例,我认为使用ABDK数学而不是PRB数学是一个更好的主意,除非您计划将2以上转移到Wei.的128次幂中。
https://stackoverflow.com/questions/70372291
复制相似问题