我正在使用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中使用吗?预先感谢。
答案 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;
}
我代码中的半衰期是两天内的秒数。