Flotación no permitida en solidez frente a lugares decimales solicitados para contrato de token

Sabemos que la solidez no admite los valores flotantes. Pero aquí ( https://www.ethereum.org/token#understanding-the-code ) aceptan un parámetro de entrada 'lugares decimales' para fines de cálculo. ¿Cómo se ha ejecutado esta acción cuando se crea este token usando el contrato escrito usando solidez?

Respuestas (2)

Lo que realmente está sucediendo en los contratos de fichas subdivisibles (y en ETH en sí) es que la unidad real es pequeña. Muy, muy pequeño. Un solo éter es en realidad solo 10 ^ 18 wei. Por el bien de los usuarios, se muestra en las distintas interfaces como un número decimal de ETH.

El mismo principio se aplica en los contratos simbólicos. Internamente, es solo una unidad estándar que contiene números gigantescos, pero cuando se muestra, la interfaz lo convierte en un número pequeño y legible por humanos.

Esto es para que el token se pueda dividir en casi cualquier cantidad, y si de repente necesita dividirse aún más , todo lo que se necesita es ajustar la interfaz para manejarlo.

Aquí hay algunos ejemplos de la respuesta de @Matthew.

Si hay un token con decimals = 2, el usuario debe tener un balanceOf100 para ver 1,00 en las interfaces de usuario (como Mist o Ethereum Wallet). Si el usuario balanceOfes solo 1, en la interfaz de usuario verá 0.01.

En cuanto al código, establecer decimals16 es una manera fácil de asignar 100 tokens por cada 1 ETH. Cuando un contrato recibe 1 ETH (que es msg.valuede 10 ^ 18) y asigna tokens a un usuario, el del usuario balanceOfsería 10 ^ 18, pero se mostrarían 100 (10 ^ 18 / 10 ^ 16).

¿Qué pasa con el lado del contrato? ¿Cómo se gestionará la oferta total? supongamos que si 10 ether = 1 token y alguien invirtió 15 ether, entonces, ¿cómo gestionará la emisión de tokens, porque si solo podemos mostrar el 1.5 en la interfaz de usuario, también debería reflejarse en el contrato, lo cual no es posible? El contrato emitirá 1 token para que no pueda mostrar los datos incorrectos.
En el lado del contrato, 15 ETH serán balanceOf15*10^18; decimalsserá 19. La interfaz de usuario mostrará el número correcto de 1,5 (de 15*10^18/10^19) tokens para el usuario. Recuerde, los contratos tienen un número gigantesco como mencionó @Matthew.