[Из песочницы] Декомпозиция 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.