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

05 ноя 2018 10:07:44 Аудиты смартов

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

Как инвестировать: Обзор и отзывы о смарт-контракте Rocket Cash - от 2.22% в день. Зашли в rocket.cash на 7 эфиров

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Баг баунти. Если Вы нашли что-то критическое после нас, пишите, возьмем в команду или договоримся о единоразовом вознаграждении.

Как инвестировать: Обзор и отзывы о смарт-контракте Rocket Cash - от 2.22% в день. Зашли в rocket.cash на 7 эфиров

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

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

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

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

2 коммента1 037 просмотров
Читайте также
Комментарии
постраничноцеликом
датапопулярные
Leshik777
0

05.11.2018 10:52:51#
Спасибо за подробное описание смарт-контракта. Очень доступно и понятно)
BitStat
0

05.11.2018 10:55:32#
Пожалуйста.
Только зарегистрированные пользователи могут писать комментарии.
Авторизуйтесь, пожалуйста, или зарегистрируйтесь.
Новые смарты
Смотреть все
Вклады в смарты
Рейтинг смартов
Архив смартов
Смотреть все
Подписывайтесь