Глава 4

Сеть Monero

Из этой главы вы узнаете о ключевых концепциях, стоящих за блокчейн технологией, а также о том, как майнеры Monero поддерживают безопасность реестра. Мы начнём с того, что разъясним структуру блоков, как они связываются с защищённым от злоумышленников блокчейном, а также то, как майнеры используют алгоритм доказательства работы при достижении консенсуса по согласованной версии реестра. В теме, касающейся майнеров, мы расскажем, как появляются новые Monero, и как монеты попадают в экосистему. Ближе к концу главы мы коснёмся нескольких криптографических концепций (хешей и nonce), чтобы читатель мог реально понять процесс майнинга.

Упрощённая анатомия блока

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

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

Рисунок 4.1

Рисунок 4.1 - Каждый последовательно пронумерованный блок транзакций должен включать как nonce, так и ссылку на хеш предыдущего блока.

Каждый блок содержит набор транзакций, криптографическую привязку к предыдущему блоку (называемую хешем) и свободное место, чтобы майнер мог включить специальное число, которое закрывает блок (такое число называется nonce).

Если вы хотите узнать, как работают хеши и nonce, ближе к концу главы вы найдёте доступную ознакомительную информацию с соответствующими примерами (если вы разбираетесь в вопросах криптографии, то можете сразу перейти к концу Главы 4 и прочитать всё прямо сейчас). Существует всего две концепции, которые необходимо знать, чтобы понять, как эти технологии обеспечивают безопасность блокчейна:

  1. Хеш выполняет функцию обеспечения безопасности, доказывая, что каждый блок напрямую связан с неизменённой версией предыдущего блока. Если злоумышленник попытается атаковать какую-либо из частей реестра, то даже попытка внесения самых незначительных изменений будет вопиюще очевидной, поскольку хеши станут выкидывать красный флаг тревоги в каждом последующем блоке.
  2. Nonce представляет собой специальную строку, которая завершает блок и маркирует его как готовый для передачи в блокчейн. С вычислительной точки зрения, крайне сложно найти nonce, который бы соответствовал требованиям и мог завершить и «запечатать» блок. Майнеры тратят большую часть времени и энергии на поиск действительных nonce. Невозможно составить предварительный план по вычислению nonce, поэтому поиск необходимо начинать с нуля в случае с каждым новым блоком. Nonce не имеют математической значимости; они являются всего лишь одноразовой последовательностью произвольных символов.

4.2 Узлы являются основой сети

4.2.1 Узлы передают сетевые данные соседним узлам

Вплоть до этого момента, справочные материалы по «сети Monero» по большей части касались её структуры. Как ваши транзакции на деле передаются по абстрактной «сети» майнерам и другим пользователям? По свету разбросаны тысячи соединённых друг с другом узлов Monero, быстро обменивающихся между собой новостями о проводимых транзакциях и блоках.

Эти узлы формируют одноранговую сеть, обеспечивая эффективную и отказоустойчивую связь пользователей Monero. Запуск узла не требует какого-либо специального оборудования или особых знаний. Если вы прямо сейчас загрузите и установите программное обеспечение Monero, то у вас будет собственный узел ещё до того, как вы дочитаете эту главу!

Рисунок 4.2

Рисунок 4.2 - Monero использует распределенную одноранговую сеть, состоящую из сети добровольных устройств, которые обмениваются новыми данными друг с другом. Узлы сохраняют полную копию блокчейна и создают магистральную сеть. Поскольку для работы узла требуется значительное дисковое пространство, некоторые устройства (особенно мобильные кошельки) подключаются к удаленному узлу для запроса информации и широковещательных транзакций.

В одноранговой сети Monero не существует каких-либо «специальных» или «супер» узлов; все узлы (включая ваши) являются равноправными участниками, работающими с целью распределения ресурсов и рабочей нагрузки. Узлы создаются на компьютерах всех видов и размеров: на лэптопах, настольных ПК, на серверах и даже на виртуальных машинах.

4.2.2 Узлы хранят блокчейн

