финальный проект
оценку ставят на защите
Выдаётся в конце лекции 3. Команды lab.lend.* и лендинг класс-чейна появляются вместе с игрой третьей лекции — до занятия страница показывает условие целиком.
Одно задание из трёх на выбор. Всё делается в класс-чейне, тем же SDK:
pip install https://defilab.insights-forge.com/sdk/defilab-0.1.5-py3-none-any.whlfrom defilab import Lab
lab = Lab("https://api.defilab.insights-forge.com",
class_code="DEFI-01", name="Твоё Имя", pin="твой PIN")Срок — до консультации. Сдача lab.hw.submit(3, ...), защита — как в первых двух, но длиннее: к вопросам по проекту добавляются три вопроса про связь с лекциями 1 и 2.
Бот, который следит за лендингом класс-чейна и ликвидирует позиции, у которых залог упал ниже порога. Конкурируешь с ботами одноклассников и с ботом-агентом. Цену залога двигает агент-«рынок» по расписанию, которого никто не знает.
positions = lab.lend.positions() # чужие позиции: залог, долг, запас здоровья
tx = lab.lend.liquidate(user="…") # успевает первыйЧто сдать: код бота, журнал его работы и разбор трёх эпизодов — где выиграл, где опоздал и почему. Прибыль учитывается, но решает разбор: бот, который заработал случайно и не может объяснить почему, получает меньше того, кто проиграл и понимает механику.
В класс-чейн выложен лендинг с известным набором слабостей: цена залога берётся из пула одной сделкой, лимита на размер займа нет. Задача — провести атаку через займ внутри одной записи и написать post-mortem в формате настоящего отчёта: что было уязвимо, шаги по порядку, сколько унесено, как чинить. Потом почини и покажи, что атака больше не проходит.
lab.lend.attack_target() # адрес и исходники уязвимого лендингаЧто сдать: скрипт атаки, отчёт post-mortem, исправленный контракт и доказательство, что старый скрипт на нём падает.
Придумай протокол под задачу, которой в курсе не было: страхование ликвидаций, кредит под редкий предмет, лендинг с репутацией вместо залога. Оформи как короткий whitepaper (одна страница), прототип контракта и разбор трёх способов его сломать — своих собственных.
Что сдать: whitepaper, контракт, три атаки на свой дизайн с объяснением, что именно ломается.
Независимо от варианта на защите спросят про связь с прошлыми лекциями:
- Где в твоём проекте видно, что запись в общем реестре стоит дорого и её нельзя подделать?
- Где в нём появляется ликвидность и что происходит, когда её не хватает?
- Кто в твоём проекте получает деньги за работу, которую в обычном мире делает сотрудник?
lab.hw.submit(3,
parts={"variant": "А", "summary": "…", "numbers": {...}},
report_md=open("report.md").read(),
files=[{"path": "bot.py", "content": open("bot.py").read()}])Раздел «Что делал LLM, что делал я, где LLM ошибся» обязателен.
Между выдачей проекта и защитой есть одна встреча. Это не лекция: разбираем типичные провалы домашки 2 без имён, отвечаем на конкретные вопросы по проектам («бот проигрывает вот тут, не понимаю почему») и смотрим карту, куда идти дальше. Приходить имеет смысл с уже написанным куском, а не с чистым листом.
До защиты читаешь два чужих отчёта (платформа выдаёт их обезличенно) и пишешь по каждому три предложения: что понял, что не сходится, какой вопрос задал бы автору.
lab.hw.peer() # два чужих отчёта
lab.hw.peer_review(id, text="…") # твой разборЭто влияет на оценку: разбор чужой работы показывает, читаешь ли ты код и рассуждения, а не только пишешь свои.
- Объясняет, что именно его проект делает, по шагам, без общих слов.
- Знает границы: при каких ценах, размерах и сроках его решение перестаёт работать.
- Понимает роль порога: почему ликвидация происходит до того, как залог станет меньше долга, а не после.
- Здесь ловится вайбкодинг.
- Читает свой код построчно по запросу, отличает существенные функции от служебных.
- Правка под таймером: «сделай, чтобы бот не ликвидировал позицию, где приз меньше комиссии», «добавь проверку, что цена взята не из одной сделки» — в нужном месте, компилируется, меняет поведение.
- Для варианта Б: показывает, что после починки старый скрипт атаки падает, и объясняет, какая именно проверка его останавливает.
- Отвечает на три общих вопроса конкретно, на своём проекте, а не пересказом лекции.
- Видит, кому и за что платит его механизм: ликвидатору, арбитражёру, тому, кто записал пакет.
- Разборы двух чужих работ по делу: видно, что читал код и рассуждения, а не аннотацию.
- Раздел про LLM заполнен честно, граница «я / инструмент» проходит по фактам.
Сдача и защита — из кода, кнопок на этой странице нет. Порядок такой:
pip install https://defilab.insights-forge.com/sdk/defilab-0.1.5-py3-none-any.whl
from defilab import Lab
lab = Lab("https://api.defilab.insights-forge.com",
class_code="DEFI-01", name="Твоё Имя", pin="твой PIN")
# сдать работу (можно пересдавать, пока не начал защиту)
lab.hw.submit(3, parts={...}, report_md=open("report.md").read(),
files=[{"path": "MyContract.sol", "content": src}])
# защита: начинается один раз, после старта пересдача закрывается
lab.hw.defense_start()
lab.hw.defense() # прочитать вопрос экзаменатора
lab.hw.defense_say("ответ", code=None)
lab.hw.defense_stop() # закончить и получить предварительную оценкуЧто писать в parts — в разделе «Формат сдачи» выше. Пока защита не начата, каждый новый submit заменяет предыдущий.