digamos que tengo una función que regala dividendos según la cantidad de acciones que posee el cliente:
// 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);
}
}
el problema es, ¿cómo debería poder enviar ether en decimales? Si el cliente A tiene 100 monedas, el suministro total es de 50000 monedas, el monto total del dividendo es de 10 éteres, debería obtener 100/50000 * 10 = 0,02 éteres, pero aquí creo que (saldos [dirección del cliente [i]] * _valor) / totalSupply dará yo 0?
¿Cómo debo arreglarlo?
¿Dónde está exactamente su problema al implementar 100/50000 * 10 = 0.02ETH? Los saldos se manejan de forma predeterminada en Wei bei, 1 Wei * 10^18 = 1ETH, por lo que 0.02ETH == 20000000000000000 Wei, use este convertidor de unidades .
Veo un problema más fundamental en esto: si customerAddress[i]
se alarga, la llamada giveAwayDividend
fallará cada vez, ejecutando out of gas
.
domo algunos
Nikita Fuchs
thomas jay prisa
Nikita Fuchs