Аудит смарт контракта Rocket.Cash от BitStat

0
72

Аудит смарт контракта Rocket.Cash от BitStat

Исходный код смарт-контракта Rocket Cash сопровождается огромным количеством комментариев на английском языке. Несомненно, это сделано из добрых и светлых побуждений, но чтение после этого становится немного затруднительным. Код написан внятно и понятно, поэтому комментарий в каждой строке немного избыточен, а иногда даже сбивает с толку.

Аудит смарт контракта Rocket.Cash от BitStat

Разберём используемые переменные и константы.

start = 1541678400 — константа, которая хранит в себе дату и время запуска проекта (8 ноября 2018). Вводить средства раньше этой даты допустимо, так как они замораживаются ждут своего часа. Работать вклад начнёт только в 12.00 UTC 8 ноября 2018.

Invested – хранилище суммы вклада;

lastInvestmentTime – хранилище начальной точки отсчёта для каждого вклада;

collected – хранилище суммы для выплаты от предыдущих вкладов в случае реинвеста;

investedTotal – общая сумма всех депозитов;

investorsCount – общее число всех инвесторов. Данный счётчик увеличивается даже в том случае, если инвестор вывел депозит, а потом снова сделал вклад. Соответственно, счётчик считает количество вкладов, а не инвесторов. Проблема не критичная, так как счётчик используется только для сбора статистики.

administrationFund = 0x97a121027a529B96f1a71135457Ab8e353060811 – адрес администрации;

Используемые события:

Аудит смарт контракта Rocket.Cash от BitStat

investment – отлавливается момент инвестирования;

withdraw – отлавливается момент снятия депозита;

Далее идёт безымянная функция, которая отвечает за приём всех транзакций. Функция довольно длинная и содержит в себе большое количество условий. Разберём их по отдельности.

Основные 2 условия и ветвления зависят от присланной суммы. Если прислали сумму отличную от нуля – инвестор хочет сделать вклад (строка 25). Во всех других случаях (строка 52) – инвестор хочет забрать дивиденды вместе с телом вклада.

Аудит смарт контракта Rocket.Cash от BitStat

Рассмотрим алгоритм внесения вклада (строки 25 — 51). В строке 27 идёт сравнение текущей даты с датой старта проекта. Если проект уже стартовал, то запускается процесс создания депозита, который начинается с определения имеющихся вкладов. Когда таковой имеется (строка 29) – запускается процесс реинвеста: сумма полагаемых дивидендов записывается в массив collected и сбрасывается счётчик времени на текущую дату и время. В случае, когда инвестор пришёл впервые (строка 43): обновляется общая статистика инвестирования. Далее механизм работы общий как для реинвеста, так и для нового вклада. В массив invested записывается значение присланной суммы, с которой тут же взымается комиссия. В строке 48 отправляется 15% на развитие проекта. Генерируется оповещение о новом кладе для статистики на сайте. На этом этапе процесс создания депозита завершается. Стоит заметить, что счётчик времени обновляется в любом случае – реинвест это был или новый вклад.

Рассмотрим алгоритм возврата депозита.

Аудит смарт контракта Rocket.Cash от BitStat

В строке 55 вызывается функция availableWithdraw, которая вычисляет сумму доступную для снятия. Если полученная сумма не равна нулю, то запускается алгоритм выплаты и обнуления инвестора. Обнуляется счётчик времени, сумма инвестирования и накопленная прибыль от предыдущих вкладов. Логика верная, никаких нарушений не обнаружено.

Аудит смарт контракта Rocket.Cash от BitStat

Функция availableWithdraw начинается с того, что идёт проверка старта проекта. Если проект ещё не запущен – функция вернёт 0 рублей и 0 копеек для снятия. Следует отметить, что функция доступна на вкладке Read Contract и воспользоваться ею может каждый инвестор для того, чтобы определить сколько дивидендов он может получить в данный момент времени. В строке 75 проверяется наличие вклада у инвестора. Далее идёт вычисление значений для двух переменных:

dividends – сумма дивидендов, которую положено выплатить за весь срок работы вклада;

canReturn – сумма равная 85% от суммы вклада;

После вычислений данные переменные сравниваются. Если canReturn больше переменной dividends, то выплачивается 85% от вклада (происходит money back) и наоборот.

Сумма дивидендов определяется функцией availableDividends.

Аудит смарт контракта Rocket.Cash от BitStat

Конечная выплата = накопленные дивиденды от предыдущих вкладов + дивиденды от текущего вклада * время хранения текущего вклада. Дивиденды текущего вклада зависят от функции dailyDividends, которая возвращает сумму выплаты в день в зависимости от общей суммы вклада.

Аудит смарт контракта Rocket.Cash от BitStat

Логика данной функции такова:

  • менее 1 ETH – 2,22% в день;
  • от 1 ETH до 5 ETH – 2,55% в день;
  • более 5 ETH – 2,88% в день;

Заявленные суммы соответствуют действительности, работоспособность данного алгоритма проверена на практике – всё работает.

Итоги аудита смарт контракта Rocket Cash от BitStat

В первой версии смарт контракта нами была найдена критическая ошибка логики — экономический баг. При определенных действиях админ мог прокручивать деньги и мгновенно получать прибыль за счет партнерских процентов. В данной версии, код отвечающий за реферальную программу убран, дыра ушла.

В ходе тестирования работы смарт-контракта была обнаружена небольшая проблема «последнего инвестора». Так как контракт выдаёт только весь депозит + дивиденды, то крупные инвесторы могут столкнуться с тем, что не смогут снять свой депозит в конце жизни проекта. Т.е., если было инвестировано 10 Eth, выждали до конца и на момент выплаты в кассе всего 9 Eth, то не вернётся ничего. Вся оставшаяся сумма останется на счету контракта для более мелкого инвестора. Так что, крупные инвесторы, которые хотят держать депозит до конца, внимательно следите за кассой.

К негативным моментам можно отнести тот факт, что в коде проекта отсутствует библиотека безопасной математики. В коде огромное количество формул, которые могут дать неверный результат из-за переполнения. Такова вероятность очень мала, но она есть.

Владелец контракта Rocket Cash не имеет доступа ко всей «кассе». Остановить, изменить контракт или повлиять на бизнес-логику также нет возможности. Дыр и бекдоров нет. Заявленные проценты на сайте проекта соответствуют тем, что есть в коде. Все чисто, подходит для инвестиций.

Приходите на обсуждение проектов в наш чат: https://t.me/joinchat/C1ie2RK-ocDXAyuh2f00rA.

Предупреждение

Не рассматривайте этот текст как финансовый совет. Наша команда — не инвестиционные консультанты, мы просто делимся своим личным мнением. Прежде чем инвестировать, пожалуйста, проведите собственный технический и рыночный анализ.
Все материалы сайта носят исключительно информационный характер и не могут быть расценены как призыв к действию. Вкладывая свои деньги, Вы можете ничего не заработать или потерять всё. Ответственность за принятие решений лежит только на Вас.

Хотите зарабатывать на крипте? Подписывайтесь на наши Telegram каналы!

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here