Блок
Блок – это объединение информации в особую структуру. Именно из блоков, как цепь из звеньев, собран сам блокчейн (от англ. block chain – цепь блоков).
У любого блока есть порядковый номер, называемый высотой блока, дата создания, уникальный хеш (англ. Hash, это отпечаток данных, созданный по определённым алгоритмам), хеш предыдущего блока и список транзакций.
Главное содержимое блока – данные о транзакциях (операциях перевода, создании и уничтожении монет, делегировании и т.д.). Также в каждом блоке есть информация о голосах валидаторов, подтвердивших достоверность данных. Посмотреть основные данные любого блока можно в инструменте, который называется эксплорер (англ. explorer- исследователь). Работа валидаторов – это формирование и подпись блоков данных, за это валидаторы и получают награду за каждый блок.
Содержание
Генезис блок
Генезисный блок — первый блок в блокчейне, который является фундаментом для остальной цепи. Генезис блок - это очень важный элемент любого блокчейна. В генезисном блоке Minter записана информация о том, когда и какой блокчейн создан, с какими параметрами, сколько монет будет зачислено на какие адреса на определенной высоте блока, указаны валидаторы и кандидаты в валидаторы. Например, airdrop (раздача монет) в Minter зачислялся на 501120 блоке, и это было прописано в генезисном блоке.
Параметры блока Minter блокчейна
- Время блока: 5 секунд, то есть примерно каждые 5 секунд создается новый блок.
- Размер: минимум 0, максимум 10 000 транзакций (~180 байтов каждая) + заголовок + подписи валидаторов
- Награда за блок на старте сети составляла 333 BIP и каждые 200 000 блоков уменьшается на 1 BIP, пока не остановится на 68 BIP за блок.
Tendermint Consesus Engine
В основе Minter блокчейна используется Tendermint Consesus Engine. Структура его блока простая:
- Заголовок
- Операции (транзакции)
- Поля для голосов валидаторов.
Структура блока Tendermint Consesus Engine на языке Go:
type Block struct { Header Header // Заголовок, тип данных Header Txs Data // Данные транзакций (операций), тип данных Data Evidence EvidenceData // конфликтующие голоса, тип данных EvidenceData LastCommit Commit // голоса валидаторов, тип данных Commit }
Заголовок блока
Это самая сложная часть блока. Именно здесь записана информация, позволяющая из разрозненных данных, как дом из кирпичей, собрать единую конструкцию – блокчейн.
Структура заголовка блока Tendermint Consesus Engine (Go):
type Header struct { // базовая информация блока Version Version ChainID string Height int64 Time Time NumTxs int64 TotalTxs int64 // информация предыдущего блока LastBlockID BlockID // хеши данных блока LastCommitHash []byte // подтверждения валидаторов из предыдущего блока DataHash []byte // Дерево Меркла хешей транзакций // хеши данных от приложений из предыдущего блока ValidatorsHash []byte // валидаторы текущего блока NextValidatorsHash []byte // валидаторы следующего блока ConsensusHash []byte // параметры консенсуса для текущего блока AppHash []byte // состояние приложения после транзакций из предыдущего блока LastResultsHash []byte // корневой хеш всех данных транзакций из предыдущего блока // информация для достижения консенсуса EvidenceHash []byte // конфликты в данном блоке ProposerAddress []byte // создатель данного блока }
Транзакции
Данные транзакций хранятся в блоке в виде массива произвольной длины, так как их может быть от 0 до 10 тысяч. Каждый элемент массива – одна транзакция.
Голоса валидаторов
Голоса – это подписанные валидаторами сообщения. В каждом блоке хранятся данные о верных подписях и о конфликтах (дублях). Для того, чтобы считать блок валидным, достаточно, чтобы его подписали более ⅔ валидаторов.