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

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

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

Любителей почитать исходный код, смарт-контракт Аудит смарт контракта TwoHundredPercent от BitStatTwoHundredPercent встречает комментарием, который является краткой инструкцией к нему.

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

  • Отправить с ETH-кошелька в адрес смарт-контракта любое количество ETH.
  • Получить свою прибыль путём отправки 0 ether (1 раз в час).
  • Если хотите получить свыше 200%, можете отправить запрос единожды после истечения срока.
  • Далее начинается описание переменных, которые учувствуют в работе контракта.

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

    balance – хранилище суммы вклада инвестора;

    time – хранилище времени совершения вклада;

    percentWithdraw – хранилище общей суммы выплат по одному депозиту;

    allPercentWithdraw – хранилище суммы всех выплат инвестору по всем депозитам;

    Доступ ко всем хранилищам, которые являются обычными одномерными массивами (таблицами) осуществляется по ETH-адресу инвестора.

    stepTime = 1 hours – время шага = 1 час;

    countOfInvestors – общее количество инвесторов в проекте;

    projectPercent = 10 – процент вклада, который переводится администрации;

    Адрес администрации: 0xC24ddFFaaCEB94f48D2771FE47B85b49818204Be;

    События, который служат для оповещения владельцев проекта и служат для сбора статистики: invest, withdraw.

    Модификаторы доступа к функциям:

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

    userExist – модификатор, который требует положительного вклада на балансе инвестора. Если такогового нет, то сработает исключение с текстом «Адрес не найден».

    checkTime – модификатор, который запрещает обращаться к функции раньше, чем через один час (stepTime = 1 hours).

    Логика работы данного смарт-контракта очень разветвлённая и запутанная. Поэтому, рассматривать код последовательно будет сложным для понимания. Будем следить за ходом выполнения так, как это будет делать компьютер.

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

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

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

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

    Инвестирование начинается с того, что идёт определение хочет инвестор снять проценты или внести сумму. Если инвестор присылает нулевую транзакцию, то запускается функция collectPercent. Если сумма транзакции отличается в большую сторону от нуля, то запускается логика инвестирования. В строке 77 опознаётся новичок, затем увеличивается количество инвесторов на единицу. Если инвестор уже не новичок и время позволяет сделать вывод, то запускается функция collectPercent, а затем обнуляется percentWithdraw. Независимо от того, новичок ты или нет, выполняются строки 84-88, которые обновляют баланс инвестора, время реинвеста и отправляют 10% от суммы администрации проекта. Сразу, что бросается в глаза, это довольно значительная разница в логике при реинвесте и обычном выводе. Особенно то, что при обычном выводе не идёт обновление времени вывода. Для более детального осмотра необходимо познакомится с функцией collectPercent.

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

    При беглом осмотре данной функции и всех вызываемых функция внутри, замечаем, что нигде не сбрасывается информация по time. Т.е., при отправке нулевой транзакции time не обновляется, что позволит обойти проверку checkTime и получать свои дивиденды в любое время. Хоть через 5 минут. Мелочь, но условие уже нарушилось! В тоже время, при реинвестировании время сбрасывается и запрет на 1 час остаётся в силе. Более того, при этом теряется прибыль при многократном инвестировании менее чем через час. Хотя, нас предупреждали, что нельзя обращаться чаще, чем раз в час. Так что, всё честно.

    Строка 36 проверяет не превысила ли сумма всех выплат 200%. Если превысила, то идёт обнуление balance, time, percentWithdraw. А вот про allPercentWithdraw забыли! А что это значит? А это значит, что если Вы будете повторно инвестировать с этого же кошелька после того, как вывели свои 200+%, то потеряете сумму равную удвоенному предыдущему депозиту. Т.е., ни в коем случае нельзя повторно инвестировать с одного и того же кошелька после того, как сняли весь свой депозит.

    Так же стоит заметить, что проверка на 200% сработает только в том случае, если Вы уже вывели 200%. А если Вы вывели всего 199%, то дальше просто можете ждать до последнего, пока баланс контракта не достигнет близкой к Вашей сумме выплаты. А как только достигнет – сразу же снимать весь остаток свыше 199%. Т.е., последнюю нулевую транзакцию надо оттянуть по-максимуму для большего профита. Хоть 500%, всё равно снимет, были бы средства у контракта на балансе. Мы рассмотрели только первую часть функции collectPercent, а уже столько нюансов. Двигаемся дальше.

    Если сумма всех выплат ещё не превышает 200%, то сумма выплаты вычисляется функцией payoutAmount. Затем идёт обновление хранилищ percentWithdraw и allPercentWithdraw. И в финале средства направляются инвестору. А как идёт вычисление суммы выплаты?

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

    Последовательно высчитываются коэффициенты для выплаты:

    percent – процент, который зависит от общего баланса контракта;

    different – временной промежуток в часах;

    rate – сумма выплаты в единицу времени;

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

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

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

    • меньше 1000 ether – 6%;
    • от 1000 до 2500 ether – 7,2%;
    • от 2500 до 5000 ether – 8,4%;
    • больше 5000 ether – 9%;

    Из-за того, что в различных ситуациях время и сумма выплат percentWithdraw не обнуляются, могут возникнуть вопросы и проблемы. Попробуем разобраться на конкретных ситуациях.

    1). Мы инвестировали 100 Eth, через сутки снимаем проценты нулевой транзакцией. Мы благополучно снимаем наш положенный процент. Время и сумма выплаты не обнуляются. При следующей нулевой транзакции время не обнуляется, предыдущая сумма выплаты вычитается от той, которая положена за 2 дня. Через 2 дня мы получаем 12 Eth назад. Через 3 дня решили ещё добавить 50 Eth. Тут уже запускается блок, который обнуляет нам время точки отсчёта и сумму выплат, которые были начислены ранее и возвращает 6 Eth с третьего дня вклада. Т.е., у нас абсолютно новый вклад на 150 Eth с обнулённым счётчиком времени, обнулённой сумой выплат percentWithdraw и 18 Eth на руках. Но, общую сумму всех выплат никто не обнулял, поэтому выйти за предел 300 Eth шансов не много, кроме того, который был оговорён выше. Невероятно, но всё работает.

    2). Рассмотрим случай, когда возрастает процент по выплатам при возросшей общей кассе контракта. Мы инвестировали 100 Eth. В какой-то момент общий баланс контракта перевалил за 1000 Eth и снова вернулся через несколько дней. Вот что получится:

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

    Из наглядного примера видно, что сумма выплаты может резко возрастать или проседать до нуля. В целом же, ничего страшного не произойдёт, если регулярно снимать средства. В среднем, выплата держится на одном уровне, но надо быть готовым к подобным «компенсациям».

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

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

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

    В целом, аудит исходного кода контракта Аудит смарт контракта TwoHundredPercent от BitStatTwoHundredPercent показал, что владелец контракта не имеет доступа ко всей «кассе». Остановить, изменить контракт или повлиять на бизнес-логику также нет возможности. Бекдоров нет. Но, были выявлены следующие неприятные моменты:

    • Присутствует возможность унести более 200%, не по правилам проекта;
    • Нельзя инвестировать повторно с одного и того же адреса, после получения 200%, иначе вы потеряете деньги;
    • Повторный реинвест менее чем через час, приведёт к незначительной потере прибыли;
    • Плавающий процент создаёт «компенсацию», которая может сбить с толку и навести панику;

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

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

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

    О нас Earnprofit

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

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

    Bank of America получил патент на систему хранения крипто активов клиентов на корпоративных счетах

    Вчера Управление по патентам и товарным знакам США (USPTO) опубликовало информацию, согласно которой известный банк ...