在Solidity中实现指数衰减函数

时间:2018-06-28 17:44:13

标签: ethereum solidity

我正在使用ERC-721令牌,该令牌具有内置的版权使用费功能,即,当用户发行令牌时,他选择ETH中的版权使用费,并且他有权在每个二级市场上获得该费用。贸易。另外,用户持有属于特定发行者的令牌越多,特许权使用费就越低,我需要实现指数衰减函数来计算折扣。

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

例如,令牌的特许权使用费为0.01 ETH,在合同中,它将表示为10000000000000000 WEI。现在,买方持有该发行者的10个令牌,现在他将购买其第11个令牌,因此特许权使用费的计算方式为

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

此功能可以在Solidity中使用吗?预先感谢。

1 个答案:

答案 0 :(得分:1)

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

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

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

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