Разработчики смарт-контракта криптобиржи допустили ошибку в коде, в результате исправлять ситуацию пришлось вручную, а компания потеряла 7 млн долларов.

В начале 2018-го года криптобиржа Legolas Exchange (LGO) привлекла около 30 млн долларов финансирования, выпустила токен стандарта ERC-20 на Эфириуме с предусмотренным вознаграждением ходлерам,в размере 5% от количества удерживаемых токенов каждые 6 месяцев первые два года.

Однако, разработчики смарт-контрактов написали неизменяемый код таким образом, что 20% токенов для выплаты бонусов оказались утрачены. В частности, код смарт-контракт включал в себя следующую функцию: // calculate the bonus for one holded LGO uint256 bonusByLgo = (BONUS_AMOUNT / 4)/unspentAmounts[_bonusDate].

Таким образом, переменная bonusByLgo ожидает достижения процентного значения, например, 0,05, в то время как uint256 может соответствовать лишь значениям целого числа. Поэтому, при подсчете процента бонуса, пользователь всегда получит 0% из-за стандартного процесса округления, кроме одного единственного случая, когда 95% владельцев токенов переместят свои активы одновременно, что крайне нереалистично. Помимо этого бага, ключевые функции контракта, оперировавшего 30 млн долларов, не были полностью протестированы.

Команда LGO справилась с проблемой вручную, с помощью собственных средств, которые составили 20% эмиссии токенов так, что владельцы токенов ничего и не заметили, но ошибка стоила компании около 7 млн долларов.