До того, как Сатоши Накамото применил блокчейн в системе биткоин майнинг калькулятор, было предпринято огромное количество попыток создать децентрализованную платежную систему. Но все они были безуспешны, так как разработчикам не удавалось создать такие условия, которые бы позволили достичь соглашения между всеми участниками сети и обеспечить ее работоспособность. Это и называется консенсусом в сети блокчейн. Он достигается тогда, когда все участники сети согласны относительно валидности транзакций и все реестры – точная копия друг друга.
В статье мы рассмотрим самые популярные алгоритмы консенсуса, как достигается соглашение, подробно поговорим о майнинге, стейкинге и остановимся на криптографической задаче, которую решают участники майнерской сети.
Консенсус в широком смысле этого слова означает способ прийти к соглашению. Важное свойство блокчейна состоит в том, что участникам сети совершенно не обязательно доверять друг другу, как в централизованной системе, достаточно просто договорится о правилах, которые будут устраивать всех. Именно об этих правилах мы сегодня и поговорим.
Proof-of-Work (PoW). Что такое майнинг?
Для начала рассмотрим самый известный алгоритм консенсуса – Proof-of-Work, как следует из названия, — это механизм достижения соглашения между пользователями сети с публичным доказательством проделанной работы. Процесс достижения консенсуса по данному алгоритму тесно связан с майнингом.
Майнинг — это процесс добычи биткоина и других криптовалют, в результате которого в блокчейн добавляется новый блок транзакций и происходит эмиссия монет.
Эмиссия, или выпуск новых монет, является вознаграждением майнера за проделанную работу и потраченную электроэнергию в процессе майнинга.
Добавление новой транзакции требует от сети затрат энергии на решение определённой криптографической задачи. Не получится просто добавить в блокчейн очередной блок – надо еще потратить очень много реальных денег, например, на оплату электричества, покупку оборудования, необходимого для решения этих крипто-задач. К слову, о мошенничестве в блокчейн-сетях. При таком устройстве системы оно просто-напросто невыгодно.
Давайте подробней рассмотрим цикл добавления вашей транзакции в блокчейн.
Вы переводите свою криптовалюту на другой адрес в блокчейне. Информация о вашей транзакции помещается в общий реестр, который называется MemPool. К нему имеют доступ все майнеры сети. Данный список постоянно пополняется новыми транзакциями, оттуда майнеры берут себе то количество операций, которое могут обработать. Затем для каждой транзакции решают сложную криптографическую задачу. Если майнеру удаётся решить задачу, то он отправляет решение на устройства других участников сети. Остальные проверяют, верно ли решена задача и правильно ли сконструирована цепочка блокчейна. Если всё верно, блок добавляется в блокчейн. Здесь стоит сказать о том, что в блокчейн добавляется блок, подготовленный майнером, который первым решил задачу. Дублирование блоков невозможно, иначе возникнет двойное расходование. (Ситуация в сети блокчейн, когда кто-то пытается отправить один биткоин двум получателям одновременно. Однако, когда транзакция подтверждена, отправить те же самые биткоины уже другому получателю невозможно. Чем больше подтверждений есть у каждой отдельной операции, тем сложнее организовать двойное расходование)
Скорость решения задачи зависит от мощности оборудования. Майнер с наибольшей вычислительной мощностью с большей вероятностью решит задачу первым.
Для удобства восприятия информации мы составили для вас небольшую инфографику:
Итак, какую же задачу решает майнер? Чтобы это понять, разберём сначала более подробно, что такое хэш-функция.
Хэш-функция.
Криптографическая хэш-функция — это математический алгоритм, который отображает данные произвольного размера в битовый массив фиксированного размера. Это функция вида F(X+N) = H, где X – любой набор символов неограниченной длины (информация, записанная в блоке), H – это значение хэш-суммы, а N – свободная переменная, в криптографии эту переменную называют Nonce, она представляет собой любое значение от 1 до 4 миллиардов. Результатом шифрования или хэширования является «хэш-сумма», многие называют его просто хешем, он представляет собой набор цифр , в котором зашифрована информация.
У хеш-функции есть очень важные на свойства, благодаря которым её и используют в криптографии:
1. Детерминированность. (В математике – определяемость) Это значит, что одно и то же сообщение с точностью до символа приводит к одному и тому же хеш-значению.
2. Уникальность. Не существует двух разных сообщений с одинаковым хэш-значением. Обратите внимание на это свойство, оно является базовым и наиболее важным. Приведём пример для понимания. Возьмём произведение Теодора Драйзера «Финансист», проведём шифрование, а затем во всём произведении уберём всего одну запятую, и получим совершенно другое значение хэш-суммы. Можете попробовать сами по этой ссылке.
3. Быстрота вычисления. Хэширование позволяет достаточно быстро вычислить нужный хэш для большого объема информации.
4. Необратимость. Хэш-функция не позволяет восстанавливать исходный массив информации из символьной строки. Это можно сделать, только перебрав все возможные варианты, что при бесконечном количестве информации требует много времени и денег.
Алгоритмы хэширования.
Существует множество алгоритмов хеширования – MD5 (Message Digest 5, генерирует 128-битный ключ, что составляет 16 байт данных. Функции и классы для работы с MD5 реализованы во всех языках программирования. MD5 используется на многих веб-сайтах и веб-сервисах.);
SHA-1 (Secure Hash Algorithm 1, генерирует 160-битный ключ, что составляет 20 байт данных. Этот алгоритм считается более надежным, по сравнению с MD5, но и более сложным и выполняется немного медленней);
SHA-2(256), SHA-2(512) и т.д. (Secure Hash Algorithm 2, это вторая версия алгоритма SHA-1, алгоритм может генерировать 256-, 384-, 512-битный ключ, что составляет 32, 48 или 64 байта данных. Этот алгоритм считается более надежных, по сравнению с предшественниками.);
В блокчейне биткоина используется алгоритм SHA-2(256). Число 256 в названии алгоритма означает, что на выходе мы получим строку фиксированной длины 256 бит независимо от того, какие данные поступят на вход.
Скорее всего, к данному этапу статьи у вас возникло пару вопросов: неужели миллиарды транзакций, проведённых в биткоинах, не перебрали все наборы всего лишь 256 битной строки? И почему в начале статьи говорится о строке цифр, а в хеш-значениях присутствуют буквы?
Итак, ответ на первый: ну конечно, нет! Ведь, количество комбинаций равняется 2 в 256 степени, что приблизительно равно 1,158×1077. И да, значение хеша записывается в 16-ричной системе счисления, в которой присутствуют буквы. (В обычной же жизни мы с вами используем 10-тичную, кстати, вот вам конвертер, попробуйте сами)
Криптографическая задача.
Давайте разберёмся, что за задача стоит перед майнерами в сетях блокчейна. Итак, вся информация, находящаяся в блоке (Х), подлежит шифрованию посредством алгоритма SHA-2(256), в ходе чего мы получаем хэш-сумму (H). Алгоритм блокчейна устанавливает некоторую минимальную границу значения хэша, назовём это число Y. Майнер в свою очередь считает хэш-сумму всего блока и сравнивает её с минимальной границей Y. Если условие H