В любом блокчейне присутствуют два основных типа сообщений, которые передаются в сеть — это транзакции (хеши) и блоки. Сами блоки, в свою очередь, являются списками транзакций. Транзакции формируются участниками системы и их алгоритм консенсуса не касается: для того чтобы инициировать, скажем, отправку биткойнов, никакого соглашения не надо, достаточно знать правильный ключ. Блоки — совсем другое дело. Они являются основным продуктом алгоритма консенсуса и определяют, в каком порядке транзакции будут включены в журнал транзакций.
Для чего все это необходимо? А дело в том, что без согласования между узлами сети возможна двойная трата средств (double spending).
Рассмотрим на примере. Предположим у Алекса есть 1 биткойн. Он может сформировать две транзакции, согласно которым этот биткойн переходит Бобу и Алисе. Если Боб и Алиса никак не согласовывают свою историю транзакций, они оба примут платеж Алекса (произойдет двойная трата), поскольку транзакции будут подписаны электронной подписью Алекса, а до выполнения транзакции у Алекса действительно был этот биткойн! При таком положении Алекс мог бы сделать еще не один десяток транзакций другим пользователям сети.
Чтобы избежать подобной ситуации, участникам сети необходимо согласовывать журналы транзакций. Тогда успешно выполнится только одна из транзакций Алекса, а вторая будет считаться некорректной, поскольку средства Алекса уже были потрачены.
Какой смысл включать транзакции в блоки, а не вести единый реестр транзакций? На практике блоки экономят объем трафика и вычислительные ресурсы узлов сети. Блоки создаются особой категорией узлов сети блокчейна — узлами консенсуса. В случае биткойна и многих других криптовалют (но далеко не всех!) эти узлы поддерживаются майнерами, которые получают за свою работу вознаграждение. Процесс создания новых блоков и называется майнингом. Майнеры активно участвуют в формировании блокчейна, постоянно группируя входящие транзакции в блоки и распространяя их по сети. Вознаграждение формируется за счет добавления новых блоков транзакций в блокчейн, а также комиссионных сборов с транзакций в сети. Для каждой криптовалюты вознаграждения могут быть различным, их алгоритм закладывается еще на стадии написания исходного кода.
Другой тип узлов — это узлы—аудиторы (полные ноды). Они не участвуют в процессе консенсуса, однако имеют у себя полную копию блокчейна. Такие узлы регулярно проверяют работу майнеров и занимаются распределением нагрузки по сети, выполняя функцию своеобразной сети доставки контента для данных блокчейна.
Например, для биткоина полная нода — это подключенный к сети биткоин—клиент (например Bitcoin—QT либо любая другая его реализация). Такая нода включает в себя полный, обновленный набор файлов блокчейна, а также открытый порт 8333, настроенный на прием входящих запросов.
Еще один тип узлов — это легкие клиенты. Легкими они называются потому, что не имеют полной версии блокчейна и содержат лишь те данные, которые важны для узла. Они могут служить основой для организации криптовалютного кошелька. Всей картины сети такой клиент не даст, но позволит эффективно отслеживать баланс пользователя и осуществлять транзакции. Легкие клиенты требуют меньше вычислительных ресурсов и объемов памяти, поэтому могут работать на мобильных платформах.