Еще один свежий 🚸аудит небольшого контракта
***
🔥 [КРИТИЧНЫЕ]
не выявлено
***
❗ [СЕРЬЕЗНЫЕ]
не выявлено
📣 [ПРЕДУПРЕЖДЕНИЯ]
не выявлено
💡 [ЗАМЕЧАНИЯ]
1. Классы из библиотеки openzeppelin-solidity не самой последней версии
Изменения в новых версиях:
незначительные оптимизации библиотеки SafeMath
изменена проверка баланса пользователя при отправке токенов теперь при ошибочном указании неправильного баланса не сжигается весь газ транзакции
2. Событие Transfer при создании токенов
Согласно стандарту при создании новых токенов следует вызывать метод Transfer с отправителем равным адресу 0x0
https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md#transfer> A token contract which creates new tokens SHOULD trigger a Transfer event with the _from address set to 0x0 when tokens are created.
3. Событие Transfer при сжигании токенов
По аналогии предыдущим пунктом в функции `burn` можно добавить вызов события Transfer с адресом назначения, равным address(0).
В библиотеке openzeppelin-solidity сделано именно так:
https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/token/ERC20/BurnableToken.sol#L434. Тип decimals
Согласно стандарту тип для `decimals` должен быть uint8:
https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md#decimals5. Запись больших чисел
Для наглядности и уменьшения риска ошибиться большие числа можно записывать так:
1925000000000000000000000000 = 1925000000 * 10**18