Свежие новости
Главная / Аналитика криптовалют / Аудит смарт контракта SafeInvest от BitStat

Аудит смарт контракта SafeInvest от BitStat

Аудит смарт контракта SafeInvest от BitStat

Исходный код смарт-контракта Аудит смарт контракта SafeInvest от BitStatSafeInvest был на закрытом аудите. Первые версии проекта имели баги. К счастью, всё было оперативно устранено, и финальная версия успешно попала к нам на блог.

В шапке исходного кода разместилась знакомая нам библиотека SafeMath.

Аудит смарт контракта SafeInvest от BitStat

В таком виде она присутствует во многих проектах, которые исправно работают. Ничего нового не добавлено.

Контракт встречает нас довольно стандартным и привычным набором переменных. Разберём их.

Аудит смарт контракта SafeInvest от BitStat

owner – общедоступный адрес владельца контракта, который можно будет легко увидеть;

marketing — адрес на который будут поступать средства для рекламы и продвижения:

0x906Bd47Fcf07F82B98F28d1e572cA8D2273AA7CD;

admin – ethereum-адрес админа:

0xe0C507cd978F380eac44eDf22Ea734B6c16B5fCF;

Присутствуют 4 хранилища, доступ к которым осуществляется по адресу кошелька инвестора:

deposit – хранит сумму депозита;

checkpoint – точка отсчёта (время, когда был совершён вклад);

commission – признак того, выплачивалась ли комиссия администрации проекта (да/нет);

referrers – адрес реферера, который был указан при инвестировании;

События (events) срабатывают при инвестировании, выплатах и выводе реферальских. На бизнес-логику не влияют, используются для статистики.

При размещении контракта в сети Ethereum, запускается функция-конструктор, которая сохраняет адрес создателя в переменную owner.

Аудит смарт контракта SafeInvest от BitStat

Функция renounceOwnership позволяет удалить адрес создателя. Запускается она извне (external), выполнить её может только создатель контракта (owner). Так называемое «открепление контракта».

Функция bytesToAddress считывает поле Data и переводит содержимое в понятный для контракта вид – 20-тизначный Ethereum-адрес. Всё стандартно, ничего нового.

Аудит смарт контракта SafeInvest от BitStat

Далее следует самое опасное и интересное… Логика инвестирования! Будем внимательно следить за ней.

Аудит смарт контракта SafeInvest от BitStat

Если инвестор прислал сумму от нуля (включительно) до 0,0000002 ether, то запускается процесс снятия процентов. Если сумма равна 0,0000002 ether, то запускается возврат всего депозита. Во всех других случаях мы будем инвестировать, запуская функцию invest.

Аудит смарт контракта SafeInvest от BitStat

Инвестирование начинается с суммы от 0,01 ether. Первая проверка смотрит, есть ли у инвестора уже депозит в проекте. В том случае, когда уже есть, запускается функция withdraw, которой передаётся вновь переданная сумма (msg.value). Зачем? Ответ узнаем, когда будем смотреть код вышеупомянутой функции. Вторая проверка смотрит на поле Data. Если в нём всё хорошо и адрес отличается от адреса инвестора, то ссылка на реферера сохраняется в хранилище. Независимо от того, прошли Вы первую или вторую проверки, код:

checkpoint[msg.sender] = block.timestamp;
deposit[msg.sender] = deposit[msg.sender].add(msg.value);

Будет выполняться в любом случае. Т.е., установится счётчик при инвестировании и добавится сумма перевода в хранилище deposit.

Рассмотрим функцию, которая занимается выплатой процентов.

Аудит смарт контракта SafeInvest от BitStat

Нас встречают проверкой на то, уплачивали ли мы комиссию. Если не уплачивали – запускается функция firstWithdraw. Ей и передаётся значение msg.value из функции invest и сумма депозита. Получается, что даже при реинвесте мы заплатим комиссию из общей суммы. Строка 121 рассматривает тот вариант, когда комиссия уже оплачена, а инвестор вносит ещё дополнительную сумму инвестиций. Первая версия контракта не содержала данной строки кода, что позволяло инвестировать практически без комиссии. В таком случае средства на развитие поступать не будут, работать администрации будет не выгодно – проект умирает. Финальная версия контракта исправлена и имеет все шансы на долгое существование.

Далее идёт процесс вычисления суммы выплаты функцией getPayout и отправка средств инвестору. Счётчик времени сбрасывается строкой 132.

Функция firstWithdraw пытается снять с нас комиссию.

Аудит смарт контракта SafeInvest от BitStat

Первая команда устанавливает признак того, что комиссия оплачена. Затем идёт оплата функцией payCommissions.

Аудит смарт контракта SafeInvest от BitStat

Комиссия состоит из:

  • Выплата админу – 3% (строка 152 вычисляет сумму, строка 160 отправляет);
  • Маркетинг – 10% (строка 153 вычисляет сумму, строка 161 отправляет);
  • Реферальские – 5% (строка 155 вычисляет сумму, строка 156 отправляет);

Следует заметить, что комиссия будет сниматься только после первого вывода начисленных процентов, либо повторного инвестирования.

А как же идёт вычисление суммы выплаты? Заглянем в в функцию getPayout.

Аудит смарт контракта SafeInvest от BitStat

Сумма выплаты = Сумма депозита * процент * промежуток времени / 1 день. Деление на 1 день происходит в самом конце формулы, поэтому нежелательных округлений не будет. Можно снимать проценты в любое время без потерь.

Процент вычисляется функцией getInterest.

Аудит смарт контракта SafeInvest от BitStat

Логика данной функции проста как велосипед, процент зависит от имеющейся суммы вклада:

  • Менее 3 ether – 4% в день;
  • Более 3 до 6 ether – 5% в день;
  • Во всех остальных случаях – 6% в день;

К счастью, докинуть в момент снятия себе приличную сумму для повышения процента и вывести всю кассу не получится – при реинвесте счётчик времени сбрасывается, это мы видели в коде.

Ну и в заключении рассмотрим функцию moneyBack.

Аудит смарт контракта SafeInvest от BitStat

Для возврата депозита потребуется:

  • комиссия не должна быть оплаченной, т.е. вывод средств не производился;
  • положительная сумма на счёте;
  • прошло менее 7 дней со дня вклада;

В том случае, если всё это исполнится, то вы получите назад весь свой депозит. Даже комиссия не снимется. Сумма депозита обнуляется. Устанавливать признак комиссии в false не требуется, так как он в этом месте всегда будет false. Т.е., строка 148 лишняя. А вот счётчик времени не сбрасывается. Но, к счастью, при следующем инвестировании он обнулится в функции invest. Накрутить себе времени не получится.

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

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

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

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

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

О нас binvestcoin

Смотрите также

Биржа Poloniex уже готова к форку Bitcoin Cash (BCH). Добавлено два еще не существующих актива

Биржевая платформа подготовила листинг двух потенциальных цифровых активов в преддверии хард форка Bitcoin Cash (BCH), ...