домашки / домашка 3
сдача через SDK · lab.hw.submit

финальный проект

домашка 3
оценку ставят на защите

Выдаётся в конце лекции 3. Команды lab.lend.* и лендинг класс-чейна появляются вместе с игрой третьей лекции — до занятия страница показывает условие целиком.

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

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, ...), защита — как в первых двух, но длиннее: к вопросам по проекту добавляются три вопроса про связь с лекциями 1 и 2.

/01А. Ликвидатор

Бот, который следит за лендингом класс-чейна и ликвидирует позиции, у которых залог упал ниже порога. Конкурируешь с ботами одноклассников и с ботом-агентом. Цену залога двигает агент-«рынок» по расписанию, которого никто не знает.

positions = lab.lend.positions()          # чужие позиции: залог, долг, запас здоровья
tx = lab.lend.liquidate(user="…")         # успевает первый

Что сдать: код бота, журнал его работы и разбор трёх эпизодов — где выиграл, где опоздал и почему. Прибыль учитывается, но решает разбор: бот, который заработал случайно и не может объяснить почему, получает меньше того, кто проиграл и понимает механику.

/02Б. Атака

В класс-чейн выложен лендинг с известным набором слабостей: цена залога берётся из пула одной сделкой, лимита на размер займа нет. Задача — провести атаку через займ внутри одной записи и написать post-mortem в формате настоящего отчёта: что было уязвимо, шаги по порядку, сколько унесено, как чинить. Потом почини и покажи, что атака больше не проходит.

lab.lend.attack_target()                  # адрес и исходники уязвимого лендинга

Что сдать: скрипт атаки, отчёт post-mortem, исправленный контракт и доказательство, что старый скрипт на нём падает.

/03В. Дизайн

Придумай протокол под задачу, которой в курсе не было: страхование ликвидаций, кредит под редкий предмет, лендинг с репутацией вместо залога. Оформи как короткий whitepaper (одна страница), прототип контракта и разбор трёх способов его сломать — своих собственных.

Что сдать: whitepaper, контракт, три атаки на свой дизайн с объяснением, что именно ломается.

/04Общая часть

Независимо от варианта на защите спросят про связь с прошлыми лекциями:

  1. Где в твоём проекте видно, что запись в общем реестре стоит дорого и её нельзя подделать?
  2. Где в нём появляется ликвидность и что происходит, когда её не хватает?
  3. Кто в твоём проекте получает деньги за работу, которую в обычном мире делает сотрудник?
/05Формат сдачи
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 ошибся» обязателен.

/06Консультация

Между выдачей проекта и защитой есть одна встреча. Это не лекция: разбираем типичные провалы домашки 2 без имён, отвечаем на конкретные вопросы по проектам («бот проигрывает вот тут, не понимаю почему») и смотрим карту, куда идти дальше. Приходить имеет смысл с уже написанным куском, а не с чистым листом.

/07Взаимная проверка

До защиты читаешь два чужих отчёта (платформа выдаёт их обезличенно) и пишешь по каждому три предложения: что понял, что не сходится, какой вопрос задал бы автору.

lab.hw.peer()                       # два чужих отчёта
lab.hw.peer_review(id, text="…")    # твой разбор

Это влияет на оценку: разбор чужой работы показывает, читаешь ли ты код и рассуждения, а не только пишешь свои.

/08За что ставят оценку
A. Своя механикавес 35
  • Объясняет, что именно его проект делает, по шагам, без общих слов.
  • Знает границы: при каких ценах, размерах и сроках его решение перестаёт работать.
  • Понимает роль порога: почему ликвидация происходит до того, как залог станет меньше долга, а не после.
B. Живая правка и кодвес 30
  • Здесь ловится вайбкодинг.
  • Читает свой код построчно по запросу, отличает существенные функции от служебных.
  • Правка под таймером: «сделай, чтобы бот не ликвидировал позицию, где приз меньше комиссии», «добавь проверку, что цена взята не из одной сделки» — в нужном месте, компилируется, меняет поведение.
  • Для варианта Б: показывает, что после починки старый скрипт атаки падает, и объясняет, какая именно проверка его останавливает.
C. Связь с курсомвес 20
  • Отвечает на три общих вопроса конкретно, на своём проекте, а не пересказом лекции.
  • Видит, кому и за что платит его механизм: ликвидатору, арбитражёру, тому, кто записал пакет.
D. Взаимная проверка и честность про LLMвес 15
  • Разборы двух чужих работ по делу: видно, что читал код и рассуждения, а не аннотацию.
  • Раздел про LLM заполнен честно, граница «я / инструмент» проходит по фактам.
/09Сдача

Сдача и защита — из кода, кнопок на этой странице нет. Порядок такой:

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 заменяет предыдущий.