[Из песочницы] Декомпозиция blockchain

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

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

Определим цель использования блокчейна:

Есть несколько участников, которые заинтересованы поддерживать целостность общего массива данных и дополнять его.

Базовая модель


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

Последовательное расширение функционала


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

Хеш предыдущей записи
В блоке хранится хеш-код предыдущей записи. Такой хеш-код однозначно идентифицирует все предыдущие блоки и их взаимное расположение. Следовательно, блок внутри списка не может быть изменен без изменения последующих блоков.

Вычислительная сложность создания блока
В блоке добавляется новое поле — counter — произвольное число. Нужно подобрать такое значение counter’а, чтобы хеш код блока заканчивался на определенное число нулей.

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

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

Несколько записей в блоке
В блоке может быть несколько записей. Майнеры выбирают любые записи для формирования блока. Блок ограничен максимальной длинной.

Ну вот и всё — концептуальная модель готова, спасибо за внимание.

Комментарии (4)

  • 14 октября 2016 в 05:27

    0

    Спасибо. Не совсем понятно, что есть узел и что есть майнер?
    • 14 октября 2016 в 09:38

      0

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

      • 14 октября 2016 в 15:02

        0

        И насколько сильно сложность увеличивается с увеличением длины цепи? К примеру на 10 000 000 записей.
  • 14 октября 2016 в 11:02

    0

    Это не блокчейн в чистом виде, а частный случай — распределенный блокчейн на POW.

© Habrahabr.ru