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

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

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

Традиционные проекты на смарт-контрактах потихонечку начинают терять интерес у инвесторов, поэтому им на смену приходит что-то другое. Сегодня у нас «в гостях» играАудит смарт контракта Ether Garden от BitStatEther Garden с возможностью заработка ETH.

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

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

Структура Farmer – основной тип данных, который будет хранить в себе информацию об инвесторах (фермерах). Структура содержит в себе 3 поля:

vegetableId –код овоща, который выращивает фермер;

startGrowing – начало выращивания (временная точка отсчёта);

fieldSize — количество полей у фермера;

Общедоступные переменные:

vegetablesTradeBalance – количество всех проданных овощей определённого типа плюс 20% от всех купленных полей;

farmers – хранилище всех фермеров;

gameStarted – признак того, что игра запущена (true – запущена / false — остановлена);

initialized – признак того, что игра инициализирована (true – запущена / false — остановлена);

marketing – адрес маркетинга = 0x25e6142178Fc3Afb7533739F5eDDD4a41227576A;

admin – адрес администратора = 0xf27951803bbb725968c6a3628c3767ab69242c5c;

Закрытые переменные:

maxVegetableId = 4 – максимальный индекс овощей (всего 4 вида);

minimumInvest = 0.001 ether – минимальный размер инвестиции;

growingSpeed = 1 days – период времени выращивания 1 овоща;

Конструктор данного смарт-контракта содержит в себе всего лишь одну строку, которая запоминает адрес админа (строка 51).

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

Модификатор onlyAdmin позволяет запускать функции только тем, кто является владельцем адреса admin. Модификатор isInitialized проверят, запущена игра или нет. Т.е., если вызывается функция с таким модификатором и один из признаков запуска игры находится в false, то функция аварийно завершится.

Рассмотрим код payable-функции, которая вызывается при совершении транзакции в адрес смарт-контракта.

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

В строке 71 идёт выборка информации об инвесторе и сохраняется в переменной farmer. Следом идёт определение суммы перевода, которая влияет на вызов основных функция контракта. Если сумма находится в диапазоне от 0 до 0.00001 ether, то запускается функция продажи овощей. В тоже время, если инвестору не присвоено значение vegetableId (тип овоща), то вызываются функции назначения случайного типа овощей и выдаётся бесплатное поле. В том случае, когда сумма инвестиции равна 0.00001111 ether, запускается реинвестирование. Во всех остальных случаях запускается покупка полей (функция buyField()).

Функция sellVegetables() отвечает за продажу овощей, которые успел вырастить фермер.

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

В строке 97 вызывается функция определения количества овощей, которая возвращает количество полей умноженное на число дней.

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

Т.е., получается, что 1 поле за 1 день даёт 1 единицу продукции. Овощи растут сразу, за день вырастает количество овощей равное размеру поля. В строке 98 идёт проверка результата, и если он больше нуля, то идёт расчёт суммы выплаты.

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

Сумма выплаты высчитывается по простой наглядной формуле: цена овоща умноженное на количество. Цена овоща (строка 201) зависит от общего баланса контракта и количества проданной продукции данного типа. В строках 101 – 104 идёт сравнение общего баланса контракта с предполагаемой выплатой контракта. Если она выше баланса, то выплачивается весь остаток контракта и игра останавливается. При каждой выплате взимается комиссия, которая рассчитывается функцией devFee() (строка 107).

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

Как видно из формулы, размер комиссии составляет 4%.

После определения размера комиссии идёт обновление счётчика времени, переменной vegetablesTradeBalance и выплата дивидендов и комиссии. (строки 109 — 115).

Функция buyField() отвечает за покупку полей.

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

Первым делом идёт проверка суммы инвестиции. Если она меньше минимальной, то транзакция отклоняется. Затем идёт выборка данных об инвесторе из хранилища farmers. Переменная acres хранит в себе количество полей, которое можно купить за присланную сумму ETH. Стоимость одного поля определяется функцией fieldPrice().

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

В строках 212 – 213 запускается цикл по всем типам овощей для определения всего количества проданных овощей (CommonTradeBalance). В конечном итоге, цена поля есть общий баланс контракта минус присланная сумма и всё это делиться на CommnTradeBalance.

Из строки 127 видно, что если фермер не новичок, то запускается продажа имеющихся овощей. Затем идёт обновление времени начала инвестирования и добавление купленных полей

Строка 134 прибавляет 20% от количества купленных полей к общему количеству проданных овощей данного типа, который имеется у фермера.

В завершении функции идёт выплата комиссии 4% на маркетинг и в строках 139 – 143 определяется адрес реферера, на который отправляется всё те же 4%от суммы.

Функция reinvest() отвечает, как это не странно, за реинвест.

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

Алгоритм функции достаточно прост: определить, сколько овощей есть на данный момент (строка 151), и добавить точно такое же количество полей (строка 155). Обновить время. Примечательно, что реинвест не влияет на стоимость овощей в игре, в отличие от продажи/покупки.

Для получения бесплатного поля новому фермеру используется функция getFreeField().

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

Бесплатное поле полагается лишь новичку, поэтому в строке 161 проверяется наличие полей у фермера. Если они есть, то бесплатно ничего не получить. Если же полей нет, то запускается функция freeFieldSize().

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

Функция возвращает количество полей, которое можно купить за 0.001 ether на данный момент и в строке 163 данное количество полей присвоиться фермеру.

Для запуска работы всего проекта используется функция initMarket, запустить которую может только администратор. Причём, запустить её можно лишь в том случае, если игра ещё не запущена (строка 169).

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

Это хорошо, так как данная функция позволяет админу менять стоимость всех овощей (строки 174 — 175). Соответственно, когда игра уже будет запущена, ничего изменить не получится.

Как уже было упомянуто выше, функция rollFieldId() отвечает за выдачу типа овощей фермеру.

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

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

Функция для перевода массива байт в адрес осталась стандартной и никаким изменениям не подверглась.

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

Любой проект, где присутствуют серьёзные вычисления с большими числами, обязан иметь в себе библиотеку безопасной математики SafeMath. Игра Аудит смарт контракта Ether Garden от BitStatEther Garden не стала исключением.

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

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

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

Все заявленные проценты и условия совпадают с теми, что прописаны в исходном коде смарт-контракта Аудит смарт контракта Ether Garden от BitStatEther Garden. Так как код имеет достаточно запутанную логику, не исключены логические ошибки. Стоит отметить, первая версия отработала без проблем, жалоб не видели.

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

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

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

О нас binvestcoin

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

BTC восстанавливается на 12% за 72 часа, но трейдеры призывают проявлять осторожность. Обзор рынка

С 8 декабря цена BTC выросла с 3210$ до 3588$ — примерно на 12% по ...