При запуске нового узла, он сначала загружает полную версию блокчейна и проверяет криптографические связи, такие как хеши и Nonce. Начальная синхронизация может занять до нескольких часов, так как узлу необходимо построить свою собственную локальную копию блокчейна, а также подтвердить валидность каждой транзакции и блока. Вместо загрузки блокчейна через соединения с одним центральным источником, каждый узел получает данные от множества одноранговых узлов. Узлам не нужно идентифицировать одноранговые узлы или доверять им, так как достоверность данных подтверждается криптографически.

Любому программному обеспечению кошелька Monero (например, Monero GUI, приложению для смартфона и т. д.) требуется доступ к копии блокчейна, чтобы оно могло выполнять операции с ключами, такие как извлечение истории транзакций, вычисление баланса на счетах, а также создание транзакций. Кошелёк не может создавать транзакций, пока не свяжется с синхронизированным узлом, так как программному обеспечению необходимо найти и подсчитать соответствующие непотраченные выходы. Тем не менее, вы можете получать Monero на ваш адрес, независимо от того, подсоединены вы к синхронизированному узлу или нет (монеты просто не будут отображаться на балансе до тех пор, пока кошелёк не загрузит и не верифицирует соответствующий блок).

4.2.3 Сравнение «локальных» и «удалённых» узлов

Процесс локального сохранения / верификации всего блокчейна, направленный на то, чтобы ваш кошелёк мог взаимодействовать с вашей собственной копией реестра, называется запуском локального узла. Если вы используете этот тип настройки, ваш кошелёк взаимодействует только с вашей личной копией блокчейна. Запуск и использование локального узла требует значительного количества свободного места на диске (на момент написания этого раздела необходимый объём составлял ~60 Гб), что абсолютно неприемлемо для таких устройств, как мобильные телефоны.

К счастью программное обеспечение кошелька может быть конфигурировано для использования удалённого узла вместо вашего локального. Это означает, что ваш кошелёк подсоединится к чьему-либо узлу и просто запросит информацию о ваших выходах. Большинство мобильных кошельков Monero по умолчанию используют удалённые узлы, чтобы приложение не занимало много места. GUI и CLI кошельки Monero могут быть конфигурированы под использование либо локального, либо удалённого узла.

Использование удалённого узла не создаёт каких-либо рисков для безопасности. Ваша мнемоническая фраза и ваши ключи никогда не будут раскрыты, поэтому оператор удалённого узла не сможет контролировать ваши средства или расшифровать какую-либо информацию, которая будет защищена такими средствами Monero, как RingCT (для сокрытия суммы транзакции) или скрытые адреса (для обфускации адреса получателя).

Существуют минимальные уступки, связанные с анонимностью и с использованием удалённых узлов, так как оператору узла известно сколько раз и с каких IP-адресов ваше устройство транслировало транзакции или подсоединялось для обновления. Технология обеспечения анонимности Kovri, которая будет реализована вскоре, позволит значительно снизить эти риски. Если вы используете свой собственный локальный узел, ваш кошелёк сканирует вашу личную копию блокчейна, чтобы получить историю ваших транзакций, а не полагается на третью сторону для извлечения такой информации.

4.3 Майнеры создают новые блоки

4.3.1 Майнеры добавляют блоки в самый длинный блокчейн

Майнеры забирают ожидающие своей очереди транзакции из пула памяти, верифицируют их аутентичность, проверяя валидность криптографических доказательств и подписей, и проверяют, использовался или нет образ ключа ранее (см. раздел 3.2.3 «Кольцевые подписи», в котором разъясняется важность такой проверки).

Чтобы подготовить блок, майнер составляет предварительный список транзакций, которые будут включены в него, наряду с хешем предыдущего блока для обеспечения криптографической связи. Наконец, майнер занимается поиском nonce, который можно использовать для того, чтобы завершить блок.

В любой момент времени тысячи майнеров занимаются самостоятельным (или совместным, в майнинговых пулах) поиском nonce, который позволит закрыть текущий блок транзакций. Как только майнером или пулом будет найден nonce, который позволит закрыть блок, он сообщит о своей версии остальной сети. После получения полного блока другие майн