Ошибка в реализации криптовалюты Zcoin позволяла повторно тратить средства


Разработчики криптовалюты Zcoin сообщили о выявлении критической ошибки в реализации клиентского ПО, которая позволяла повторно создавать расходные транзакции, т.е. потратить имеющиеся средства два раза. Проблема была выявлена в ходе разбирательства, инициированного после того, как разработчики обнаружили, что сумма расходных транзакций в системе превышает сумму средств, полученных в результате майнинга.

Отмечается, что проблема не затрагивает протокол Zerocoin и лежащие в основе криптовалюты криптографические методы, а связана только с программной ошибкой, из-за которой в коде не верно выполнялась проверка транзакций. Суть ошибки была в том, что константа MAX_SPEND_ZC_TX_PER_BLOCK, определяющая максимальное число расходных транзакций для блока была выставлена в значение "1", в то время как при сравнении со счётчиком применялось условие "if (COUNT_SPEND_ZC_TX >= MAX_SPEND_ZC_TX_PER_BLOCK) {", что подразумевало возможность проведения двух транзакций при значении счётчика 0 и 1.

Примечательно, что ошибкой успели воспользоваться мошенники, которым удалось создать примерно 370 тысяч Zcoin (около 500 тысяч долларов, что примерно 30% от общей капитализации данной криптовалюты), которые почти полностью были проданы на бирже. Ошибка также никак не влияет на анонимность Zerocoin, в том числе личности мошенников так и остались невыясненными. После обнаружения проблемы уровень капитализации Zcoin снизился с 2.6 млн долларов до 1.6 млн. Поиск на GitHub показывает, что данная проблема остаётся неисправленной как минимум ещё в трёх криптовалютах - zoin, nxcoin и kurrent.