Пожалуйста, обратите внимание, что пользователь заблокирован
Всем привет. Продолжаю серию статей по разбору CTF заданий, которые связаны со смарт-контрактами. Надеюсь кого нибудь заинтересует данная тематика, статья написано больше для новичков, но предполагаю, что вы должны быть знакомы с solidity и теории кодирования на базовом уровне. Решать задачи я буду на такой платформе как ethernaut. Интересно, что сам CTF построен на отдельных контрактах.
1 статья: /threads/55340/#post-358160
Дан контракт с именем Fallback. В контракте 5 функций. Задача стать владельцем контракта и опустошить баланс.
Получим экземпляр контракта. Сверим адреса контракта и посмотрим адрес владельца.
constructor() функция, которая развертывает код в блокчейне с аргументами/параметрами, она вызывается только один раз. Тот кто развертывает контракт становится его владельцем.
modifier() это модификатор функции, обычно проверяет условие перед выполнением функции. В примере указано, что вызывать функцию может только владелец контракта.
contribute() функция, которая хранит значение вызывающего эту функцию.
Если значение больше владельца контракта, то вызывающий функцию становится владельцем контракта. Обратите внимание, что require создает требование отправителю эфира и логику contributions в которую заносится значение.
getContribution() функция получения значения нашего вклада через неё мы можем узнать количество нашего вклада.
withdraw() позволяет выводить баланс только владельцу контракта.
receive() функция, которая выполняется при отправки эфира, с требованием, у нас должно быть значение(вклад) в contributions.
Транзакции в Ethereum это по своей сути сообщения с полезной нагрузкой, которые носят в себе различные данные. Чтобы менять состояние контракта нам нужно отправлять транзакции. У функции есть своя сигнатура - первые 4 байта, которые являются его идентификатором. В EVM проверяет идентификатор диспетчер, если ничего не подходит вызывается специальная функция, если она существует.
Вызовем contribute со специальным аргументом, объектом, с начальным значением, которая вложиться в нашу транзакцию, далее отправим транзакцию в контракт с нашим объектом, проверим стали ли мы владельцем контракта и тогда получим право вывести эфир и посмотрим баланс контракта.
Таким образом мы прошли 1 уровень.
1 статья: /threads/55340/#post-358160
Дан контракт с именем Fallback. В контракте 5 функций. Задача стать владельцем контракта и опустошить баланс.
Получим экземпляр контракта. Сверим адреса контракта и посмотрим адрес владельца.
constructor() функция, которая развертывает код в блокчейне с аргументами/параметрами, она вызывается только один раз. Тот кто развертывает контракт становится его владельцем.
modifier() это модификатор функции, обычно проверяет условие перед выполнением функции. В примере указано, что вызывать функцию может только владелец контракта.
contribute() функция, которая хранит значение вызывающего эту функцию.
Если значение больше владельца контракта, то вызывающий функцию становится владельцем контракта. Обратите внимание, что require создает требование отправителю эфира и логику contributions в которую заносится значение.
getContribution() функция получения значения нашего вклада через неё мы можем узнать количество нашего вклада.
withdraw() позволяет выводить баланс только владельцу контракта.
receive() функция, которая выполняется при отправки эфира, с требованием, у нас должно быть значение(вклад) в contributions.
Транзакции в Ethereum это по своей сути сообщения с полезной нагрузкой, которые носят в себе различные данные. Чтобы менять состояние контракта нам нужно отправлять транзакции. У функции есть своя сигнатура - первые 4 байта, которые являются его идентификатором. В EVM проверяет идентификатор диспетчер, если ничего не подходит вызывается специальная функция, если она существует.
Вызовем contribute со специальным аргументом, объектом, с начальным значением, которая вложиться в нашу транзакцию, далее отправим транзакцию в контракт с нашим объектом, проверим стали ли мы владельцем контракта и тогда получим право вывести эфир и посмотрим баланс контракта.
Таким образом мы прошли 1 уровень.