В практике должен доказать человек истинность,
т. е. действительность и мощь своего мышления.
Карл Маркс "Тезисы о Фейербахе"
На каждой проверочной работе есть 5-7 задач и 5-7 языков программирования (C, Java, Go, Node, Python, Rust). Каждый сдающий должен выбрать клеточку в этой матрице. Python раздаём в последнюю очередь, кстати.
Задачи на среду 25е (тема - BitTorrent и деревья хэшей):
- создать дерево хэшей для файла, по спеке (hashtree)
- создать доказательство целостности для пакета данных (proof)
- проверить доказательство целостности для пакета (verify)
- подписать файл (sign)
- проверить подпись (check)
Требуется сделать задачу по спеке из репозитория. На занятии по BT, спека вдоль линий RFC7574, также https://research.swtch.com/tlog, на лекции будет подробное объяснение. Также см. реализацию bin numbers.
Сданная работа - это pull request в репозиторий, с имплементацией в файле с названием формата proof-ivanov.py, формат запуска
$ python proof-ivanov.py datafile 123
где 123 - номер пакета (файл разбит на пакеты по 1KB). Читает datafile и его дерево хэшей в файле datafile.hashtree, пишет в файл datafile.123.proof. То есть, форматы файлов описаны и все реализации должны быть совместимы. Собственно, так и будет производиться проверка. Протоколы и совместимость - это основа децентрализованных систем.
Имплементации, прошедшие проверку, засчитываются в табличку. Присылать PR можно в течение 2х недель после лекции. Но проще, конечно, в тот же день, дополнительных объяснений задачи в чате даваться не будет.