我正在嘗試計算流動性提供者的獎勵,我發現 Uniswap 顯然使用了這個等式:
Basic Formula (L = liquidity): (L_you / L_others) * (24h_swap_volume * pool_fee_rate)
我正在嘗試在我的智能合約中實作這一點,但我似乎無法做到,因為其他人持有的流動性總是大于您持有的需要十進制值的流動性,所以我的問題是:如何在 Solidity 智能合約中使用這個等式而不會陷入浮點地獄?
uj5u.com熱心網友回復:
在進行了更多挖掘之后,我發現您可以使用 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/hifi-finance/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://www.uj5u.com/qita/387549.html
上一篇:我想回圈這個,每次回圈我想要 1所以它列印(123..直到無限)但它列印21212...我做錯了什么?
下一篇:反轉矢量位置變換
