Что делают киты
  • 1 056 949$usdt
    перевод на binance
  • 2 292 675$btc
    перевод на coinbase
  • 1 977 494$btc
    неизвестно
  • 1 910 906$btc
    перевод на huobi
  • 1 071 828$btc
    перевод на binance
Подробнее

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

19 окт 2018 09:43:47 Аудиты смартов

Исходный код проекта Green Ethereus не отстаёт от современных тенденций, так как содержит в себе полный набор математических функций библиотеки SafeMath для безопасных подсчётов. Ничего нового в неё не добавлено, поэтому заострять своё внимание на ней мы не будем. Всё стандартно.

Непосредственно здесь про сам проект: Обзор и отзывы о смарт-контракте Green Ethereus - 4%. Зашли в green-ethereus.com на 5 эфиров

Контракт же берёт своё начало со строки под номером 45. В строке 46 идёт логическое подключение библиотеки SafeMath для типа uint.

Остановимся на переменных, которые будут сопровождать нас на протяжении всего исходного кода контракта.

owner – адрес владельца контракта;

marketing – адрес, куда будут отправляться средства на рекламу;

admin – адрес администратора проекта;

Все данные инвесторов разбросаны в 6 хранилищах:

index – количество депозитов;

deposit – сумма вклада;

finish – дата, когда депозит прекратит свою работу;

referrers – адрес реферера;

refBonus – бонусная сумма, которая будет начисляться за рефералов;

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

Конструктор – метод, который выполняется всего лишь один раз при создании контракта. Переменная owner хранит в себе ethereum-адрес того, кто запустил контракт и выполнил метод-конструктор. При запуске были переданы адреса admin и marketing, которые скрыты для посторонних глаз.

Функция renounceOwnership позволяет создателю контракта удалить свой адрес. К слову, на данный момент это уже сделано. Функция bytesToAddress традиционно конвертирует массив байт из поля Data в понятный для чтения адрес реферера. Кочует из проекта в проект в неизменном виде.

Строки 83-93 содержат функцию, которая устанавливает реферера инвестору. Сперва идёт расшифровка поля Data, присланного при совершении перевода. Если был указан адрес отличный от того, с которого совершался платёж, то он записывается в хранилище. Инвестору начисляется 3% от суммы, а тому кто пригласил – 10%. Далее посылаются уведомления всем заинтересованным лицам об этом событиями LogNewReferrer и LogReferralInvestment.

Весь основной функционал контракта запускается строкой 95, которая содержит безымянную функцию, вызываемую при совершении транзакции.

Если пришло 0 ether, то запускается механизм вывода начислений и бонусов. Иначе, запускается функция invest. Данная функция отвечает за механизм инвестирования.

Инвестирование начинается с того, что проверяется сумма платежа. Если она меньше 0,05 Ether, то ничего не получится. Далее идёт отчисление 3% админу. Строка 108 проверяет, был ли совершён вклад ранее или есть ли начисленные бонусы от рефералов. Если это так, то запускается выплата средств функцией withdraw, которую мы рассмотрим чуть позже. Выполняется проверка на то, есть ли уже вклад от данного инвестора. Если таковой имеется, то количество вкладов возрастает на единицу. Строка 115 устанавливает отсчёт времени на текущий момент. Установка даты окончания и суммы вклада осуществляется в строках 116-117. Строки 119 – 129 занимаются дроблением суммы вклада: реферер получает 10%, в маркетинг уходит 14%. Если реферер не указан, то все 24% от суммы вклада идут на развитие проекта.

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

Переменная _payout начинает собирать сумму выплаты. Сперва туда попадает refBonus, который успел накапать от рефералов. Естественно, после этого он обнуляется в хранилище, чтобы не получать несколько раз и не унести всю кассу. Строка 138 запускает цикл, который проходит по всем вкладам инвестора и собирает с них проценты. Строка 140 проверяет окончание срока вклада. В зависимости от того, вышел срок или нет, идёт выплата 4% в день за полагаемый период. Затем, счётчик времени устанавливается на текущий момент. Строки 150-151 осуществляют выплату всех насчитанных процентов.

К сожалению, функция withdraw имеет очень серьёзную логическую ошибку, которая ведёт к потере выплат. Если быть точнее, выплачиваться будут проценты только по первому вкладу. Поэтому, ни в коем случае нельзя реинвестировать! Всё дело в том, что в цикле, где идёт суммирование всех депозитов осуществляется сброс точки отсчёта времени депозита (строка 142 и строка 145). Соответственно, когда цикл обрабатывает первый депозит, он обновляет счётчик времени. А счётчик времени один на все депозиты. Поэтому, когда идёт обработка следующего депозита, его счётчик времени уже сбит и начисление не проходит. Чтобы исправить данную проблему, необходимо удалить строку 142, а строку 145 перенести за пределы цикла for и поместить в строку 152. Стоит отметить, про то что можно иметь только один вклад написано прямо на сайте.

Весь оставшийся код проекта отвечает за предоставление информации для статистики и учёта.

Функция getInfo1 возвращает общую сумму всех вкладов инвестора, которые ещё работают.

Функция getInfo2 показывает какое количество Эфира составляет конкретный вклад инвестора.

Функция getInfo3 выводит сумму выплаты, которые можно получить в данный момент времени, если её заказать. Стоит заметить, что в отличие от функции withdraw, функция корректно показывает предполагаемую сумму, даже если имеется более одного депозита. А всё потому, что сброса счётчика времени тут вовсе нет. Его по логике тут и не должно быть.

Воспользоваться функционалом данных функций можно на вкладке Read Contract в Etherscan.

К примеру, если ввести в строку _address адрес кошелька инвестора и в строку _number номер вклада, то мы увидим сумму вклада под данным номером, нажав на кнопку Query.

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

Аудит исходного кода контракта Green Ethereus показал, что владелец контракта не имеет доступа ко всей «кассе». Все заявленные цифры по процентам соответствуют действительности. Остановить, изменить контракт или повлиять на бизнес-логику также нет возможности. К сожалению, присутствуют ошибки в бизнес-логике, которые влекут за собой потерю средств. Ни в коем случае нельзя совершать более одного вклада! Возвращается только первый депозит, остальные зависают в кассе навсегда. О том что можно иметь только один вклад, написано на сайте.

Как инвестировать: Обзор и отзывы о смарт-контракте Green Ethereus - 4%. Зашли в green-ethereus.com на 5 эфиров

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

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

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

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

0 комментов8 298 просмотров
Читайте также
Комментарии
Только зарегистрированные пользователи могут писать комментарии.
Авторизуйтесь, пожалуйста, или зарегистрируйтесь.
Подписывайтесь