在固体中实现指数衰减函数



我正在研究一个ERC-721代币,其中有一个内置的版税功能,即当用户发行代币时,他选择ETH的特许权使用费,他有权在每次二级市场交易中获得该费用。此外,用户持有的属于特定发行人的代币越多,特许权使用费就越低,我需要实现指数衰减函数来计算折扣。

M = e ^ (-x / 50)
where, e is Euler's number
so the discountedFee = M * standardFee

例如,代币的特许权使用费为 0.01 ETH,在合约中,它将表示为 100000000000000000000 WEI。现在买家持有该发行人的 10 个代币,现在他即将购买他的第 11 个代币,因此特许权使用费将计算为

M = e ^ (-10 / 50) = 0.818
discountedFee = M * standardFee = 0.0081 ETH

这在坚固性中可以发挥作用吗?提前谢谢。

在固体中实现真正的指数衰减是非常困难的,更不用说昂贵了,因为该语言不支持浮点运算。此链接可能会有所帮助。

就个人而言,我用一系列线性函数近似指数衰减,目标是特定时间段内的半衰期。

function getPrice(uint256 value, uint256 t, uint256 halfLife) public pure returns (uint256 price) {
value >>= (t / halfLife);
t %= halfLife;
price = value - value * t / halfLife / 2;
}

我的代码中的半衰期是两天内的秒数。

最新更新