Прежде чем перейти к основной теме, напомним понятным языком, что такое технология BlockChain в целом. Итак, блокчейн – это, если употребить бухгалтерский сленг, «гроссбух», где до скончания времен отражены и зафиксированы все финансовые операции (транзакции) когда-либо совершенные и осуществляемые. Равно, как аналог, электронный журнал учета имеет собственные страницы.
Блок в блокчейне и является именно такой страницей – информационной единицей, в которой заключены данные о транзакциях. В качестве скрепляющей нити, не позволяющей электронному журналу развалиться, выступают хэш-коды заголовков цифровых объектов.
Другими словами, в каждом заголовке информационной единицы отображается хэш-код предыдущего блока транзакций. На первый взгляд нехитрая технология, которая является фундаментом виртуальной архитектуры Bitcoin.
Важно! Удалить, изменить или предпринять другие противоестественные действия с электронными страницами цифрового «гроссбуха» неосуществимо в принципе. Ведь в противном случае произойдет «цепная реакция»: видоизменение всех заголовков последующих цифровых единиц. Такого «произвола» не допустит сама система, которая надежней любой реальной учетной записи, так как его информация хранится сразу во всех функционирующих компьютерах дифференцированной одноранговой системы.
Строение блока: понятия «Head» и «Payload»
В свою очередь сама информационная единица состоит из нескольких частей – «Head» и «Payload». Под термином «Head» подразумевается «верхняя» часть блока, который подвергается исследованию. А именно та часть, где содержится «инфа» служебного характера. В частности, заголовок транзакции объединяет следующие данные:
- наименование версии электронного объекта;
- дата и время генерации блока;
- хэш-код нового блока;
- хэш-код предыдущего;
- хэш-код всех когда-либо созданных блоков;
- «nonce и bits» – специальные характеристики, вписываемые в информационную единицу в процессе майнинга (о них будем говорить здесь же, но позже).
Из параметров, перечисленных выше, стоит заострить внимание на хэш-коде заголовка, который, по сути, является связующим элементом между всеми непрерывными последовательными цепочками блоков BlockChain, отображаясь в каждой сгенерированной информационной единице. Кроме этих данных, в заголовке нового блока находится хэш созданного цифрового объекта. Его расчет осуществляется на базе алгоритма, именуемого «бинарное (двойное) дерево хэшей» или «Merkle tree».
Важно! На практике алгоритм функционирует в следующем порядке: осуществляется подсчет хэшей всех финансовых операций в отдельно взятом блоке. Затем определяется число (хэш) от суммы хэшей пар транзакций. Процедура дублируется до тех пор, пока не находится единственно верный результат, который станет хэш-кодом финансовой операции в блоке. Каждый шаг подразумевает подсчет парных элементов – ведь дерево бинарное. Нечетный результат исправляется дублированием хэша для образования полновесной пары. Таким образом, заголовки позволяют установить целостность носителя «инфы» – блока.
Разобравшись с «верхней» частью блока, переходим непосредственно к его «телу». Часть информационной единицы, куда вписываются транзакции, называется термином «Payload». Непосредственно сама транзакция в блоке имеет следующую запись: адрес отправителя, сумма перевода, координаты получателя. Однако в реальности все несколько сложнее. Дело в том, что алгоритм «битка» включает в себя термины «Inputs» (входы) и «Outputs» (выходы). Входы – это операции пополняющие счет. Соответственно, выходы – перевод средств на другие счета. Как следствие, транзакция в расширенном виде выглядит следующим образом:
- количество задействованных входов;
- хэш-код вкупе с индексом каждого входа плюс «инфа» служебного типа;
- количество задействованных выходов;
- сумма выходов плюс «инфа» служебного характера;
- точное время финансовой операции.
Такая структура отображает реальный круговорот виртуальной денежной массы между участниками виртуальной платежной конструкции и позволяет оперативно вычислить баланс любого адресата, учитывая задействованные входы и выходы.
Генерация блока
Пройдя все необходимые проверки и подтверждения, любая транзакция готова к отправке с предварительной записью в электронном «гроссбухе». Однако чтобы платежка отправилась к обозначенному адресату, нужно создать контейнер – сгенерировать блок. Тут вступают в игру майнеры. Будучи децентрализованной одноранговой экосистемой, обработка платежек единовременно осуществляется на различных серверах (компьютерах), разбросанных по всем уголкам планеты. Их именуют термином «node» – узел. Вполне логично, что при таком подходе к делу, может возникнуть проблема двойной траты одних и тех же средств, а также наступить настоящий хаос. Решением проблемы стал интегрированный в цифровую архитектуру протокол Proof of Work (PoW) – доказательство работы.
Этот протокол определяет и дает право неоспоримой подписи транзакции тому узлу, который первый справился с решением сложнейшего математического уравнения – то есть, «запечатал» блок. Другие участники майнинга имеют возможность оперативно проверить истинность решения, а также «расписаться» под тем, что все платежки в конкретно взятом информационном объекте валидны.
Собственно, «сложнейшим математическим уравнением» является не что иное, как задача по подбору параметра – nonce. Этот параметр, присовокупленный к заголовку сгенерированной информационной единицы, выдает тот самый пресловутый хэш-код с необходимым количеством нулевых битов (bits).
Проще говоря, необходимо прописать в сгенерированном цифровом объекте такую информационную строчку (nonce), чтобы в итоге получился хэш-код, впереди которого стоят нули. Задача, конечно же, решаема, но только путем перебора nonce, что осуществимо лишь с привлечением серьезного оборудования (отсюда «навороченные» видеокарты и асик-чипы). В тоже время, проверка конечного результата – достаточно элементарная операция. Используя алгоритм хэширования (SHA-256), нужно вычислить хэш-код сгенерированной информационной единицы, в заголовке которого уже добавлен обнаруженный nonce. Именно так достигается полное взаимопонимание между множеством нод в экосистеме «битка». Как следствие, сгенерированный блок «запечатывается» в цепочке таких же цифровых объектов.
Факт! Мероприятие по подбору nonce, вычисления хэш, проверки итогового результата, а затем повторения всего круга действий до тех пор, пока не обнаружится искомое значение с несколькими нулями впереди, называется загадочным для многих словом майнинг.
В заключении…
Добавим, сложность математического уравнения растет пропорционально относительно увеличению количества задействованного для майнинга специального оборудования. Увеличение производственных мощностей влияет на рост количества нулевых битов в искомом значении так, чтобы на обнаружение nonce не тратилось более 10 минут. Такая политика изменения сложности изначально имплементирована в протокол «битка».
Обновление осуществляется автоматически каждые 2016 «запечатанных» блоков – приблизительно, один раз в две недели. Именно по этой причине майнеры всех стран объединяются в сообщества – пулы, чтобы увеличить свои шансы на успех и заработать положенное вознаграждение за сгенерированный блок.