pregunta básica de tasa de token de contrato inteligente de ethereum zepplin crowdsale

Una pregunta básica sobre cómo el código de solidez de zepplin calcula las tasas de token. Los comentarios del código dicen

// cuántas unidades de token obtiene un comprador por wei

 uint256 public rate;

sin embargo, no podemos hacer que devuelva 1000 tokens por ETH cuando pasamos una cantidad como tasa;

function Crowdsale(uint256 _startTime, uint256 _endTime, uint256 _rate, address _wallet) {
    require(_startTime >= now);
    require(_endTime >= _startTime);
    require(_rate > 0);
    require(_wallet != address(0));

    token = createTokenContract();
    startTime = _startTime;
    endTime = _endTime;
    rate = _rate;
    wallet = _wallet;
  }

la tasa se utiliza en;

   uint256 weiAmount = msg.value;

    // calculate token amount to be created
    uint256 tokens = weiAmount.mul(rate);

Una vez más, cualquier tasa que enviemos, alta o baja, no sale a 1,000 tokens por eth.

¿Alguien puede explicar el funcionamiento de este cálculo para que podamos llegar allí?

Gracias

Si establece la tasa en 1000, debería obtener 1000 tokens por 1 ETH. ¿Que estas obteniendo?
1,000,000,000,000,000,000,000 fichas
¿Puedes mostrar cómo inicializas los valores en el constructeur?
Actualmente se usa el panel disponible en Remix para pasar los parámetros a la función EG "1515058816", "1515318016", "1000", "0x9D0E154f6C85378cE43d9b95c9Df51131E7b369A"
1000 siendo la tasa
luego lanzando a través de metamask y usando la billetera ethereum para ver el contrato

Respuestas (1)

Es probable que esto se deba a su valor de decimales. ¿Supongo que tiene los tokens decimales establecidos en 18? Tenga en cuenta que en lugar de 1000 tokens, obtiene 1 000 000 000 000 000 000, donde 18 de esos 0 son de su variable decimal y los otros 3 son 1000. Este es todo el comportamiento esperado.

no hay un punto decimal después de 1000, son solo 0, que se muestran en metamask y etherscan, por lo que parece que la cantidad de wei multiplicada hace que el número sea extremadamente grande. el número que salió fue "282,236,629,591,925,000,000,000,000,000,000,000,00".
Los decimales no existen en la cadena de bloques de Ethereum, solo existen números enteros. Entonces, los decimales se representan como ceros adicionales y con la variable "decimales" para mostrar dónde colocar el decimal para el usuario. Para que el token se muestre correctamente en metamask, debe configurar correctamente la variable decimal en metamask.
@flygoing es correcto, esto se debe a los decimales, su respuesta debe aceptarse