Главная / Новости Криптовалют / Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

Как отличить серьёзный проект от пустышки-однодневки?! Правильно, по наличию подробного описания проекта в комментарии. Строки 3 – 53 описывают деятельность организации и условия сотрудничества с инвесторами.

Следом идёт расширенная версия безопасной математики SafeMath, которая помимо всего прочего содержит подробные комментарии к каждой функции.

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

Исходный код контракта Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?Oasis начинается с подключения библиотеки SafeMath для типов uint256. Далее идёт список констант, на котором остановимся подробно. Напомним, что константа – переменная которая никогда не будет меняться на протяжении всего кода.

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

ONE_HUNDRED_PERCENTS = 10000 — константа, которая используется для корректных расчётов процентов;

DAILY_INTEREST = 300; — дневной процент возврата средств = 3%;

MARKETING_FEE = 1500; — отчисления на маркетинг = 15%;

TEAM_FEE = 400; — отчисления на тех. Поддержку и сопровождение проекта;

CHARITY_FEE = 100; — отчисления на благотворительность = 1%;

MAX_DEPOSIT_TIME = 50 days; — максимальное количество дней для каждого вклада = 50;

REFERRER_ACTIVATION_PERIOD = 0; — период активации реферера = 0 (нет периода);

MAX_USER_DEPOSITS_COUNT = 50; — максимальное количество вкладов с одного адреса;

REFBACK_PERCENT = 150; — процент рефбека = 1,5%;

referralPercents – массив процентов для отчислений рефералов различных уровней;

Уже из такого обширного количества констант можно понять, что перед нами довольно универсальный и гибкий проект. Т.е., если данный смарт-контракт покажет себя с наилучшей стороны, то нас будет ожидать волна клонов. Будут появляться похожие проекты, только с другими процентами и ограничениями. Поэтому, стоит запомнить имя Отца-проекта – Oasis.

Следом за константами идут хранилища Deposit и User в виде структур.

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

Структура Deposit состоит из поля time – время совершения вклада и суммы amount. Структура User более обширна:

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

firstTime – время регистрации инвестора в проекте;

lastPayment – время крайней выплаты;

deposits – хранилище всех депозитов инвестора;

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

Открытым текстом прописаны адреса:

  • Маркетинг — 0xDB6827de6b9Fc722Dc4EFa7e35f3b78c54932494;
  • Команда поддержки — 0x31CdA77ab136c8b971511473c3D04BBF7EAe8C0f;
  • Благотворительность — 0x36c92a9Da5256EaA5Ccc355415271b7d2682f32E;

totalDeposits – общее количество всех депозитов;

running – состояние проекта: запущен/остановлен;

users – хранилище всех инвесторов;

Строки 140-148 содержат обширный список событий (events).

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

События позволяют отлавливать ключевые моменты контракта (регистрация нового инвестора, совершение вклада, вывод средств и т.д.) для отображения статистической информации на сайте проекта.

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

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

Строка 151 проверяет состояние проекта. Если он находится в рабочем состоянии (имеются средства на счёте), то всё хорошо, можно работать дальше. Иначе – Ваше взаимодействие с контрактом скоропостижно заканчивается. В строке 152 создаётся переменная user, хранящая в себе информацию об инвесторе и его депозитах. В строке 155 создаётся переменная dividends, хранящая в себе список всех вкладов инвестора. В строке 156 идёт вычисление общей суммы, которую необходимо выплатить инвестору на текущий момент времени по всем вкладам. Если общая сумма дивидендов положительная, то совершается проверка платёжеспособности контракта в строке 158. Если на балансе контракта находится меньшая сумма, то вся она выплачивается инвестору и проект переходит в состояние «СКАМ».

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

В строке 163 идёт выплата инвестору общей суммы дивидендов. Следующая строка обновляет время крайней выплаты. Далее запускается цикл, которые генерирует события для каждого выплаченного депозита, которые можно отловить и оперативно обновить статистику на сайте проекта.

После выплаты запускается цикл очистки, который проверяет весь список депозитов инвестора и удаляет те, срок которых уже подошёл к концу (50 дней).

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

Начиная со строки 186, запускается процесс создания нового депозита, если была прислана ненулевая транзакция.

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

В строке 188 идёт проверка времени регистрации пользователя. Если оно равно нулю, то создаётся новый пользователь(инвестор), время создания и сумма депозита заносятся в хранилище.

После того, как пользователь опознан, ему создаётся новый депозит. В строке 199 идёт проверка на максимальное количество депозитов. Если она не проходит, то транзакция не проходит, депозит не создаётся.

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

В строке 203 вновь созданный депозит добавляется к общему количеству вкладов в проекте. Всё это сопровождается событиями, которые обновляют статистику на сайте.

После успешного внесения депозита, идёт определение реферера и выплата соответствующих вознаграждений.

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

В строке 208 запускается процесс получения адреса реферера. Следом идёт огромное количество проверок на валидность полученного адреса. Адрес не может быть нулевым, не должен быть равен адресу инвестора, реферер должен быть зарегистрирован в системе и его период активации пройден. Если все условия выполняются, то реферер записывается в хранилище и в строке 212 идёт выплата рефбека. После того, как инвестору был отправлен рефбек, следует выплата реферальских всем реферерам. Как мы помним, партнёрская программа данного проекта многоуровневая, поэтому выплата осуществляется в цикле.

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

