рассчитать количество токенов

У меня есть переменная: TokenPriceWei = 2000, это означает, что я устанавливаю цену 1 токена за 2000 Wei.

Когда я получаю msg.value , правильно ли tokensAmount = (msg.value / TokenPriceWei) для получения правильной суммы токена?

Мне интересно, потому что я видел несколько примеров, и ни один из них не делает этого при расчете скорости токена/wei.

Ответы (1)

Теоретически это правильно, но помните, что вы не можете представлять десятичную точку в твердости.

если отправить 3500wei операция 3500/2000 = 1 а не 1.75. Есть три решения:

  1. Требовать это: require(msg.value%TokenPriceWei == 0), чтобы люди отправляли точную сумму за целое число токенов. (не так дружелюбно)

  2. Получите количество токенов как msg.value/TokenPriceWeiи затем верните покупателю эту сумму: msg.value % TokenPriceWei, которая является остатком от деления в примере 3500/2000это 1токен купленный и затем 1500weiвозвращенный пользователю.

  3. decimalsИспользуйте множитель, чтобы иметь возможность косвенно представлять десятичную точку . Затем включите переменную :

    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;

    Обратите внимание, что это делает огромное количество токенов ERC20. Mist будет использовать переменные десятичные дроби, чтобы исправить значение при представлении его пользователям. Вам нужно помнить об этом множителе во всем, что вы делаете с токенами, так это делается в большинстве контрактов с токенами. Например, в примере 3500weiвы получите: 3500*1000/2000 = 3500000/2000 = 1750Mist получит, что десятичные знаки есть, 1000и покажет, что у пользователя есть 1.75токены.

Надеюсь, поможет.