— Какие решения?
— Криптографические, — сказал он и покрутил в воздухе рукой. — Там целый пласт.
Я подождал ещё пару минут, задавая вопросы про подписи, хранение записей и распределённую работу узлов. Ответы оставались примерно на том же уровне.
Корнеев уехал довольный. Ему, кажется, и в голову не пришло, что его уже вычеркнули.
Антон Шевелёв из Новосибирска появился в свитере, с ноутбуком в облезлой сумке, а бумажного резюме у него не было вовсе. По возрасту — чуть за тридцать. Работал с сетями и серверами, успел покрутиться в нескольких небольших компаниях.
Задачу он выслушал, потом с минуту молчал и разглядывал мой стол.
— За узлы кто платит?
— Первый год мы.
— А дальше? С чего вдруг человек будет держать дома машину, которая тратит электричество и считает чужие переводы?
— Участник, который создаёт блок и находит доказательство работы, получает вознаграждение внутри сети.
— Монетами, которые… эмм, как бы это помягче выразить… пока никому не нужны?
— Именно.
Он помолчал.
— А если они так и останутся никому не нужны?
— Тогда проект не взлетит.
— Честно.
Он перевёл взгляд на меня.
— Если ваша фирма поставит машин больше, чем все остальные вместе, кто решает, какие записи правильные?
— В начальной сети — фактически мы. Поэтому она и должна быть испытательной.
— А когда появятся чужие участники?
— Тогда правило должно работать независимо от того, кому принадлежит конкретная машина.
Шевелёв кивнул. Вот теперь ему стало интересно.
— А деньги клиентов где лежат?
— Нигде в привычном смысле. Есть записи о транзакциях и ключи, которыми подтверждается право распоряжаться ими.
Он снова посмотрел на меня.
— То есть если ключ потеряли, то…?
— Потеряли — вместе с ним потеряли доступ. А потом ищи свищи этот чёртов жёсткий диск с ключами где-нибудь на городской свалке.
— Весёлая система, однако…
— Зато без начальника, который может восстановить пароль по звонку.
Он усмехнулся.
Было видно: человек не продаёт себя, он выясняет, стоит ли с нами связываться. А мы ведь такие опасные, хехехе!
— Я подумаю, — сказал он на выходе. — Зарплата хорошая. Задача странная, хотя и звучит интересно.
Третий приехал на следующий день. Ярослав Белоусов, тридцать два года, тоже Новосибирск, но Академгородок. Кандидат наук, несколько лет занимался распределёнными вычислениями и сетевыми протоколами. Денис «Кит» объяснил ему задачу в общих чертах.
Белоусов положил на стол тонкую папку.
— Скажу сразу, чтобы потом не было обид. Идея не из воздуха. Вэй Дай в девяносто восьмом описал b-money. Там есть важные для вас вещи: распределённый учёт, цифровые деньги, отсутствие единого центра. Но рабочего решения двойной траты в том виде, который вы сейчас описываете, там нет.
— Знаю, ага.
— Хорошо, что знаете.
Он продолжил.
— Hashcash Адама Бэка — девяносто седьмой год. Но это вообще не электронные деньги. Это механизм доказательства вычислительной работы, первоначально для борьбы со спамом.
— Тоже знаю.
Он поднял глаза.
— Тогда вы понимаете, что интересны здесь не отдельные компоненты. Интересно, как вы собираетесь заставить их работать вместе.
Я кивнул.
— Направление решения я вижу. Записи собираются в цепочку, каждый блок содержит ссылку на предыдущий, а доказательство работы делает переписывание истории вычислительно дорогим. При конфликте сеть выбирает цепочку с большей совокупной работой.
— Это направление, Артём. А реализация?
Вот здесь я и остановился.
Внутри у меня лежал конспект на уровне хорошего школьника, и сейчас хороший школьник сидел напротив кандидата наук. Как именно организовать структуру блока, как передавать сообщения между узлами, как проверять транзакции, как обрабатывать одновременные ветки — всё это в голове было гораздо менее чётким, чем общий принцип.
— Реализации нет. Поэтому вы здесь.
Белоусов чуть заметно кивнул.
— Уже лучше.
Он взял ручку.
— Тогда представим ситуацию. Два участника почти одновременно создали разные блоки, и оба получили правильное доказательство работы. Часть сети увидела один блок первой, другая часть — второй. Что происходит?
— Узлы временно работают с разными ветками. Следующий найденный блок увеличит совокупную работу одной из них. Когда одна цепочка станет сильнее, остальные переключатся на неё.
— А если работа пока одинаковая?
— Тогда окончательного решения ещё нет. Сеть держит обе ветки и ждёт следующего блока.
Он посмотрел на меня внимательнее.
— Хорошо. А если в этих двух ветках две разные транзакции одних и тех же денег?
— В итоге останется одна история. Та ветка, которая получит перевес по совокупной работе. Конфликтующая транзакция в другой ветке будет отброшена.
Белоусов помолчал.
— А если обе транзакции подписаны правильно?
— Подпись доказывает право человека распоряжаться деньгами. Она не доказывает, что он не потратил их ещё раз. Для этого и нужна общая история сети.
Он улыбнулся.
— Та ещё задачка…
Он посмотрел на часы.
— Мне пора. У меня поезд.
Белоусов взял свою папку.
— Я подумаю. Если вы действительно готовы дать команде работать, а не заставите её долгими месяцами согласовывать каждую строчку, мне интересно.
— Сколько вам в напарники нужно людей?
— На старте? Дайте подумать… Минимум три сильных человека. И я бы не смешивал всё в одну кучу. Один должен хорошо понимать криптографию, второй — распределённые системы и сети. Третий нужен как сильный разработчик, который сможет это всё превратить в работающий код.
— Ещё что-нибудь?
— Да. Вам нужен человек, который будет думать о безопасности раньше, чем мы запустимся. Иначе потом будете думать об этом после первого взлома.
— Справедливо. И, да, я это понимаю.
Он встал.
— Тогда до связи.
Уехал он на вечернем поезде, а я остался с блокнотом, в котором появилось гораздо больше записей, чем планировал сделать в ходе собеседований.
Нанимать из них сразу никого не стал. Дал себе и им неделю на размышления.
Контора Натальи Борисовны за год ничуть не поменялась: первый этаж пятиэтажки, вход с торца, по соседству «Пивас и Вобла» с заиндевевшим окном. Табличку с матричного принтера, проклеенную канцелярским скотчем, заменили, теперь она представляла из себя новую распечатанную табличку, заламинированную на ламинаторе, помещённую в коричневую рамку. Как и прежде — смотрелось просто и минималистично. Внутри, так же, стояли два шкафа с папками, горела лампа с зелёным стеклом. А, ну и банку с кипятильником тоже заменили — на её месте красовался белый электрочайник. На подоконнике стоял кактус.
Щавелем больше не пахло. А вот чем-то аптечным немножко — да.
В прошлом году я впервые попал сюда примерно с тем же ощущением: снаружи всё выглядело так, будто время забыло про это место, типа как заброшенный тренажёрный зал с ржавыми тренажерами, но внутри Наталья Борисовна умудрялась разбираться с такими вещами, которые заставляли нервничать вполне современные компании.
И что самое интересное — мне ещё в тот, первый раз это что-то очень сильно напомнило — такая противоречивая атмосфера, но я не мог вспомнить, что именно. И сейчас я вспомнил. Ещё в прошлой жизни, в её древней части, была у меня одна хорошая знакомая. Светлана. Её рабочий офис находился недалеко от административного здания ГИБДД. Причём, если у Натальи Борисовны были хоть какие-то минимальные признаки того, что за помещение тут находится — пожелтевшая кустарно заламинированная табличка, то у офиса Светланы не было вообще никаких примет. Вот совсем — ни вывески, ни таблички, ни какого-либо визуального намёка. Просто непонятное помещение в непонятном месте и дверь.
У меня даже складывалось ощущение, что офис Светланы — это был офис «для своих». Лично меня в своё время туда «привела» мать одного моего тогдашнего друга юности. А если незнакомый человек по ошибке зашёл бы в это помещение, он бы точно не понял, куда попал и зачем. И, вероятно, его попросили бы покинуть это место.