Если у реферера есть реферер, то ему тоже идёт соответствующий процент от суммы депозита. И так по цепочке 3 раза.
Когда рефереры получили свои выплаты, идут отчисления на развитие проекта.

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

Последовательно вычисляются суммы на маркетинг, техническую поддержку и благотворительность. В строках 230-232 всё это выплачивается на соответствующие кошельки.

Помимо многоуровневой партнёрской системы, контракт предусматривает такой вариант, когда реферер приглашает нового инвестора, а сам не инвестирует.

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

Для этого рефереру необходимо выслать нулевую транзакцию в адрес проекта, которая создаст пользователя и ему будут приходить реферальские отчисления. К огромному сожалению, именно в этом месте скрывается баг, который позволяет вывести кому угодно всю кассу! В текущей новой версии это исправлено (описание ниже). Такому вновь созданному пользователю не присваивается значение последней выплаты lastPayment и она остаётся нулевой. Соответственно, если такой пользователь совершит депозит и попытается вывести проценты, то ему будет начислена огромная сумма. Почему так происходит? Всё дело в том, что время в Solidity измеряется числами шагом в 1 секунду. На сегодняшний момент «настоящее время» = 1540840498. Как мы помним, вычисление суммы дивидендов зависит от временного промежутка. А у нас появился пользователь, который собирается сделать вывод во время 1540840498, сделав вклад в 0 отметке. Т.е., с момента вклада прошло 1540840498 секунд, а это почти 49 лет. Естественно, ему будет полагаться большая сумма к выплате. Её даже в кассе нет, настолько она большая. Но смарт-контракт это не останавливает, он с радостью выдаёт всю кассу в строках 158-160 и после этого прекращает свою работу.

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

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

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

Функция depositCountForUser – возвращает количество депозитов пользователя.

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

Функция depositForUser – возвращает информацию по конкретному депозиту. Index – порядковый номер депозита.

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

Функция dividentsSumForUser – возвращает сумму всех дивидендов, которую положено выплатить инвестору на момент вызова.

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

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

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

howOld – промежуток времени от начала вклада до текущего момента, т.е. время жизни вклада;

duration – промежуток времени от предыдущего вывода процентов до текущего времени;

overtime – промежуток времени, на который вклад был передержан сверх 50 установленных дней;

По сути, данная функция очень аккуратно работает только с промежутками времени для каждого вклада. После того, как получен финальный временной промежуток удержания депозита, вызывается функция dividentsForAmountAndTime, которая вычисляет сумму к выплате по конкретному вкладу.

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

Функция _bytesToAddress – стандартная функция для подобных проектов, которая переводит массив байт в ethereum-адрес.

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

Завершается смарт-контракт функцией _dividendsSum, которая возвращает общую сумму всех вкладов по всему проекту.

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

Исходный код смарт-контракта довольно сложен для понимания, относительно других смарт-контрактов. А как мы знаем, чем сложнее механизм, тем он чаще ломается. Проект Oasis прямое тому подтверждение! Писал его очень опытный и толковый программист, за ним проверяли не менее опытные ребята… А в итоге – всё сломалось! К счастью, после случайного вывода каким-то инвестором, ошибку быстро нашёл один из разработчиков контракта и успел вывести кассу и вернул деньги в новую версию контракта.

Новая версия смарт-контракта Oasis

Как и было обещано, в новую версию контракта вернули всю старую базу инвесторов.

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

prevContract – ссылка на предыдущую версию контракта, из которой будут вытягиваться данные;

wasImported – таблица, которая хранит данные о том, был инвестор импортирован или нет;

Чтобы проверить внесли инвестора в новую базу или нет, можно зайти на вкладку Read Contract на странице с исходным кодом контракта и ввести адрес кошелька рядом с переменной wasImported.

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

Если данный запрос возвращает true, значит у вас всё хорошо.

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

В строках 177-178 отсеиваются те, кто успел зайти в предыдущий проект с нулевой точкой отсчёта крайней выплаты депозита. Как было сказано выше, данная проблема позволяла вывести всю кассу в любой момент.

В структуре пользователя появилось новое поле refStartTime, которое хранит в себе время, когда пользователь стал реферером.

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

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

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

При добавлении реферала данная информация учитывается и не позволяет стать реферером, если она равна нулю.

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

Одно из самых важных изменений является то, что была внесена проверка на нулевой счётчик времени при внесении депозита.

Аудит смарт контракта OASIS от BitStat. Что случилось и как исправили?

Теперь в любом случае, когда вносится какая-то сумма идёт проверка переменной lastPayment на нулевое значение.
Новая версия смарт-контракта была проверена на тестовом стенде на предмет старой уязвимости – всё исправлено.

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

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

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

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

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

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

О нас investcoin

BInvestCoin новости криптовалют,прогнозы криптовалют 2018,курс криптовалют онлайн в реальном,где купить криптовалюту,биржи криптовалют,торговля криптовалютой,майнинг криптовалюты

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

14 ноября Binance будет проводить обновление системы. Биржа будет недоступна минимум 8 часов!

Команда Binance уведомила пользователей платформы о том, что 14 ноября 2018 года будет происходить 8-часовая ...