¿Cómo enviar ether en decimales?

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?

Respuestas (1)

¿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 giveAwayDividendfallará cada vez, ejecutando out of gas.

Vaya, acabo de mirar a Wei y tienes razón, no hay problema con mi pregunta. En cuanto a la segunda pregunta, ¿cuánto tiempo exactamente hará que mi función falle? Debido a que solo lo llamo trimestralmente, está bien pagar algo de dinero por esa llamada de función cuatro veces al año, aunque solo cada vez se ejecute con éxito.
Me alegro de poder ayudar. El tiempo no es un problema aquí, es la cantidad de pagos. En una cierta cantidad de direcciones que paga, los requisitos de gas serán demasiado altos.
¿Debería ser "100/50000 * 10" "(10 * 100) / 50000" debido a que no hay punto flotante? Supongo que en este caso, dado que el resultado de 100/50000 es un número entero, no importa, pero es curiosidad.
Evita siempre las situaciones de punto flotante y escribe los números como una multiplicación con un factor que tiene un exponencial, de esa manera evitas errores. por ejemplo, si calcula ETH con wei, escriba 1 * 10^18 en lugar de 1000000000000000000.