calcular la cantidad de fichas

Tengo variable: TokenPriceWei = 2000, eso significa que establecí 1 precio de token para 2000 Wei.

Cuando obtengo msg.value , ¿es correcto tokensAmount = (msg.value / TokenPriceWei) para obtener la cantidad de token correcta?

Me pregunto porque he visto algunos ejemplos y ninguno de ellos hace eso al calcular la tasa de token/wei.

Respuestas (1)

Esto es, en teoría, correcto, pero recuerda que no puedes representar un punto decimal en solidez.

si envias 3500wei la operacion 3500/2000=1 y no 1.75. Hay tres soluciones:

  1. Requerir esto: require(msg.value%TokenPriceWei == 0)para que las personas envíen la cantidad exacta de un número entero de tokens. (no tan amigable)

  2. Obtenga la cantidad de tokens como msg.value/TokenPriceWeiy luego devuelva al comprador esta cantidad: msg.value % TokenPriceWei, que es el residuo de la división en el ejemplo de 3500/2000este 1token comprado y luego 1500weidevuelto al usuario.

  3. Use un multiplicador para poder representar el punto decimal indirectamente. Incluya una variable decimalsluego:

    decimals = 10**3; // 3 is the number of decimal points, it can be anything you want, 18 is most used in tokens

    numberoftokens = (masg.value*decimals)/TokenPriceWei;

    Tenga en cuenta que esto genera una gran cantidad de tokens ERC20. Mist utilizará los decimales variables para corregir el valor cuando se lo presente a los usuarios. Debe recordar este multiplicador en todo lo que haga con los tokens, así es como lo hacen la mayoría de los contratos de tokens. Por ejemplo, en el ejemplo de 3500weiobtendrá: 3500*1000/2000 = 3500000/2000 = 1750Mist obtendrá los decimales 1000y mostrará que el usuario tiene 1.75tokens.

Espero eso ayude.