скажем, у меня есть функция, которая отдает дивиденды в зависимости от того, сколько акций принадлежит этому клиенту:
// Give away dividend based on how many balances of each customer has
function giveAwayDividend(uint _value) onlyOwner {
for(uint i=0;i<size();i++){
//balances[customerAddress[i]] = balances[customerAddress[i]].add(balances[customerAddress[i]]*_value/totalSupply);
//Transfer(msg.sender, customerAddress[i], (balances[customerAddress[i]] * _value / totalSupply) );
customerAddress[i].send((balances[customerAddress[i]] * _value) / totalSupply);
}
}
проблема в том, как мне отправить эфир десятичными знаками? Если у клиента А есть 100 монет, общий запас 50000 монет, общая сумма дивидендов 10 эфиров, он должен получить 100/50000 * 10 = 0,02 эфира, но здесь я думаю (балансы[customerAddress[i]] * _value) / totalSupply даст я 0?
Как мне это исправить?
В чем именно заключается ваша проблема с реализацией 100/50000 * 10 = 0,02ETH? Балансы обрабатываются в Wei bei по умолчанию, 1 Wei * 10^18 = 1ETH, поэтому 0,02ETH == 200000000000000000 Wei, используйте этот конвертер единиц .
Я вижу в этом более фундаментальную проблему: если customerAddress[i]
получается долго, вызов giveAwayDividend
каждый раз будет терпеть неудачу, запуская out of gas
.
купол какой-то
Никита Фукс
Томас Джей Раш
Никита Фукс