Продвинутый Урок 6 4 мин чтения

Разделение интервала и совместная работа

Много людей, ищущих в одном и том же интервале, тратят почти все впустую. Разделить пространство и попробовать то, что было подметено, — вот что делает коллективные усилия значимыми.

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

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

Пятьдесят человек, копающих одну и ту же яму, не копают пятьдесят ям.

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

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

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

Тот, кто говорит, что просмотрел квадрат, но не сделал этого, оставляет невидимую дыру.

Существуют частичные ответы, и их стоит знать. Наиболее используемый — это доказательство выборочной проверки: помимо настоящей цели, сервер вставляет в участок несколько ложных целей, ответы на которые он уже знает. Тот, кто действительно просмотрел, находит эти подставные цели и возвращает их; тот, кто не просмотрел, не может их угадать. Это не полное доказательство — это тест, который сложно обмануть.

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

И есть вопрос, который предшествует всем другим: что если ключ будет найден? Тот, кто его находит, имеет в одиночку и в тот момент возможность забрать всё. Никакое соглашение, никакой контракт и никакая репутация не могут этому помешать, потому что ключ — это деньги. Серьезные группы решают это с помощью криптографии, а не доверия — заранее разделяя разрешение на расходование между несколькими сторонами с помощью мультиподписи, о которой говорилось в промежуточной части, так что найти в одиночку не означает забрать в одиночку.

Найти в одиночку не должно означать забрать в одиночку.

Стоит упомянуть о законности и границах, потому что это относится к данной теме. Искать ключ адреса, который кто-то опубликовал как вызов, — это согласованное упражнение: тот, кто финансировал эти адреса, разместил их там для поиска. Искать в блокчейне чужие плохо сгенерированные кошельки — это совсем другое, и практически везде в мире это преступление. Техника та же; разница полностью в согласии того, кто разместил там деньги.

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

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