Блок

Материал из Minter Wiki
Версия от 05:57, 3 октября 2019; Ilia (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Block.jpg

Блок – это объединение информации в особую структуру. Именно из блоков, как цепь из звеньев, собран сам блокчейн (от англ. 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 тысяч. Каждый элемент массива – одна транзакция.

Голоса валидаторов

Голоса – это подписанные валидаторами сообщения. В каждом блоке хранятся данные о верных подписях и о конфликтах (дублях). Для того, чтобы считать блок валидным, достаточно, чтобы его подписали более ⅔ валидаторов.

Смотрите также

Ссылки