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

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

По правилам хорошего тона исходный код смарт-контракта Аудит смарт контракта Contractum от BitStatContractum начинается с краткого описания проекта и его маркетинг.

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

Сразу же, что бросается в глаза при беглом осмотре описания – 5.6%. Такой цифры на сайте нигде нет, а тут есть. Но, воспользовавшись даже школьными знаниями английского языка, всё становится на свои места. Цифра 5.6% приведена в описании как пример того, что случится при достижении баланса контракта 1600-1700 ETH.

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

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

Хранилища (массивы):

userInvested – сумма депозита;

userWithdraw – сумма всех выплаченных дивидендов;

userLastOperationTime – время последнего обращения к контракту;

userLastWithdrawTime – время последнего вывода дивидендов;

Константы:

INVEST_MIN_AMOUNT = 10 finney – минимальная сумма депозита (0.01 ETH);

BASE_PERCENT = 40 – ежедневный процент по вкладу (4%);

REFERRAL_PERCENT = 50 – процент партнёрской программы (5%);

MARKETING_FEE = 70 – процент отчислений на маркетинг (7%);

PROJECT_FEE = 50 – процент комиссии (5%);

PERCENTS_DIVIDER = 1000 – коэффициент для 100%;

CONTRACT_BALANCE_STEP = 100 ether – шаг увеличения процента на 0.1%;

TIME_STEP = 1 days – единица измерений прибыли;

Переменные:

totalInvested – общая сумма инвестирования;

totalWithdrawn – общая сумма вывода;

marketingAddress = 0x9631Be3F285441Eb4d52480AAA227Fa9CdC75153 – адрес маркетинга;

projectAddress = 0x53b9f206EabC211f1e60b3d98d532b819e182725 – адрес администрации;

События:

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

addedInvest – пришёл новый инвестор;

payedDividends – совершена выплата дивидендов;

payedFees – произошла выплата комиссии;

payedRefferals – произведён платёж рефереру;

После объявления всех необходимых переменных расположилась бизнес-логика работы контракта. Функции расположены не совсем последовательно, поэтому будем раскручивать всё так, как оно выполняется. При поступлении транзакции вызывается безымянная payable-функция.

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

Логика её понятна и проста. Если инвестор прислал сумму большую, чем 0.01 ETH, то запустить процесс инвестирования. В обратном случае – выплатить дивиденды и обновить счётчик времени userLastWithdrawTime. Допустим, мы прислали 1 ETH, который вызвал функцию addInvest().

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

В строке 82 определяется новичок инвестор или нет. Если новичок, то идёт обновление всех временных счётчиков. Если не новичок – выплата дивидендов, т.е., при реинвесте автоматически получите выплату. Далее последовательность действий одинакова для всех: добавление присланной суммы в общую копилку, обновление массива userInvested, путём добавления новой суммы к уже имеющейся. В строках 96 – 101 идёт вычисление сумм для выплаты комиссии и отправка их на кошельки администрации. Строки 104 – 108 отвечают за реферальные выплаты. Как видно из строки 105 нельзя стать рефералом самому себе и нельзя оставить поле пустым. Если не соблюдать эти условия, то ничего страшного не произойдёт. Средства останутся в общей кассе и будут использоваться для выплат инвесторам.

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

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

Обязательным условием является то, чтобы инвестор имел не нулевой баланс на счету, т.е. являлся инвестором (строка 114). Переменная contractBalance содержит в себе сумму всей кассы на текущий момент. Переменная percentAmount получает сумму, которую необходимо выплатить инвестору на текущий момент. А затем идёт одно единственное условие – сумма выплаты должна быть меньше текущего баланса контракта. Если это так, то дивиденды благополучно выплачиваются и обновляется статистика выплат (строки 121 — 124). Если баланс контракта меньше, чем надо выплатить инвестору, то остаток всей кассы выплачивается, контракт обнуляется (строки 127 — 130). При любом исходе зафиксируется момент обращения инвестора и обновится счётчик времени в строке 133. Было замечено, что логика контракта работает таким образом, что при реинвесте переменная userLastWithdrawTime не обновляется, поэтому накопленный повышенный процент остаётся. Следовательно, при больших суммах лучше получать дивиденды не нулевой транзакцией, а минимальной для реинвеста. Тогда накопленный повышенный процент будет только расти.

Осталось разобраться как идёт вычисление дивидендов инвестору в переменной percentAmount (строка 117).

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

Функция getUserDividends вызывает в первой же строке функцию getUserPercentRate, которая вычисляет персональный процент для текущего пользователя. Затем вычисляется время прошедшее с момента последнего обращения инвестора к контракту (строка 74). В конечном итоге сумма дивидендов = время * персональный процент. Посмотрим, как вычисляется персональный процент.

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

Персональный процент представляет собой сумму процента (contractBalanceRate), который зависит от общего баланса контракта и процента, который зависит от времени удержания вклада.

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

Формула вычисления процента, зависящего от баланса контракта довольно проста. В строке 54 идёт определение общего баланса контракта. Затем общий баланс делиться на 100 ETH и полученное число прибавляется к базовому проценту 4%. К примеру, если на балансе находится 201 ETH и инвестор не совершал нулевую транзакцию в течение 3 дней, то его персональный процент равен 4% + 0,2% + 0,3% = 4,5%.

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

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

Библиотека безопасной математики содержит 4 математические функции: сложение, вычитание, умножение и деление.

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

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

В общей сложности, ничего плохого и криминального в исходном коде найдено не было. Определилась оптимальная схема инвестирования, так как при реинвестировании не сбрасывается накопленный процент, а вывод дивидендов всё равно происходит.

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

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

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

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

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

О нас binvestcoin

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

Капитализация индустрии снизилась на $6 млрд. за 48 часов. Что дальше? Обзор рынка

За последние 48 часов, с 7 ноября, мировая крипто индустрия потерял 6 миллиардов долларов капитализации. ...